引言
最近,我听到了一个消息,蚂蚁金服将会开源 SOFA最核心的两个组件——分布式事务框架和服务注册中心。
熟悉中间件的朋友们都知道,这两个组件都是针对当前最火的微服务架构。其中,分布式事物框架是解决数据一致性问题的关键。服务注册中心则是服务治理的基础。在这两块开源后,SOFA 将成为一套真正完备的分布式解决方案。
作为开源人士,我对此消息深感兴趣,因此联系到了蚂蚁金服中间件团队的杨冰总监,就此消息向他求证。机缘凑巧之下,杨冰花费了宝贵的时间,和我深入讲述了 SOFA 开源的思考,以及近期的规划。
通过这次交谈,也让我看到了一个成功的商业公司是如何拥抱开源、并将开源作为其根本战略来撬动技术红利,支持其急速发展的业务需求的。
以下是正文,我将它分享出来以飨读者。
如今,开源已经成为主流,可以说,整个信息产业已经从过去的闭源模式转换为现今的开源模式。各种开源公司纷纷创新不同的开源模式,其中以 RedHat、Google、Facebook 等公司所取得的成绩最为耀眼。2018 年的时候,我曾经参与“开源社”主持的《2018 中国开源年度报告》的撰写工作,并建立了一个数学分析模型,以此来对中国的互联网公司的开源项目分析其活跃度和健康度。让我既感意外,也不意外的是,阿里系的开源项目占据了活跃度排行榜前五的第一、第二和第四;甚至在前五十个项目中,阿里系的开源项目占据了超过一半的份额!我不意外的是,业界一直对阿里在开源方面的动作和力度颇有感受;意外的是,这种力度还是超乎了我的想象。这其中包括阿里巴巴集团和蚂蚁金服等都贡献了相当可观的开源项目。
因此,这次遇到杨冰时,我就开源方面和他深入聊了几句,想了解一下蚂蚁金服是如何思考开源和践行开源的,是如何将开源与公司的商业价值有机地结合起来的。
缘何开源
作为一家商业公司,宣称自己开源,甚至也形式上开源一些代码,其实已经是很常见的事情了。但是,真正能将开源与公司的技术演进相融合,并能有效地助推公司业务发展的,却并不太多。这件事其实并没有那么简单——远非只是上传到 GitHub 那么简单。
根据业界的经验,在公司的技术产品开源方面,要将现有场景的代码开源,至少需要在已经运行稳定、结构清晰的现有代码基础上多付出 30% 的技术投入,对代码进行梳理、完善和通用化,才能做到初步的代码开源;而进一步要将这些开源代码维护下去,乃至于和公司业务线上的产品代码保持同步发展,多付出的技术成本还远远不止这些。作为一个互联网技术老兵,我对此深以为然。
那么,蚂蚁金服是如何说服公司决策层在尚未看到开源回报的前景下,同意付出这么多的额外代价来支持开源的呢?推动开源的力量是因何而来的?
“首先,开源是个共赢的模式,对于蚂蚁金服来说,开源可以扩大技术服务场景,为支付、金融等更多的客户提供服务,提升合作伙伴的效率。”杨冰说,“虽然,蚂蚁金服已经有很多的业务场景,也在很多场景下取得了超大规模的实践经验,但是,依然存在没有覆盖到的金融服务场景。而将技术开源出来,可以供更多的客户应用到其自身的场景下——这些场景有效的补充了蚂蚁金服的技术应用面,也为更完善的技术框架奠定了基础。因此,我们选择将 SOFA 中间件框架逐步开源出来,在贡献给社区的同时,也期待社区、合作伙伴甚至客户,都能够一起参与共建,形成行业标准和最佳实践。”
“其次,对金融服务来说,监管和自主可控的要求更多,”杨冰接着谈到,“客户也希望可以对其所采用的技术有更多的掌控。”开源是一种可以使客户和上下游产业共同参与和发展的可行模式。
“所以,其实并不是技术部门去说服公司决策层去开源,而是业务发展的自然选择,这也是一种合理的发展方向。”他总结道。这样的结果,其实是和当前流行的开源商业模式所暗合的。
“另外,如你所说,确实在开源时,我们做了很大的改造。以可扩展化的方式来层层构建 SOFA 框架的能力,保证 SOFA 的内部版本和开源的版本采用的是同一个内核。在开源时,剥离了特定业务的逻辑,而保持了公司内部的业务线上的代码和开源代码的核心是一致的。这样,只要公司的业务在持续发展,开源的代码就会一直维护和演进下去。所以 SOFA 的内部版本就是在开源版本之上扩展了内部逻辑和历史版本的兼容逻辑。开源版本的核心逻辑,内外是一致的,并在蚂蚁金服的生产环境中被广泛使用,同时会随着蚂蚁金服自身业务诉求的驱动不断的演进。”杨冰补充道,“但这是值得的,在为开源代码做改进时,也是为公司自己的业务做改进,这是双赢且可持续发展的。”
很多公司在初涉开源时,常常有疑虑,将核心技术开放出去,会不会导致竞争对手的技术提升,会不会造成更大的技术竞争压力?
“事实上,我们在最初准备开源时,也有讨论过这个方面。技术要被更多人用、更多场景用,才会有发展。而开放的技术才能带来团队的发展,因为技术是动态发展的,作为开源的一方,事实上在技术上是相对领先的。开源和掌握是两码事,掌握和用好又是两码事,所以,因开源而带来的竞争,其实是助推整个开源体系的发展的,是良性的、有益的。”杨冰说,“而从社区和行业现状看,大家都在开放,封闭的技术体系会逐渐落后。只有开放才能求同存异,共同发展。”
花絮
我问蚂蚁金服的朋友,在你们开源中有什么有趣的“段子”吗?可以讲来听听。
我朋友过了几天后,给我发来了这样一段文字:
“参与双十一的中间件团队的常态是什么呢?
当晚,团队的常态大概就是喝着茶等零点高峰,高峰期过了之后,当然就是参与买买买啦。
我们很多的一些事情的初始的想法都是来自于双十一当天的夜聊,似乎在经历了紧张的零点高峰之后,脑细胞特别活跃。
对于基础设施团队来说,双十一算是一次大考的结束,考完成绩出来了,我们就想琢磨一些有挑战的事情,于是我们会天马行空地聊一聊对于下一年在技术上需要去做的事情。而在 2017 年的双十一当天,SOFA 的几个同学就围在一起聊了 SOFA 能不能开源?为什么要开源?开源和商业化之间的关系?开源后要做哪些事情等等,这个算是 SOFA 开源的第一次内部讨论。
从这次内部讨论之后,经过了大约半年的准备时间,我们在 2018 年 4 月份正式宣布开源并一直在逐步开源的进程中。”
他说,这就是他们憋了半天想出来的“段子”,哈哈哈,这群可爱的技术人啊。
SOFA 的演进和开源之路
SOFA 中间件框架是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是一套分布式架构的完整的解决方案,也是在金融场景里锤炼出来的最佳实践。
SOFA开源全景图,涵盖了微服务领域的各个方面,同时也积极和业界流行的开源组件结合,包括阿里巴巴集团开源的Nacos、Sentinel等,为用户提供更加广泛地选择。
SOFA 作为一个演进了几年的框架,也一定程度上代表了蚂蚁金服的技术体系的演变,并且现在形成了开源核心、开放式(组件式)开源的模式。SOFA 从 2018 年开始开源,但是我比较好奇 SOFA 开源之前的发展旅程是怎样的。
杨冰说,“最早的时候,在蚂蚁金服还没有从淘宝分拆出来时,公司内使用过一个名为 Webx 的框架,但是随着业务的发展和技术的演讲,这套框架已经不太适应淘宝的需求。那个时候胡喜(现蚂蚁金服副 CTO)就重新创建了一个新的框架——SOFA 中间件框架。”
SOFA 中间件在蚂蚁内部经历了十年的发展和五代架构的演进,被广泛应用在包括支付、借贷、信用、基金、保险等全金融场景,支撑着蚂蚁平稳度过历次双十一、双十二、新春红包等大考,创造了 25.6 万笔每秒的交易记录,并还在不断刷新这个记录。
“SOFA 的版本迭代和公司的架构发展是密切相关的。比如说我们从 SOFA1 刚刚开始的时候,会做模块化的事情。到了 SOFA2 开始引入整个微服务的体系。到 SOFA3 我们希望能够在微服务体系下,能够把一些服务聚合在一起,组成一个链路出来,这就是我们说的合并部署。”
“随着每年的交易量的不断上升,让我们必须从单体架构转到服务化架构,然后演进到单元化架构、弹性架构。SOFA 大部分的功能升级都是伴随着整个公司的技术架构目标上的更大挑战进行的。”杨冰说,“我个人是经历了 SOFA1 到 SOFA2 开发过程,从 SOFA1 整体完成落地,到 SOFA2 引入了服务的架构。到了 SOFA3 我们把 Tomcat JBoss 那层替换掉,变成自研的应用服务器,解决了我们内部系统做类隔离、模块隔离以及合并部署的问题。”
SOFA4:迈入开源
正如前面所谈到的,开源既有的代码是需要做许多繁重的工作的,所以, SOFA 直到发展到第四代才为开源做好了准备,并将开源作为 SOFA4 的核心目标。
“SOFA 发展了这么多年,是有非常重的历史包袱的,这也是我们为开源准备了非常长时间的原因。在从 SOFA3 到 SOFA4 的整个过程当中,在把整个 SOFA 做轻量化的过程当中,其实就是在为开源做准备。有一些公用的能力(和蚂蚁金服的整个架构或业务没有强相关的部分)我们都希望可以开源出来。我们做开源这件事情不会把我们代码分为完全两套东西,然后两个分别演进,我们觉得这不是开源的正确做法。”杨冰说,“另外,开源对我们整个团队的消耗是非常大的,我们希望用同一套代码来实现内部的兼容和外部的开源,我们会在开源的代码当中留一些比较好的扩展点,这也是对我们本身代码架构可扩展性的挑战,目前我们做到的程度就是这样的。”
SOFA 从 2018 年 4 月开始对外开源,得益于社区和开发者的认同,在经历了半年多的时间,SOFA 所有相关的开源代码,获得了累计 10000+ 的 Star和 80 多个代码贡献者。
在线上社区方面,SOFA 开源的站点(https://www.sofastack.tech/)也是在不断沉淀相关的文章和文档。
杨冰说,“原先我们觉得开源就是最好的,然而在 SOFA 演进的过程中,我们发现我们的场景足以构建出来比开源软件复杂度更高、能力更强的体系。我自己也在参与这个的过程当中收获了很多。这件事情也是从一个侧面反映了蚂蚁金服技术演进的历程。我们从最早的 IOE 架构,到部分采用开源软件,再到逐步开始全套自研。在自研过程当中,拥抱部分开源软件,并且去做深度的创造,做一些自己的创新。整个过程其实是一条非常艰难的路。”
杨冰说,“我认为整个基础设施是应该走开源化道路的,因为从 Linux 到 Kubernetes,已经被一次又一次地证明。越底层的基础代码,包括 SOFA 中间件这样的东西,看起来逻辑没有业务系统那么复杂,然而其实它考虑的一些细节、设计的优雅性、架构的健壮性其实是非常强的。而且,它一旦要去支撑那么多业务系统,整个工程的复杂度也是非常高的,很难用一家公司的程序员去搞定整个技术栈。SOFA 也是一样的,我们越来越发现这方面的一些趋势。我们靠一己之力去做是很难的,再加上我们既要对内支撑又要对外支持。现在明白了这样一个趋势,因此我觉得应该回馈社区,和社区共建才是比较好的一条路。以 Linux 为代表的疯狂发展,以及伴随着而来的商业化生态的繁荣,是一次又一次向世界证明,开源和商业化的结合是可以非常完美的。”
SOFA5:拥抱 Service Mesh
从多年前的 SOA 架构,到现在的容器化、微服务的技术演变,我们可以看到虽然技术在逐步变化,但是其主体指导思想还是一脉相承的。蚂蚁金服在微服务方面已经走到了探索的前沿,那么,当前的 Service Mesh 技术在 SOFA 的发展过程中会起到什么作用?
“这两年我们在积极拥抱、布局 Mesh,在演进方向上,我个人比较关注 Mesh 这个方向,因为我个人认为这是把基础设施沉淀到我们整个技术平台当中非常关键的一环。这也是我们 SOFA5 的主要目标。”杨冰说,“随着容器技术的兴起,可以将以往的中间件组件拆分的更细、更灵动,而资源利用率和运维效率也得到了进一步的改善。”
近年来,随着 Kubernetes 确立了其在容器领域的统治地位,以及Serverless 模式等不可变基础设施的架构进一步成熟,可以将服务在上层进一步进行抽象,为现在大规模的容器化、微服务化奠定了坚实的基础。
也有一些业界的意见认为,Service Mesh 将会取代中间件。
杨冰认为,“蚂蚁金服已经在中间件方面探索的比较深远,规模也相当的大,为拿到业务红利做了很多优化,这些能力还是会存在,只是通过换了一种跟应用集成的方式,让 SDK 变得更轻。随着基础技术平台逐步走向云化,我们认为 ServiceMesh 将会是连接现在这个时代和云原生时代的桥梁,而且无论中间件还是很多基础技术组件都将走向 Serverless。Serverless 对开发者而言将是一种全新编程模型,对运维人员而言则是颠覆性的运维模式,甚至是一种 Opsless,我相信广义的 Serverless 模式会成为云原生时代的主角。”
Service Mesh 这个新兴领域是很大的一个热点。蚂蚁金服和社区一起共同发起了 http://www.servicemesher.com/ 这样一个针对中国的Service Mesh 领域开发者的社群,有很多的志愿者,蚂蚁金服是其中之一。
在蚂蚁金服的Service Mesh领域,涉及两个开源项目SOFAMesh和SOFAMosn。这两个项目的定位是这样:
- SOFAMesh 项目:是蚂蚁金服 Service Mesh 的控制平面,分支自 Istio 项目。在Istio体系和框架内进行了功能补充、扩展、增强和改进,立足于探索并解决 Istio 生产落地,尤其是大规模落地中遇到的实际问题,在充分验证之后贡献回 Istio 上游。
- SOFAMosn 项目:蚂蚁金服新型的基础设施和中间件的底层网络通用解决方案,可以有多种产品形态。在蚂蚁金服 Service Mesh 中承担数据平面的角色,和 SOFAMesh 项目配合使用,兼容 Istio 体系。此外 SOFAMosn 还将用于 Ingress / API Gateway / Serverless Function Gateway 等场景。
目前蚂蚁金服开发团队已经和 Istio 开发团队建立联系,在 Istio 大规模落地方面进行合作和探索,相关实践和创新会在生产验证/代码稳定之后会贡献出来。
Service Mesh 是一个非常新的技术,Istio 也是一个新兴的项目,在生产落地上存在很多需要了解的细节和可能遇到的各种问题。而且有些需求是有共性的,如 RPC 协议的支持,旧有非微服务应用的支持, 现有应用升级 Istio 的平滑迁移等。
“我们开源 SOFAMesh 和 SOFAMosn,一方面是希望可以将我们在 Service Mesh 和 Istio 落地的知识和经验分享出去看,另一方面希望通过开源共建的方式一起来将这个两个项目做的更完善。”杨冰说,“我们虽然现在开源出来的版本还不多,但是未来我们会把整个金融分布式云原生架构的领域补齐,一方面会把内部同领域产品更完整的开放出来,另一方面和每一个领域的社区实现都做到兼容和可互相集成。”
NEXT:分布式事务以及服务注册中心开源
蚂蚁在 2007 年就开始在核心的业务中去使用自研的分布式事务框架去解决服务化以及数据库拆分后的数据一致性问题,经过 10 多年的演进,SOFA 的分布式事务框架得到了蚂蚁内部业务广泛地使用与锻炼,包括蚂蚁金服最核心的交易、支付、账务系统等,在期间,SOFA 分布式事务框架也演化出了针对不用的业务场景的使用模式,兼顾研发效率与性能。而阿里巴巴前几个月也开源了其分布式事务框架 Fescar,蚂蚁金服和阿里巴巴将在分布式事务这个领域上强强联手,SOFA 的分布式事务框架将与 Fescar 合并,为业界提供更加优秀,更加全面的开源分布式事务解决方案。
服务注册中心是微服务领域的重要组成部分,SOFA 的服务注册中心最早源自于淘宝的初版 ConfigServer,在支付宝/蚂蚁金服的业务发展驱动下,近十年间已经演进至第五代,具备无限水平扩展,高效的推送以及基于 AP 架构高可用能力,同时结合 SOFARPC 具备异地多活单元化架构支撑能力,SOFA 服务注册中心的开源将会极大丰富整个 SOFA 开源的生态体系,也为微服务领域带来一个全新的服务发现解决方案。
总结
纵观蚂蚁金服的 SOFA 中间件开源的历程,我们看到了一个大型的商业公司是如何将开源核心模式和其商业模式紧密结合的;其走过的从采用专有软件、应用部分开源软件、演化自身的自研软件,到开源核心软件、全面拥抱开源世界的路径值得很多技术企业学习和思考。
“穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访,将为大家介绍中国开源领域中一些积极推动开源,谙熟开源思想的技术人,并辨析其思考、挖掘其动因,揭示其背后所发生的事情,为关注开源、有志于开源的企业和技术人标出一条路径。
取名为“穿山甲”寓意有二:取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用;穿山甲是珍稀保护动物,宣传公益。