破浪人丨国内首位 Envoy Maintainer!王佰平独家讲述四年开源之路
说在前面
在扬帆破浪的2022年里,有一批可爱的数帆同事在工作中、工作外凭热爱发光发热。
一个个小故事背后,呈现出他们在数字化技术与应用实践中,步履不停的探索和开拓进取的力量。
今天是「破浪人」栏目第2期。
Envoy Maintainer 是 Envoy 项目多个技术领域的 owner,负责这些领域的发展方向、质量保障等,是项目的核心人物,需要具备高度的责任心和足够的技术敏感度。
王佰平获评截图
数字化浪潮下,云原生底层核心技术趋于成熟。根据中国信通院《云计算白皮书(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
高频贡献:缩减内部分支维护成本
成为 Maintainer:团队支持最关键
在这背景下,王佰平也立下了一个小小的 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,构建高性能云原生微服务网关
https://live.infoq.cn/room/1095
Envoy 项目地址:https://github.com/envoyproxy/envoy
Slime 项目地址:https://github.com/slime-io/slime
Hango 项目地址:https://github.com/hango-io/hango-gateway