对话鲁直：蚂蚁金服中间件的开源头羊
谈话中，鲁直反问的“你为什么不开源？”这句话让我印象深刻。
蚂蚁金服 穿山甲专访
171.82.133.162
不如做一个闭源千牛Linux客户端有价值。
来自湖北武汉的 Chrome Mobile 57.0|Android 8.1 用户
2019-05-01T07:31:29.000
谈话中，鲁直反问的“你为什么不开源？”这句话让我印象深刻。
![](/data/attachment/album/201904/29/122828t9nn39yrrez93kh3.jpg)


二月初春，在西子湖畔的细雨中，我拜访了蚂蚁金服中间件团队，和 SOFA 技术负责人鲁直做了一次深入交谈，更妙的是，鲁直也是负责 SOFA 开源事务推进的人，而这样一个切实践行开放核心模式的开源项目，也正是我非常感兴趣的。


两个技术人的谈话，自然是朴实而直白的，话题主要围绕着 SOFA 和开源主题展开，希望也能一样引起同是技术人的你的共鸣。


![](/data/attachment/album/201904/29/114834oq8iq804ii4v4xs3.jpg)



> 
> **人物介绍**
> 
> 
> 受访者：鲁直，蚂蚁金服 SOFA 开源负责人。
> 
> 
> 采访者：老王，开源布道人，有 20 年互联网从业经历的技术老兵。
> 
> 
> 


虽然我和鲁直在微信上已经联系很久了，但这还是第一次见面。交谈中，我了解到鲁直是 2009 年加入阿里巴巴工作，已经有十年了。刚开始是在 1688.COM 做业务系统，对中间件技术非常感兴趣，也会经常研究各种中间件的实现和功能。后来在 2013年时，为了更深入地学习研究中间件框架，转到了蚂蚁金服中间件团队，从那个时候开始就一直在做 SOFA。


目前鲁直在 SOFA 的团队主要负责的工作包括几个部分。其中一个主要部分就是 SOFA 开源相关的工作。SOFA 的产品体系非常广，包括已经对外开源的部分、内部整个微服务体系，以及 SOFA 框架等等——而这些开源相关的工作主要是由鲁直负责推动的。


当然，作为技术负责人，鲁直既要带技术团队也要做技术工作。谈及这一点，鲁直说：


“我觉得做技术管理，跟普通的管理不太一样，因为**技术管理最重要的一个点是除了管理之外，还要保持一定的技术判断力和敏锐度**。对一些新技术，包括团队中遇到一些重大的技术问题，你都要有一些方向性的判断。虽然最后不一定是你具体解决的，但是在整个团队的技术攻坚和技术选型上，要一起确立方向。”


我以前也做过十余年的技术管理，我很能够感受这种情况，重大问题技术负责人更要迎难而上。


### SOFA 5 落子 Service Mesh


就我了解的情况，现在 SOFA 已经发展到了 SOFA5 了。在 SOFA4 阶段，主要的任务是将开源体系捋清楚了，然后开始按步骤地开源；到现在发展到了 SOFA5。我想知道从 SOFA4 发展到 SOFA5，是什么让蚂蚁金服中间件团队判断 SOFA4 的阶段性目标已经达成，可以迈进到新的 SOFA5 阶段了呢？


 “从整个业界趋势上来讲，SOFA4 的架构相对来说还是偏传统一些，更多是对我们之前的技术框架的整理和梳理。在这个阶段，SOFA 的代码经过了非常多的优化和重构，才达到了对外开源的要求，从而 SOFA 走上了开源核心的模式，逐步分阶段的将各个部分进行了开源。”鲁直讲到，“但是，从我们对业界的整体判断上来说，未来无疑是云的时代，所以说要考虑怎么让所有的业务系统能够提供云的能力，比如说 Serverless。”


接着这个话题，鲁直讲了他对云计算的理解：“一方面云计算肯定要为整个业务的发展提供更加方便的基础资源，可以不用去关心底层的基础设施。Serverless 字面的意思就是说‘无服务器’——我不用关心服务器怎么来的，不用关心基础设施，只要关心业务代码就可以了。那反过来对于云服务商来说，经过了这一层抽象，其资源利用率会更高，可以有更多的利润空间，这是一个双赢的局面。**对于用户来讲，这种好处是实实在在的，可以更少关注基础设施，只关心代码就可以了。**”



> 
>  “我们希望在 SOFA5 的方向上，在这个新的迭代中，去让业务——包括让未来我们开源出来各种功能、各样服务模式——都更多地去关心自己的业务代码，而不用再过多地关心基础设施。”鲁直说。
> 
> 
> 


在 SOFA5 中，一个重要的方向就是 **Service Mesh 这个方向，这将是 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 之间的连接就会形成一个网络，这个就是服务网格名字的由来。*
> 
> 
> 


“我们将以 Service Mesh 为跳板再往前走。”鲁直表示，“**Serverless 更多的还是应该聚焦在其字面本身，其含义就是‘无服务器’，后面的技术都是为了让无服务器承载具体的业务。**”


Serverless 这个概念虽然提出来已经有几年了，目前 AWS 在 Serverless 和 FaaS 方面处于比较前沿的位置，但是在国内，Serverless、FaaS 这些技术的发展还是相对比较滞后。


鲁直指出，“我觉得 Serverless 想要成功，还是要从覆盖业务的整个广度上打开，否则可能还是停留在 FaaS 上，那场景就比较受限。”



> 
> Service Mesh 将是微服务的下一个时代，关于它还在持续进行理论研究和实践探索。
> 
> 
> 


鲁直说：“坦白来讲，我觉得 istio 的理念非常好，但是在整个工程设计上，如果放到蚂蚁金服这样体量较大的环境里面，可能跑起来还需要做一些工作。我们希望今年 Service Mesh 在蚂蚁金服有了更大规模落地之后，可以把我们在 Service Mesh 方面的一些实践经验用到产品环境的工程中去实践，然后贡献出去。目前更多的一些工作，是将整个体系上进一步完善，铺到更多业务上，然后将这些经验反哺到整个 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 中国曾经开发过一个用于[测算开源项目活跃度的一个模型](/article-10141-1.html)，我们认为从过去感性地看一个开源项目是不是活跃，已经开始逐渐进步到通过理性数据评估了，但是这需要排除一些数据作弊的情况，就像之前很多人会用项目的星标数来评估项目的活跃度，这当然很粗糙。我们今年还会继续配合 2019 年度的开源年报，而提供数据支持，到时候我们肯定会给 SOFA 相关的项目做一个考察。希望可以切实地反映出来 SOFA 在开源方面的工作。


从之前的脉络上看，到了 SOFA5，还会继续沿袭开放核心的模式，即：**核心部分开源，与本地业务强关联，但是跟核心不是强关联的部分不开源。**



> 
> 从蚂蚁金服自身的实践来看，他们已经切实地践行了开源核心模式。
> 
> 
> 


而对于开源核心模式，有人唱衰，也有人说好，各种观点都有。但从蚂蚁金服自身的实践来看，他们已经切实地践行了开源核心模式，这是我在国内第一个深入了解过的真实落地的开源核心模式项目。


说到开源模式，鲁直表示：“做开源，我觉得首先肯定要做一个心理准备，就是说你要有一个核心部分，再在这个基础上做扩展，**在维护的成本上肯定有一定的上升，但是你要接受这样的成本——我觉得这种成本是可以接受的。**……项目本身要设计好，具备一定分拆的可能性。如果不具备分拆可能性，那没法做了。像微内核这样的设计方式就会比较适合——就是开源一个核心模块，然后再去扩展，各种模块是可插拔的。”


而对于开源工作是如何做的，鲁直说：“我们没有专门做开源的人，也没有专门做内部代码的人，我们是把这两部分放在一起，既做开源又做内部代码，因为这样一个好处是，既熟悉外部的代码，又熟悉内部的代码，这个边界自己可以把握比较好。我们更多是制定一些规则。比如说跟业务层强相关的部分，你开源出去也没人用；如果说跟业务不相关的，**你为什么不开源？**因为你开源的这个产品想要做得更好，这些能力开源出去其实没有太大问题，所以一般我们的标准就是看是不是跟内部系统相关，是不是跟业务强相关，如果不相关就可以开源。”



> 
> 谈话中，鲁直反问的“你为什么不开源？”这句话让我印象深刻。
> 
> 
> 


谈话中，鲁直反问的“你为什么不开源？”这句话让我印象深刻，这其实代表了他们开源的初心，但是从商业者从公司的角度来说，开源有没有给公司带来真正的好处？这不仅仅是情怀的问题，我相信每一个热爱开源的人，其实存在开源情怀或者是更理想化的想法，但是从另一方面来说，无论是从公司的机制上，还是公司的业绩上，开源还是要有实实在在的收益，能够推动公司业务发展才行。作为一个开源项目的负责人，他是怎么感受到开源的好处呢？


对这个问题，显然他有过成熟的思考：


“最直接的好处就是更长效。从眼前看，你的名声出去了招聘是不是也容易找到更合适的人？这是最短期的收益。长期的好处，开源社区里面大家分享了非常多的观点，从实践来看，也是这样。比如说你在一家公司里面去做的话，公司的业务场景是有限的，虽然说蚂蚁金服覆盖了各种各样的业务，金融方面的基本上全覆盖了。但是其他的行业不一定都有，他们遇到这个问题，我们可能并不会遇到，但这些问题可能是未来能够遇到的，如果把一个项目以开源的方式运作，就意味着说，更大的用例场景更容易发现 bug，用的人越多，越有可能会触发这个bug，那对于就是有了进一步完善的可能。


另外，有了这样的一个社区化的发展，有更多人参与进来之后，这个项目可以更快往前发展，而不是只有你自己在。在一家公司里边，团队的人员数量肯定是有限的，而有这么多人来参与，那对于这个项目的往前演进来说有非常大的好处，反过来对公司也会带来更多好处——无论是潜在的还是直接的。


最后，如果你的产品有商业化的支持，比如说其他系统的支撑，也能够更好提供商业化的支持。”


SOFA 开源以来，就我目前了解到的情况，大概已经有 30 家左右的企业用户在使用这套开源框架——就是直接拿开源的部分去用了。当然这主要是国内的用户，那么在国外影响力没有像国内这么大的原因在哪儿呢？是因为我们的项目不够国际化呢，还是知道这个框架的人不够多呢？


鲁直说：“我觉得可能是两方面的原因。一方面，我们的确在国际化方面做的并不是很多，在今年我们会去尝试做更多的国际化工作。另外一方面，更多的是文化方面的差异，大家的思维方式可能不太一样。当然我们会尝试走一下国际化的路线，因为开源本来就是不分国界的。”


进一步，SOFA 在社区治理这方面，“**我们希望能够采用和参考 Apache 基金会的方式，这是一个很完善的治理模式，我们会尝试采用这样的方式去社区治理。**这对于国际化产品是有很多好处的，它更多强调的是一种治理模式，是不是以社区的方式在运作，是不是在尊重整个社区等等。”鲁直表示，“我们会考虑跟 Apache 基金会、CNCF 进行直接接触，如果合适的话，我们会捐献项目给基金会。如果只是一家商业公司而没有基金会的支持，大家也会有更多的顾虑。把项目捐献给基金会，给大家更多的信心，通过基金会的托管，让更多一些参与方参与，而不只是有蚂蚁金服，大家也会有更大的信心参与进来。” 


最后，鲁直希望致语开源社区，“其实蚂蚁金服开源的东西，也不只是 SOFA 中间件框架，未来会开源更多的东西，包括 AI 方面的一些技术，也希望整个社区能够多关注蚂蚁金服在开源上面未来的举措。”



> 
> ![](/data/attachment/album/201904/29/123906p1y53ibczq5b3zz5.jpg)
> 
> 
> “穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。
> 
> 
> 取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
> 
> 
> 

