查看其它 10 个回答tongyizhou的回答

这跟问题比较复杂,从开源软件研发特点的角度来看有以下分种情况:
1. 基于社区版开源软件自研:这是国内企业采用最多的方式。此研发方式的核心是要考虑并解决自研软件与社区版本间演进性差别的问题。例如企业在k8s1.8版本的基础上进行了自研(增加了部分功能,修复了很多bug),当社区版本演进至2.0时,企业版本需要在2.0的基础上重新实现1.8版本上的自研功能,才能顺利升级到2.0版本。长此以往,云原生时代开源软件快速的演进性会导致企业自研面临两难问题:不升级则不能享受到社区版开源中的新成果;升级则牵一发动全身,随着版本演进需要重写的代码量越来越大。解决方法有二:

a. 对于非核心部分的功能增强,建议利用好社区版组件的API在组件外单独开发,保证此部分功能与社区版组件清晰明确的界限;
b. 对于必须要修改社区版核心组件的研发及bug修复,建议参考红帽“上游优先”的研发策略,将自己的代码提交至上游社区(如k8s社区),这部分代码被社区接纳后会自动被集成到后续发行的社区版本中。以此避免相同代码在企业更新社区软件版本时的重复撰写与维护。

2. 基于企业级开源软件自研:这是国际上先进云原生玩儿家的思路。企业可以选取100%开源的企业级社区软件作为研发基础(企业级开源软件保证了较高的稳定性和较少的bug;100%开源保证了企业可以基于其研发不会有法律或知识产权风险),利用企业级开源软件的API在外围进行功能增强研发,打包形成自己的产品。企业级开源软件本身的稳定性、演进性等会消耗大量研发力量又少有行业属性价值的功能则直接依靠企业级开源软件供应商的版本演进解决。这种方式在保证了开源组件稳定性、演进性的同时,大大节省了企业的研发力量投入,是一举多得的思路。

IT其它 · 2021-08-02
浏览2335

回答者

tongyizhou
战略产品业务拓展经理红帽企业级开源解决方案中心
擅长领域: 云计算容器云容器

tongyizhou 最近回答过的问题

回答状态

  • 发布时间:2021-08-02
  • 关注会员:13 人
  • 回答浏览:2335
  • X社区推广