95 后新生代 Committer 贺张俭:谈谈年轻人的开源观

201 阅读9分钟

关于 Apache Pulsar 云原生时代消息队列和流融合系统,提供统一的消费模型,支持消息队列和流两种场景,既能为队列场景提供企业级读写服务质量和强一致性保障,又能为流场景提供高吞吐、低延迟;采用存储计算分离架构,支持大集群、多租户、百万级 Topic、跨地域数据复制、持久化存储、分层存储、高可扩展性等企业级和金融级功能。
GitHub 地址:github.com/apache/puls…

2022 年初,有一位大家都熟悉的年轻社区“老人”,来自华为云的贺张俭(GitHub 地址:@Shoothzj)正式入选 Apache Pulsar Committer。

贺张俭,华为云 IoT 高级工程师,2017 年毕业于西安电子科技大学毕业,毕业后一直在华为云 IoT 部门进行 Java 方面工作,关注云原生、IoT、消息中间件、APM 等方向内容。

值得一提的是,97 年出生的贺张俭是继张勇(2021 年 1 月中旬入选 Pulsar 社区 Committer)后,Pulsar 社区第二位最年轻的 Committer。“95 后” 年轻小将为 Apache Pulsar 开源项目注入了强大且充满活力的血液,新生代的力量不可小觑!

祝贺贺张俭成为 Apache Pulsar 社区 Committer!同时,我们也与贺张俭进行了采访,聊聊他与 Apache Pulsar 的故事。下面跟我们一起看看他的开源之路和精彩故事吧!

第一次系统地参加开源

物联网领域使用的消息系统常常需要满足以下条件:

  • 满足海量 Topic 消息队列支持
  • 支持多租户
  • 部署方式支持容器化云原生

因此我和我的团队逐步接触到 Pulsar 及其社区。我们于 2020 年 4、5 月份开始调研,从每周参加 TGIP-CN(Thanks God It’s Pulsar) 开始,不断熟悉代码。当时,早期的 Pulsar 2.5 版本有很多需要解决的问题,我联系到李鹏辉、陈航等人围绕许多特性问题进行多次讨论,并在 2020 年 11 月提出自己的第一个 PR。2020 - 2021 年期间,我深入使用 Pulsar,陆续提出很多 PR。

谈到我的第一个 PR,当时 Pulsar 2.5 版本没有 GC 日志的配置,但一般来说,做商用软件都需要该配置。因此我提出疑问并得到认可后,就去帮助修复 GC 日志方面问题。我仍记得这第一个 PR 合并后的激动心情 —— 因为我知道,接下来这个功能可能会有几万人去使用,会有几万人看到我的成果,参加开源社区的带来的成就感都是“公开透明”的。

可以说,相较于过去在其他开源项目社区提交零碎 PR 的体验,Pulsar 社区是我第一个投入时间最长、花费精力较多,并且代码质量和单侧驱动优良的规模化社区。

Committer 背后的贡献

我在社区中的主要贡献方向是 Java Client 和 Broker 的可靠性。除此之外,我在 Pulsar Go Client 也贡献了诸多 PR,由于主仓库大多使用 Java 语言,其他语言贡献相对较少,特性尚未拉齐,因此需要补充其他 Client 的特性。

我很关注 DFX(即 Desgin for Failure) 这方面的问题。华为注重软件可靠性和安全性,因此我们在调研 Pulsar 时针对很多不常见场景做了测试,比如多次重启测试,包括强制停机、物理机直接下线等。因此,在社区我也围绕可靠性和安全性相关的特性做了一些贡献。

开源社区 VS 工作环境

“Volunteer” 机制

刚接触社区时,我并不是非常适应 Volunteer 模式的社区环境。不同于在工作中遇到问题找相关负责人即可解决,社区内的成员之间没有很强的利益关系。开源社区内的互帮互助、问题解答都是出于热心和自愿。因此在遇到紧急情况寻求社区的帮助时,需要将问题描述清晰,罗列清楚前因后果,否则可能无法得到及时地解决和反馈。出于此,我养成了在提 issue 或在社区提问时完整描述上下文的习惯,提高沟通的效率。

验证与测试

工作环境和社区给我带来的差异感还在于测试。在大部分工作中,产品设计的流程是产品经理——工程师——测试,而开源社区在提交 PR 的时候并没有完整的功能测试,也没有大规模的集成性测试,只有在版本发布时才会由 PMC 成员与一些社区的开发者、用户进行验证。在这样的协作方式下,反而驱动社区在单元测试方面做的很好:只要在单元测试中发现问题,除非存在复杂度高或单元测试不适用的情况,80% 的问题修复都会由单元测试覆盖。这样的理念与流程对我的理念、我对团队的要求影响很大,我常常在工作中思考集成测试与单元测试兼容并蓄、取长补短的可行性、有效性。我正在努力践行,也鼓励更多小伙伴在修复 bug 上努力实践单元测试

代码编写与审核

工作上与社区中的代码编写规范也是不同的。很多公司都有自己严格的代码编写规范,而在社区没有禁止,且没有明确优势或充分理由的情况下,已有代码会保持原样不动。

同时,工作与社区的代码提交和 review 风格完全不同。工作上大家习惯一次性提交代码进行统一测试。相反,在社区要求 PR 主题清晰,需要拆分代码来提交,代码量少、Git 记录更优雅,拆分后的 PR 更容易被发现其中存在的问题,及时得到反馈建议, 这样提 PR 的方式让我收获良多。

开源:由浅入深

社区里来自海内外的小伙伴都很热情,不吝分享自己的经验和技术见解,让我积累了许多有意义的经验。现在,我能感觉到 Pulsar 项目的 bug 修复工作比两年前更加困难:社区在发展,Pulsar 在升级,主要场景修复越来越完善,很多问题都得到了解决。接下来,如果想通过社区找 bug、修复 bug、完善文档来作为参与社区的开始,则需要投入更多精力学习流程。社区门槛在提高,大家需要多多学习。

关于入门学习 Pulsar,我总结出以下三方面建议:

  1. 针对目前社区只有 help wanted 的问题,社区可以建设文档和 issue 分类的机制,进行难度标记,不论是新人还是老手均可根据自身能力进行任务选择。
  2. 刚入门的小伙伴可以按照社区操作文档探索相应功能,依次体验,并在发现问题时立即提出来,如代码不能操作、文档写错等,大胆尝试解决,如此能够更快进入社区。
  3. 如何读源码?首先注意不要一行一行去读,因为阅读速度赶不上代码更新的速度。目前 Pulsar 有几十万行代码,伴随提交量增加,代码更新很快,同时现在模块划分也不同了,和过去版本有所区别。因此大家应把握模块之间关系,抓住主要链路。如果可以,应进行单步 debug,串行整个流程,然后读自己感兴趣的部分,此时可以深入读代码。

Committer —— 更强的归属感

成为 Committer 后,我的社区归属感和责任感更强了。积极处理 issue、进行微信群答疑等如同使命一般在召唤我,从 Volunteer 到 Contributor,再到 Committer,身份转变也意味着态度上质的提升。

值得一提的是,2021 年我所在团队只有我一个贡献者,而今年,我们团队计划付出更多的人力资源来更好地为社区做贡献,同时我也希望能通过自身影响力引导大家为社区多多做贡献。

致谢

感谢 Pulsar 社区提供这样一个开放、有活力的平台让大家一起贡献代码,共同成长,我从中受益匪浅,深刻感受到贡献带来的自我认同价值。现在社区有 500 多名 Contributor,我相信社区将来会有越来越多贡献者参与进来,开源气氛越来越活跃。同时,感谢团队领导对我和社区合作工作的支持。

采访点评

贺张俭是一个很热爱分享的人,他多次参与Pulsar Summit Asia 2020、ApacheCon Asia 2021、Pulsar Meetup 等行业大会和社区活动,积极分享个人和团队在 Apache Pulsar 方面的实践。在采访中,我们也能从贺张俭侃侃言谈中感受到他对开源、对 Apache Pulsar 这个项目的热爱和投入,感谢他给大家带来他眼中不一样的 Pulsar 开源社区体验和认知。

加入 Apache Pulsar 社区

参与开源,可以获得公司及社区内外的认可,结交来自各个领域、志同道合的小伙伴;同时也可以提高个人影响力,促进个人发展。参与开源不是码农的专属,社区、文档等各个方面都可以让大家发挥一技之长。

作为全球性开源项目,截至目前,Apache Pulsar 已拥有 513 名贡献者、10.5K+ Star 、2.7K+ Fork 。我们为大家提供了参与指南,欢迎越来越多的小伙伴助力 Apache Pulsar 项目的不断发展与前进。

Apache Pulsar 官方贡献指南

受访:贺张俭@华为云
采访:鸡排@StreamNative,Haiqi@StreamNative

相关阅读

关注公众号「ApachePulsar」,获取更多技术干货

加入 Apache Pulsar 中文交流群👇🏻

点击 链接 ,为 Pulsar 点赞!