大公司开源怎么作?SOFAStack给出了一个很好的例子

蚂蚁金服的 SOFAStack 做为一个成功地将企业私有项目转化为开源核心模式的知名案例,咱们以前对背后的思考和推进力作过专题分析,可是具体这件事是如何在蚂蚁金服内部发生的、是如何实操的,有不少读者向咱们表示很是感兴趣,而我以为这也是其它技术公司所正在探索和思考的方向。安全

所以,上个月底,老王在参加上海举办的 KubeCon 2019 时,遇到了蚂蚁金服 SOFA 团队的余淮,他目前在蚂蚁金服中间件团队服务与框架组具体负责开发框架与 SOFAStack 的开源工做。因而,参会之余,我和余淮就 SOFA 开源的实操方面进行了深刻的沟通,现将谈话所得整理给你们。微信

SOFA与开源

继去年开始开源 SOFAStack 以来,今年上半年他们又开源了分布式事务框架 Seata 和服务注册中心 SOFARegistry,以前我曾经向蚂蚁金服中间件负责人杨冰了解过为何要将SOFA 开源的背后思考,以及 SOFA 发展迭代的历程,详情能够看以前的文章《蚂蚁金服技术总监杨冰:金融科技公司为何要拥抱开源? 》进行了解。架构

目前,SOFA 的架构已经发展到 SOFA 5 阶段,在今年 2 月,前任 SOFA 开源负责人鲁直还向我分享了 SOFA 5 中重点推动的方向,主要包括 Service Mesh 和 Serverless,以及分布式事务 Seata 的落地,具体内容见文章《蚂蚁金服SOFA开源负责人鲁直:不仅是中间件 ,将来会开源更多》。框架

做为一个成功的开源核心模式的项目,我很是关注 SOFA 开源的实操是如何进行的,是如何进行开源治理的,做为 SOFA 团队的老朋友,咱们话题就直接从 SOFA 的开源治理聊起。less

以SOFA为例:公司内部软件的开源流程

余淮说,从 2015 年开始,蚂蚁金服开启了金融科技对外输出的战略,SOFAStack 也走出了蚂蚁金服,甚至跨越了国界,被更多金融机构与合做伙伴所使用,如天弘基金、信美互信、南京银行、PayTM、DANA 钱包等。分布式

在与合做伙伴以及客户的沟通、合做过程当中,他们发现了 SOFAStack 的理念和能力也正是不少金融行业的企业所须要的。在蚂蚁金融科技对外输出的过程当中,内部已经对SOFAStack 进行了必定程度的代码重构,例如历史兼容逻辑的剥离等,可是并未能达到直接开源的标准。工具

关于开源,内部一直有开源的讨论,到 2017 年双十一结束后正式决定开源。通过了一系列的准备,2018 年 4 月,完成了对 SOFA项目的知足了开源改造的标准后,SOFAStack 立刻宣布正式开源框架中部分重要组件。单元测试

SOFA团队采用的开源策略叫「Open Core」,顾名思义就是要将接口层以及核心实现都开源,以可扩展化的方式来层层构建 SOFAStack 的能力,保证 SOFAStack 的内部版本和开源的版本采用的是同一个内核。为此SOFAStack 作了大量的改造和重构工做。学习

在开源的具体考量上,余淮表示,SOFAStack的开源改造基本上有三条原则,分别是高可扩展性、对内兼容历史版本、对外兼容业界标准。区块链

以 SOFARPC 重构为例,大概经历了这样的过程:

1.首先须要将 SOFARPC 进行了一次核心接口和模型抽象,而后增长了扩展点机制和事件总线机制,全部的对内对外实现都基于这些核心接口和模型去扩展,而且保证这些扩展能力都是平等的、可选的;

2.接着将核心的处理逻辑实现迁移到这套接口和模型上来,保证 RPC 能力完整可用;

3.而后须要将 RPC 里一些对接内部系统的、兼容历史逻辑的代码作成内部扩展,并进行全量测试验证,确保和已有线上的历史方案的兼容,发布上线;

4.最后会调研业界的一些开源标准方案和实现,并对其进行兼容,例如 SOFARPC 不只对接本身的 SOFARegistry 的实现,还兼容了 Zookeeper、Etcd、Nacos等业界优秀的注册中心方案。

虽然上面重构过程听上去没那么复杂,可是在实际过程当中仍是很是考验团队的技术能力的,特别是在抽象核心接口和模型的时候,为了作到既兼容内部又兼容外部,这须要进行大量的调研工做,才能作好这层较为通用抽象。其次在对内逻辑兼容的时候,因为内部的历史负担仍是比较重的,为了能让重构的代码安全上线,团队也作了不少事情。

仍是举 SOFARPC 的例子,蚂蚁内部的服务路由过程比开源是要复杂不少的,特别是配合蚂蚁特有的单元化部署以及异地多活的能力,有时候须要多层路由才能找到目标地址。为了验证重构后逻辑的正确性,除了在开源代码里有单元测试用例外,SOFA团队在内部也构建了一套很是完善的集成框架,专门用来测试已有逻辑的兼容性及正确性。

基于 Open Core 这套思想建设 SOFAStack 之后,其实对开发同窗的工做量来不会变少,反而多是增多的。这是由于在写代码的同时,须要更多的考虑内部外部的使用状况,对代码质量也提出了更高的要求,开发流程会变得更加复杂。

例如,内部新增一个特性,在之前可能直接修改代码通过测试就发布上线了,但如今的话会去思考这其中哪些能力是通用的,把这些能力抽象一下放到开源版本里去,而后开源版测试后发布,这个时候内部版本在基于这个开源版进行扩展,再通过测试后发布上线。

虽然开发同窗工做变多了,可是这样的话可让SOFAStack 的核心代码被更多的开发者 Review,在更多的系统中运行,在更多的场景下进行验证,对 SOFAStack 的品质保证有很是大的帮助。

此外在开源进度上,余淮表示, SOFAStack并不追求开源所有内部的组件,而是会根据产品的特性和开源准备的状况有选择的开源。

例如 SOFAStack 下的分库分表组件,由于产品特性和 OB 等内部结合紧密就暂时不会开源。金融级分布式架构下未开源部分能力,SOFAStack会和与业界其它优秀的开源项目作集成,保证整个金融级分布式架构功能的完整性和多样性

因此对于 SOFAStack 来讲,并不仅有本身开源的产品,而更多关注的是,和整个社区里全部开源优秀的产品一块儿,打造一套快速构建金融级分布式架构的套件。

开源项目管理

开源一个项目,做为背后推进的公司事实上要付出至关多的人力和资金成本,同时,也不可避免的会涉及到审批流程。随着蚂蚁金服愈来愈多领域的项目开源,包括SOFAStack,AI,区块链等,蚂蚁金服内部出台了相应的严格的审核机制,包括技术、合规、法务、安全等部门进行审核,同时还会考察项目开源对公司的意义,以及是否对社区有价值,在审核经过以后项目就会正式开源与你们见面了。

蚂蚁金服对于开源文化是十分友好的,其内部的代码也大多都是公开在内网的 GitLab 仓库,常常会有业务团队对 SOFAStack 提交一些合并请求(拉取请求)来帮助项目的发展。

同时,蚂蚁金服的工程师也广泛地拥抱开源,开源可以帮助项目产生更多、更好的想法,同时也能够吸取来自社区的贡献,让项目自己可以作的更好,这是你们所喜闻乐见的。

SOFA的社区治理

开源项目并非开放源代码就是终点,事实上,这只是开始,以后持续不断的开源治理才是开源之路。而如何将一个开源项目从最开始的由开源项目背后的公司主导转变为社区性项目,这是一个值得思考和探索的课题。

基于目前的开源模式和社区建设力度,SOFA 团队也在尽量去吸引外部的贡献者。不过 SOFAStack 项目因为大量应用在蚂蚁金服及很多企业线上环境,因此目前对于开发者技术能力以及代码质量要求相对较高,所以,这项任务还须要较多的工做。

目前 SOFA 社区已经涌现了很多积极的开发者和贡献者,解决了社区提出的一些重要需求。这其中一些功能组件的完成,贡献者提供了至关重要的代码基础,而 SOFA 社区成员也积极参与到功能的完善和规范化工做中,甚至有的拉取请求要通过十几个来回才能被合并入功能分支。

余淮同时也谈到,下一步会引入更友好的流程和工具,让更多的开发者可以更容易地加入到 SOFAStack 社区的开发和贡献当中,为 SOFAStack 的共同发展作出包括贡献代码、文档完善和推广宣传等各个方面的贡献。

在社区团队方面,SOFAStack 也设计了诸如贡献者(Contributor)、提交者(Committer)、委员会成员(PMC)等多个层面的贡献者认证机制,以让各个层级热情、精力不一样的人可以加入到项目的贡献中。

SOFAStack开源至今社区已经有120 多位 Contributor 共建社区,也有十来位外部 Committer经过其贡献的代码得到社区的承认,并进一步取得对社区发展的影响力。谈及这一点,余淮表示,为了保证代码质量,来自社区的代码贡献每每须要SOFAStack社区已有成员和贡献者许屡次的往复修改和完善才能进入到代码主干,可是经过这些互动,才能真正遴选出来社区的中坚分子,也进一步将项目融入到社区中。

在社区建设方面,除了在Github 上、钉钉微信群的一些交流外,SOFAStack 社区还会有丰富的线上线下的活动。每周相似周报形式的 SOFAWeekly,帮助你们了解社区的最新资讯和项目进展;社区共建的SOFALab 源码解析实验室,和社区同窗一块儿学习和解析源码,整理成册,帮助你们更好的学习项目;每个月若干次的 SOFAChannel 直播,能够在线和讲师进行沟通交流。与此同时,SOFAStack也会按期在全国各地举行线下的 SOFAMeetup 活动,你们一块儿面对面交流,目前已经在全国五个城市举办了 7 场,共有一千多人到现场;也会举办 Workshop 和 CodeLab 等实践类的活动,像本次的 KubeCon 就有一场 Workshop,手把手带着你们一块儿实践 SOFAStack。

在社区合做方面,社区里有不少优秀的开发者和开源项目,SOFA团队也常常和社区互相学习、分享、交流技术,目前SOFAStack 已经和不少开源社群创建了良好的关系,包括国内 ServiceMesher,K8S 中国,ShardingSephere,SkyWalking,Ant Design,EggJS 等,也包括国外的 light4j 等。

此外,余淮还谈到,SOFAStack 在今年还会结合实际业务方面和开源社区作更多的能力整合提高,他举例说到 SOFAStack 今年会和作 Spring Cloud 更深刻的集成和加强,例如 Spring Cloud 仍是文件级别的配置更新,配合 SOFAStack能够作到更细粒度的配置更新等。

总结

要说我对哪一个国内开源项目作的研究最深刻,那非SOFAStack 莫属。自从 SOFAStack 开源以来,我前后和杨冰、鲁直从 SOFA 开源的思想、战略层面进行过深刻沟通,而此次,我但愿能够从战术上,从实操层面分享他们在 SOFA 开源方面的经验给广大的开源社区和开源企业。

相关文章
相关标签/搜索