二月初春,在西子湖畔的细雨中,我拜访了蚂蚁金服中间件团队,和 SOFA 技术负责人鲁直做了一次深入交谈,更妙的是,鲁直也是负责 SOFA 开源事务推进的人,而这样一个切实践行开放核心模式的开源项目,也正是我非常感兴趣的。
两个技术人的谈话,自然是朴实而直白的,话题主要围绕着 SOFA 和开源主题展开,希望也能一样引起同是技术人的你的共鸣。
人物介绍
采访者:老王,Linux 中国开源社区创始人,开源布道人,有 20 年互联网从业经历的技术老兵。
受访者:鲁直,蚂蚁金服 SOFA 开源负责人。
虽然我和鲁直在微信上已经联系很久了,但这还是第一次见面。交谈中,我了解到鲁直是 2009 年加入阿里巴巴工作,已经有十年了。刚开始是在 1688.COM 做业务系统,对中间件技术非常感兴趣,也会经常研究各种中间件的实现和功能。后来在 2013 年时,为了更深入地学习研究中间件框架,转到了蚂蚁金服中间件团队,从那个时候开始就一直在做 SOFA。
目前鲁直在 SOFA 的团队主要负责的工作包括几个部分。其中一个主要部分就是 SOFA 开源相关的工作。SOFA 的产品体系非常广,包括已经对外开源的部分、内部整个微服务体系,以及 SOFA 框架等等——而这些开源相关的工作主要是由鲁直负责推动的。
当然,作为技术负责人,鲁直既要带技术团队也要做技术工作。谈及这一点,鲁直说:
“我觉得做技术管理,跟普通的管理不太一样,因为技术管理最重要的一个点是除了管理之外,还要保持一定的技术判断力和敏锐度。对一些新技术,包括团队中遇到一些重大的技术问题,你都要有一些方向性的判断。虽然最后不一定是你具体解决的,但是在整个团队的技术攻坚和技术选型上,要一起确立方向。”
我以前也做过十余年的技术管理,我很能够感受这种情况,重大问题技术负责人更要迎难而上。
SOFA5 落子 Service Mesh
就我了解的情况,现在 SOFA 已经发展到了 SOFA5 了。在 SOFA4 阶段,主要的任务是将开源体系捋清楚了,然后开始按步骤地开源;到现在发展到了 SOFA5。我想知道从 SOFA4 发展到 SOFA5,是什么让蚂蚁金服中间件团队判断 SOFA4 的阶段性目标已经达成,可以迈进到新的 SOFA5 阶段了呢?
“从整个业界趋势上来讲,SOFA4 的架构相对来说还是偏传统一些,更多是对我们之前的技术框架的整理和梳理。在这个阶段,SOFA 的代码经过了非常多的优化和重构,才达到了对外开源的要求,从而 SOFA 走上了开源核心的模式,逐步分阶段的将各个部分进行了开源。”鲁直讲到,“但是,从我们对业界的整体判断上来说,未来无疑是云的时代,所以说要考虑怎么让所有的业务系统能够提供云的能力,比如说 Serverless。”
接着这个话题,鲁直讲了他对云计算的理解:“一方面云计算肯定要为整个业务的发展提供更加方便的基础资源,可以不用去关心底层的基础设施。Serverless 字面的意思就是说‘无服务器’——我不用关心服务器怎么来的,不用关心基础设施,只要关心业务代码就可以了。那反过来对于云服务商来说,经过了这一层抽象,其资源利用率会更高,可以有更多的利润空间,这是一个双赢的局面。对于用户来讲,这种好处是实实在在的,可以更少关注基础设施,只关心代码就可以了。”
“我们希望在 SOFA5 的方向上,在这个新的迭代中,去让业务——包括让未来我们开源出来各种功能、各样服务模式——都更多地去关心自己的业务代码,而不用再过多地关心基础设施。”鲁直说,
在 SOFA5 中,一个重要的方向就是 ServiceMesh 这个方向,这将是 SOFA5 中非常重要的特性。鲁直强调了其对 Service Mesh 技术的看好:“我认为 Service Mesh 是迈向未来往前走的非常关键的一步,让业务不用再关心基础设施。通过 Service Mesh,我们可以将很多技术能力直接放到基础设施里面,而业务可以不用感知到这一层。原来可能需要花几个小时或者更多的时间解决的基础设施问题,现在可以通过 Service Mesh 解决掉。”
“目前我们我们已经在生产环境中应用了 Service Mesh。我们在这方面有非常大的决心,我们希望能够在今年,在更大的范围中去落地 Service Mesh。当前这个阶段更聚焦在这种技术的内部落地上,希望用好了,再给社区做更多的贡献。”
Service Mesh 这个词最早是由开发 Linkerd 的 Buoyant 公司于 2016 年提出的,随着 Linkerd 的传入,Service Mesh 也进入国内技术社区的视野。Service Mesh 也被翻译为“服务网格”。Linkerd 则是业界第一个 Service Mesh。
Service Mesh 是一个基础设施层,用于处理服务间通信,负责实现请求的可靠传递。在实践中,服务网格通常实现为轻量级网络代理,通常与应用程序部署在一起,但是对应用程序透明。
Service Mesh 的部署模型,有两种情况:
- 对于一个简单请求,作为请求发起者的客户端应用实例,会首先用简单方式将请求发送到本地的 Service Mesh 实例。这是两个独立进程,它们之间是远程调用。Service Mesh 会完成完整的服务间调用流程,如服务发现负载均衡,最后将请求发送给目标服务。这就是 Sidecar,它在原有的客户端和服务端之间加多了一个代理。
- 多个服务调用的情况,Service Mesh 出现在所有的服务的下面,这一层被称之为服务间通讯专用基础设施层。Service Mesh 会接管整个网络,把所有的请求在服务之间做转发。在这种情况下,上面的服务不再负责传递请求的具体逻辑,只负责完成业务处理。服务间通讯的环节就从应用里面剥离出来,呈现出一个抽象层。
如果有大量的服务,Sidecar 之间的连接就会形成一个网络,这个就是服务网格名字的由来。
Serverless 这个概念虽然提出来已经有几年了,但是尤其在国内,Serverless、FaaS 这些技术的发展还是相对比较滞后。
“我们将以 Service Mesh 为跳板再往前走。”鲁直表示,“Serverless 更多的还是应该聚焦在其字面本身,其含义就是‘无服务器’,后面的技术都是为了让无服务器承载具体的业务。”
而目前 AWS 在 Serverless 和 FaaS 方面处于比较前沿的位置,据我所知,国内的云服务商在积极推进这方面,但是用户普及程度似乎不是特别高。
鲁直指出,“我觉得 Serverless 想要成功,还是要从覆盖业务的整个广度上打开,否则可能还是停留在 FaaS 上,那场景就比较受限。”
Service Mesh 将是微服务的下一个时代,关于它还在持续进行理论研究和实践探索。
鲁直说:“坦白来讲,我觉得 istio 的理念非常好,但是在整个工程设计上,如果放到蚂蚁金服这样体量较大的环境里面,可能跑起来还需要做一些工作。我们希望今年 Service Mesh 在蚂蚁金服有了更大规模落地之后,可以把我们在 ServiceMesh 方面的一些实践经验用到产品环境的工程中去实践,然后贡献出去。目前更多的一些工作,是将整个体系上进一步完善,铺到更多业务上,然后将这些经验反哺到整个 Service Mesh 的设计上,让它走的更远。”
也就是说,蚂蚁金服在 Service Mesh 上跟 istio 的技术路线是一致的,但是会从工程的角度更多地推动它的发展。
鲁直:“我们希望能够在我们进行了生产验证之后,再慎重地推送给开源社区。这也是蚂蚁做开源贡献的一贯理念——我们希望一个东西经过了内部一段时间的成熟之后,再去开源。经过了大规模的内部验证之后,它的稳定性上有了一定的保障,就贡献给外部社区使用,再去拓展更多一些使用场景,包括完善和解决一些之前没有遇到一些问题。”
合力 Seata 分布式事务框架
2007 开始,蚂蚁金服自主研发了分布式事务中间件 XTS,在内部广泛应用并解决金融核心场景下的跨数据库、跨服务数据一致性问题,最终以 DTX 的云产品化展现并对外开放。
而与此同时,阿里巴巴中间件团队发布 TXC,为集团内应用提供分布式事务服务,经过多年的技术沉淀,于 2016 年产品化改造为 GTS,通过阿里云解决方案在众多外部客户中落地实施。
2019 年 1 月,基于技术积累,阿里巴巴中间件团队发起了开源项目 Fescar,蚂蚁金服也开源了自己的分布式事务框架,并与 Fescar 合并一起共建分布式事务解决方案。这个发展既在情理之中,也在意料之外,我确实好奇这期间发生了什么,是如何和 SOFA 中间件团队的发展结合的,他们下一步会有什么计划?
鲁直说:“分布式事务是蚂蚁金服在 2007 年做的创新,是基于 TCC 原理,我们在内部实现了这个模式。TCC 理论相对还是比较简单的,但是它要落地,需要花费比较长的工程实现上的打磨才行。分布式事务这个技术在蚂蚁金服已经走过了 12 年的时间了。在蚂蚁金服最核心一些业务上,包括支付、交易、账务等等系统都在使用这套分布式事务框架解决和孵化的。”
在分布式事务这一块领域上,在业界来看目前相对来说比较空白,还没有非常好的分布式事务框架。说起来合并的初衷,鲁直表示,“既然阿里巴巴和蚂蚁金服都在这个方向做了一些开源的工作,所以我们把这两个部分的努力结合起来,取长补短,以适用于更多的分布式事务业务场景,蚂蚁金服加入 Seata 社区共建,在 Seata 0.4.0 版本中加入了 TCC 模式,为大家提供一个更加宽泛的分布式事务的解决方案。”
具体来说,“阿里巴巴的 Seata 提供是 AT 模式,对业务来说,不用有太多感知,但是它覆盖的场景有限,如果可以接受这样的情况,用 AT 模式更好。而蚂蚁金服因为有更强的金融方面的要求,就需要采用 TCC 模式,业务接入成本更高,但是它能做到非常好的分布式执行。未来还会提供像 XA 这样的模式,去适应更宽泛业务场景,这在这一块上,蚂蚁金服和阿里巴巴会结合在一起提供一个融合的框架。”
Seata 为解决微服务架构下的分布式事务问题交出了一份与众不同的答卷。而 Seata 的愿景是让分布式事务的使用像本地事务的使用一样简单和高效,希望可以让 Seata 适用于所有的分布式事务场景。
如何做开源
作为开源核心模式的项目,我希望了解蚂蚁金服中间件的开源一般会做哪些工作,是否有比较完善的流程和规则?
“首先,最基础的肯定是代码,并提供对应的示例,然后我们会提供贡献者指南这样的指引文档,因为本质上我们希望打造成一个开源社区,社区的参与度对我们来说是非常重要的东西,有人会上来提 issue,也有人来解答,有人提功能需求,有人提 PR 等等”,鲁直说。
Linux 中国曾经开发过一个用于测算开源项目活跃度的一个模型,我们认为从过去感性地看一个开源项目是不是活跃,已经开始逐渐进步到通过理性数据评估了,但是这需要排除一些数据作弊的情况,就像之前很多人会用项目的星标数来评估项目的活跃度,这当然很粗糙。我们今年还会继续配合 2019 年度的开源年报,而提供数据支持,到时候我们肯定会给 SOFA 相关的项目做一个考察。希望可以切实地反映出来 SOFA 在开源方面的工作。
从之前的脉络上看,到了 SOFA5,还会继续沿袭开放核心的模式,即:核心部分开源,与本地业务强关联,但是跟核心不是强关联的部分不开源。
而对于开源核心模式,有人唱衰,也有人说好,各种观点都有。但从蚂蚁金服自身的实践来看,他们已经切实地践行了开源核心模式,这是我在国内第一个深入了解过的真实落地的开源核心模式项目。
说到开源模式,鲁直表示:“做开源,我觉得首先肯定要做一个心理准备,就是说你要有一个核心部分,再在这个基础上做扩展,在维护的成本上肯定有一定的上升,但是你要接受这样的成本——我觉得这种成本是可以接受的。……项目本身要设计好,具备一定分拆的可能性。如果不具备分拆可能性,那没法做了。像微内核这样的设计方式就会比较适合——就是开源一个核心模块,然后再去扩展,各种模块是可插拔的。”
而对于开源工作是如何做的,鲁直说:“我们没有专门做开源的人,也没有专门做内部代码的人,我们是把这两部分放在一起,既做开源又做内部代码,因为这样一个好处是,既熟悉外部的代码,又熟悉内部的代码,这个边界自己可以把握比较好。我们更多是制定一些规则。比如说跟业务层强相关的部分,你开源出去也没人用;如果说跟业务不相关的,你为什么不开源?因为你开源的这个产品想要做得更好,这些能力开源出去其实没有太大问题,所以一般我们的标准就是看是不是跟内部系统相关,是不是跟业务强相关,如果不相关就可以开源。”
谈话中,鲁直反问的“你为什么不开源?”这句话让我印象深刻,这其实代表了他们开源的初心,但是从商业者从公司的角度来说,开源有没有给公司带来真正的好处?这不仅仅是情怀的问题,我相信每一个热爱开源的人,其实存在开源情怀或者是更理想化的想法,但是从另一方面来说,无论是从公司的机制上,还是公司的业绩上,开源还是要有实实在在的收益,能够推动公司业务发展才行。作为一个开源项目的负责人,他是怎么感受到开源的好处呢?
对这个问题,显然他有过成熟的思考:“第一,最直接的好处就是更长效。从眼前看,你的名声出去了招聘是不是也容易找到更合适的人?这是最短期的收益。长期的好处,开源社区里面大家分享了非常多的观点,从实践来看,也是这样。比如说你在一家公司里面去做的话,公司的业务场景是有限的,虽然说蚂蚁金服覆盖了各种各样的业务,金融方面的基本上全覆盖了。但是其他的行业不一定都有,他们遇到这个问题,我们可能并不会遇到,但这些问题可能是未来能够遇到的,如果把一个项目以开源的方式运作,就意味着说,更大的用例场景更容易发现 bug,用的人越多,越有可能会触发这个 bug,那对于就是有了进一步完善的可能。
另外,有了这样的一个社区化的发展,有更多人参与进来之后,这个项目可以更快往前发展,而不是只有你自己在。在一家公司里边,团队的人员数量肯定是有限的,而有这么多人来参与,那对于这个项目的往前演进来说有非常大的好处,反过来对公司也会带来更多好处——无论是潜在的还是直接的。
最后,如果你的产品有商业化的支持,比如说其他系统的支撑,也能够更好提供商业化的支持。”
SOFA 开源以来,就我目前了解到的情况,大概已经有 30 家左右的企业用户在使用这套开源框架——就是直接拿开源的部分去用了。当然这主要是国内的用户,那么在国外影响力没有像国内这么大的原因在哪儿呢?是因为我们的项目不够国际化呢,还是知道这个框架的人不够多呢?
鲁直说:“我觉得可能是两方面的原因。一方面,我们的确在国际化方面做的并不是很多,在今年我们会去尝试做更多的国际化工作。另外一方面,更多的是文化方面的差异,大家的思维方式可能不太一样。当然我们会尝试走一下国际化的路线,因为开源本来就是不分国界的。”
进一步的 SOFA 在社区治理这方面,“我们希望能够采用和参考 Apache 基金会的方式,这是一个很完善的治理模式,我们会尝试采用这样的方式去社区治理。这对于国际化产品是有很多好处的,它更多强调的是一种治理模式,是不是以社区的方式在运作,是不是在尊重整个社区等等。”鲁直表示,“我们会考虑跟 Apache 基金会、CNCF 进行直接接触,如果合适的话,我们会捐献项目给基金会。如果只是一家商业公司而没有基金会的支持,大家也会有更多的顾虑。把项目捐献给基金会,给大家更多的信心,通过基金会的托管,让更多一些参与方参与,而不只是有蚂蚁金服,大家也会有更大的信心参与进来。”
最后,鲁直希望致语开源社区,“其实蚂蚁金服开源的东西,也不只是 SOFA 中间件框架,未来会开源更多的东西,包括 AI 方面的一些技术,也希望整个社区能够多关注蚂蚁金服在开源上面未来的举措。”