开源技术怎么使用

开源技术使用者可以分为三类。第一类是使用开源技术的用户,是开源软件的终端用户;第二类是进行二次开发并使用的开源技术的用户,是使用开源软件代码用于自身业务开发的开源使用者;第三类是进行二次开发并进行售卖的软件厂商,是将开源软件集成在自身产品或解决方案中,向终端用户进行分发销售的软件厂商或集成服务商。

根据开源用户的三种类型,开源技术的使用方式同样可分为三种。第一种是直接使用原生开源技术,第二种是对开源技术进行二次开发再进行使用,第三种是购买基于开源技术的商业软件。

1 使用开源技术的风险

不管是直接使用开源技术,还是购买开源技术的商业软件都需要考虑开源技术带来的风险,不同的是规避开源技术风险的责任主体不同。

企业在使用或引入开源软件或代码时,需要考虑开源风险、违约风险、知识产权风险、开源许可证兼容性风险,以及数据安全及隐私风险。

2 如何使用开源技术

由于开源技术在使用过程中存在的风险问题,所以应分步骤,有节奏的使用开源技术。通常先熟悉开源软件进行测试,规划应急预案,为满足业务场景需求进行二次开发。

测试。通读开源项目的设计文档,了解设计原理;核对每个配置项的作用和影响,识别关键配置项;进行多种场景的性能测试;进行压力测试,连续运行程序,分析CPU、内存、磁盘IO等指标;故障测试,模拟断电、拔网线、重启100次以上等故障。

灰度发布。先在非核心业务上使用。

应急预案。对于重要的业务、使用开源技术时,最好有另外一个成熟的方案做备份。

二次开发。二次开发过程需要先确定开源软件跟随策略,再设计编码,测试发布。

  • 确定开源软件跟随策略。开源软件跟随策略一般分为两种。一种是“私有分支”策略,一种是“社区先行”(Upstream First)策略。

私有分支策略即在公司内建立基于开源社区某个版本的私有的产品版本分支,并在其上增加定制功能,经测试后发布给用户使用。后续私有分支的版本随开源社区版本发展而发展。私有分支版本前进一个版本时,选择社区的一个新版本(不一定跟随每个社区版本),然后合入以前开发的定制功能。这种策略为国内外很多厂家采用。其主要优点是可以比较迅速的反应用户的需求,及时的提供可用的解决方案和软件给用户使用。同时,作为差异化竞争力的私有定制功能可以不开源,增强产品功能方面的竞争力。缺点是由于存在私有定制功能,导致跟随社区版本发展时每次都需要进行功能整合并进行大量测试。这会消耗很多的工作量。而且存在未来社区中也出现了类似功能,导致私有功能与社区实现不兼容的问题。

社区先行策略指商用产品中所需的所有功能均首先在开源社区中进行开发,并贡献到开源社区。商用版本直接继承开源社区版本的功能,并根据产品需要进行模块和功能裁剪。同时进行商用标准的测试工作。在测试中发现的故障,经修改后也及时贡献到社区。这种策略的主要应用厂商是红帽(Red Hat)。此策略的优点是,可以快速的跟随开源社区版本。防止每次版本跟随时需要额外合入大量自行开发的私有功能,消耗大量工作量。缺点是因为社区版本节奏相对比较慢,从而导致商用版本在响应用户需求方面有时会滞后。另一方面讲,这也保证了企业用户可以使用到更成熟稳定的开源技术产品。

  •  方案设计。基于开源软件的二次开发的方案设计,除按照普通功能开发流程以外,还应特别关注以下方面:

a. 需要看社区中是否已经在进行类似功能的开发,如果已经正在进行开发,则可以等社区开发完成。

b. 需要考虑与社区现有接口的兼容性,防止未来存在不兼容的风险。

c. 使用开源软件中的接口时要注意接口版本问题。防止出现依赖即将被废弃接口的问题。

d. 需要考虑开源许可证的要求。对于限制比较严格的许可证,需要考虑新开发功能的存在形式。是直接修改开源代码,或者采用库的形式,还是采用独立服务的形式等。

  •  编码。基于开源软件的二次开发的编码,除按照普通编码的要求以外,还应特别关注以下方面:

a. 编码需要注意遵循开源许可证的要求,特别需要注意不要清除原版权信息,并添加开发者的版权信息。

b. 需要遵循开源社区的编码规范和要求,便于后续在需要时将代码贡献到开源社区。

  • 测试 。基于开源软件的二次发测试 ,除按照普通的要求以外,还应注意尽量引入开源社区原CI等测试系统 和工具链。

  • 发布 。可采用灰度发布的方式。

  • 运维 。采用 DevOps运维方式。需要有完善的版本升级案。支持跨社区大版本的,(尽量)不中断业务平滑升级方式。




素材来源于中国通信院《开源治理白皮书》


2018年7月27日 10:05