网易数帆小助手

个人签名

280篇博客

破浪人丨国内首位 Envoy Maintainer!王佰平独家讲述四年开源之路

网易数帆小助手2022-04-21 09:30

说在前面


在扬帆破浪的2022年里,有一批可爱的数帆同事在工作中、工作外凭热爱发光发热。

一个个小故事背后,呈现出他们在数字化技术与应用实践中,步履不停的探索和开拓进取的力量。

今天是「破浪人」栏目第2期。


受邀成为Envoy 社区国内首位且唯一的 Maintainer,网易数帆资深架构师王佰平讲述个人四年开源贡献的心得体会。


Envoy Maintainer  是 Envoy 项目多个技术领域的 owner,负责这些领域的发展方向、质量保障等,是项目的核心人物,需要具备高度的责任心和足够的技术敏感度。


嘉宾简介: 王佰平,网易数帆云原生专家、资深架构师,CNCF Envoy Maintainer,Hango/Slime Maintainer ,轻舟 API 网关与轻舟服务网格数据面负责人,通晓网关、负载均衡、服务网格等分布式技术原理,熟悉 Envoy 和 Istio,对于 API 网关、服务网格落地具有丰富的经验。



王佰平获评截图


数字化浪潮下,云原生底层核心技术趋于成熟。根据中国信通院《云计算白皮书(2021年)》,2020年国内微服务架构采用率超过50%,服务注册发现与服务代理技术已进入成熟期,而作为新一代微服务架构的服务网格(Service Mesh),也即将从技术爆发期进入整合期。


网易数帆是国内云原生应用的先行者,率先实现了经典微服务框架与服务网格的整合、服务网格与 API 网关的整合,更实现了云原生架构与金融、制造等传统行业需求的整合,这些整合也获得了中国信通院以及银行、证券行业头部客户的认可。在这结果的背后,是云原生社区技术和生态不断成熟,更是网易数帆云原生团队坚持参与开源社区贡献。


本文所说的 Envoy,是云原生计算基金会(CNCF)第三个毕业项目,也是网易数帆轻舟服务网格及 API 网关的数据面选型,和重点贡献项目之一。目前轻舟团队已累计向 Envoy 社区贡献 60+ PR,超过 14000+ 新增代码,覆盖了 Envoy 的有状态会话保持、Tracing 能力增强、Lua script 的支持和 Dubbo 治理能力增强等核心功能。


Envoy(github.com/envoyproxy/envoy )是由 Lyft 开源的高性能数据和服务代理,以可观测性和高扩展性著称,可通过 L3/L4/L7 插件机制在各个层级实现功能扩展,从而为业务构建灵活易扩展、稳定高性能的服务网格、API 网关等基础设施。




近日,Envoy 社区邀请网易数帆云原生专家、资深架构师王佰平成为社区 Maintainer——这是国内首位且唯一的 Envoy Maintainer,同时也是 Dubbo Extension Senior Maintainer,表明了社区对网易数帆持续贡献的认可。在本文中,小编邀请王佰平分享了他从参与开源到成长为知名项目 Maintainer 的经验心得。



演讲者为王佰平

初识 Envoy:贡献始于 bugfix


2019 年,网易对服务网格技术应用的探索到了一个新阶段,网易数帆与网易严选基于 Istio 共建的第二代服务网格平台逐步成型,王佰平在这个时候加入网易数帆,从事和数据面 Envoy 相关的工作。秉承网易数帆坚持开源开放的技术路线,王佰平从那个时候起关注 Envoy 社区的一些动态。



此后,在轻舟微服务平台采用 Envoy 落地 API 网关、服务网格的过程中,王佰平偶然间发现了 Envoy 的一些小 bug ,就尝试把这些 bug 的修复贡献给 Envoy 开源社区,意料之中地被社区立即接受,这成为他 Envoy 开源贡献的良好开端。


高频贡献:缩减内部分支维护成本


随着网易数帆云原生实践的不断深入,轻舟微服务团队对 Envoy 的侵入性修改越来越多,维护内部单独的 Envoy 分支的成本也逐渐增加。为了避免后续和社区的分歧越来越大,也为了更好的借助社区的力量往后演进,团队开始投入较多的精力到开源社区当中,将内部的一些增强抽象化、通用化之后,贡献到开源社区。


整个过程下来,一方面,轻舟微服务团队的技术积累和对 Envoy 的理解程度提升了很多。因为社区有来自全球不同地区、风格习惯各异的贡献者,为了保证工程的长期健康,除了功能的完善,各种编码的约束和规范也细致得多,所以贡献给 Envoy 社区的代码,编写要更为小心谨慎,要求非常高,当然在此过程中也会获得很多社区大佬的帮助。另一方面,Envoy 社区也获得了更多有生力量的支撑,轻舟团队的贡献使得 Envoy 项目的优势得以充分发挥,也更适合国内大量 Dubbo 用户的需求。


“这是一个 win-win 的过程。”王佰平说。


成为 Maintainer:团队支持最关键


2021年,在网易集团的引导和鼓励下,网易数帆自主开源工作迎来了一个小高潮:一方面,在云原生领域一口气开源了4个项目,包括基于 Istio 和 Envoy 的服务网格管理器 Slime(github.com/slime-io/slime )和云原生 API 网关 Hango(github.com/hango-io/hango-gateway );另一方面,作为 Spark 生态的 Kyuubi 项目被纳入 Apache 基金会孵化器,Spark 和 Kyuubi 的负责人燕青成为 Apache Spark Committer,并入选 Databricks 灯塔。这些成果获得了管理层的肯定。



在这背景下,王佰平也立下了一个小小的 flag——希望能在 2022 年成为 Envoy 社区 Maintainer。一方面,他向社区说明了自身成为 Maintainer 意愿。另一方面,除了创建 PR 向社区贡献之外,他开始在自己较为熟悉的领域做一些 PR review,帮助其他的贡献者完成他们的 PR。“开源社区其实很纯粹简单的。”他说。


付出终有收获,王佰平提前 8 个月达成了目标。谈到自己的感受,他这样说:


在成为 Maintainer 之前,我曾想过如果能成为 Maintainer,一定能给我乐疯了。实际上,高兴确实是高兴的,可是也没有那么激动,只是一种自己付出得到承认的舒心感。


对于 Envoy Maintainer 的角色,他表示,之前之后所做的事情其实差别并不大,包括日常的社区的相关 PR 的一些 review,问题解答,引导新人,做一些新的贡献。当然,责任是更重了一些。因为之前做 PR review、做贡献其实都是非强制的,而成为 Maintainer 之后,就有了相关的义务。


回顾之所以能成为 Envoy Maintainer,王佰平给出了三个关键因素:

第一个,是团队的支持。团队给予的角色定位让他有更多的机会去深入的研究 Envoy,也给了他充分的自由去投入到开源社区。这也是最关键的因素。

第二个,是持之以恒。做开源贡献是很需要耐心的。有时候,因为 reviewer 很忙,可能一个 PR 要挂在那里十几天,要适应这种节奏。

第三个,是 Envoy 社区提供了巨大的帮助,有很多大佬仔细地帮忙 review 方案和 PR,给出修改建议。


谈到为什么国内的 Envoy Maintainer 如此稀少,而 Istio 社区有更多的关注度和国内 Maintainer,王佰平认为这是一件很正常的事情。他解释说,虽然服务网格很火,但是目前多数团队对于数据面 Envoy 还是停留在“使用”的阶段——Envoy 设计复杂,且采用 C++ 编写,性能更有保证,但在人均 Golang 的云原生社区颇显另类,较难驾驭,而借助 Service Mesh 或者说 Istio(国内 Mesh 基本就等价于 Istio 了)的封装,大家不用太关注 Envoy 的细节。这其实也是 Istio 存在的很重要的意义。


不过,他也希望后面会有越来越多的国人能够参与到 Envoy 社区当中。根据网易数帆的经验,Envoy 在更多业务的深度实践,必然对技术团队的 Envoy 关键基础组件掌握能力提出更高要求,如此才能保证团队对项目的理解和有效控制,保持云原生落地过程中微服务平台对业务需求的强力支撑。比如在一些金融领域场景中,就会存在私有协议代理或者复杂协议转换等需求,团队如果对数据面没有足够的把控,就很难覆盖此类需求。而参与开源社区显然是学习和掌握 Envoy 最快的方法。


开源心得:不要羞涩,多 ping 几次就好


对于参与开源社区贡献,王佰平总结了三个普遍的原则。

一是要保持谦虚。因为技术领域真的是人外有人,天外有天。而谦虚真诚的态度更容易获得他人的帮助。

二是要持续学习。在一个大开源社区当中,由于模块众多,领域划分很细,所以一个人很难一开始就能 cover 所有问题。这就需要参与者保持持续学习的精神,取长补短,逐步成长。

三是要遵守规则。任何开源社区都有一些基本的规范,作为社区的后来参与者,应该尊重社区前人构筑的规范。

这些原则可以在参与社区的过程中慢慢体悟。王佰平认为,最重要的其实还是第一步,就是主动去参与。


提出 issue 和建议也好,辅助代码 review 也好,做最简单的一些贡献也好,千里之行,迈出第一步是最重要的。


以 Envoy 而言,社区对新人还是非常友好的,大家会非常热情地提供新人需要的帮助。当然,考虑到很多社区成员不是全职做开源,Envoy 是国外团队发起的项目,交流时间不同步是正常的,所以可能有一些延迟响应的情况。“不要羞涩,多 ping 几次就好了。”王佰平说。


那么,非全职参与开源的情况下,商业化客户项目工作繁重,如何能做出想要的成绩?对此,王佰平的答案仍然是要迈出第一步并坚持。他表示,首先,作为商业化团队,保障客户项目任务始终是第一位的。其次,假设项目任务当中,可以汲取出对于开源有价值的一些点,那是最好的。再者,相比于突击式开源,细水长流,持之以恒,可能更有价值。最后,万事开头难,虽然中间也难,结尾也难,但是开头尤其难,先走出第一步,然后坚持下去,加上适当的宣传,会有一个好结果的。


谈到团队自身开源的项目,王佰平表示,希望 Slime 能够成为服务网格落地的必不可少的标配组件,希望 Hango 可以成为开源云原生网关领域的领头羊。当然,目前这些项目在开源领域还是新人,还需要沉淀和积累更多的东西,也需要更多的来自用户和社区本身的意见。


他也意识到, Envoy 这样的项目很可能是不可复制的。


对于我个人来说,我们的开源项目只要能够为一部分用户或者社区成员带来价值,同时能够给团队带来正向反馈,那就算是成功了,路可以慢慢走嘛。


权威机构和头部客户的认可,以及 Envoy 社区的承认,让团队相信,自己是走在正确的道路上的。



相关链接: