我的另一种参与 RocketMQ 开源社区的方式
点击上方“中间件兴趣圈”,选择“设为星标”
做积极的人,越努力越幸运!
布道师是什么?开源项目不是都在追求如何成为一名 Committer?其实这个就是参与开源项目的两种不同方式。如何参与一个开源项目,容我慢慢道来。
1、与 RocketMQ 相识、相知到“在一起”
在2017年听到阿里巴巴将 RocketMQ 捐赠给 Apache基金会成为 Apache 的顶级项目,我内心是无比激动,因为终于可以一睹一款高性能的消息中间件的实现原理。
通过阅读 RocketMQ 官方文档,以下几个特别的点吸引了我的注意,让我下定决心深入研究一番。
RocketMQ 为什么性能高效,到底运用了什么“厉害”的技术
RocketMQ 如何实现刷盘(可以类比一下数据库方面的刷盘、redo、undo日志)
RocketMQ 文件存储设计理念、基于文件的 Hash 索引是怎么实现的
定时消息、消息过滤等实现原理
如何进行网络编程(Netty实战)
心动不如行动,下定决心后便开始了我的源码分析 RocketMQ 之旅,大概在4个多月的时间中连续发表了30余篇文章,从 Nameserver、消息发送高可用设计、消息存储、消息消费、消息过滤、事务消息等各个方面对其进行了体系化的剖析,边写边分享,边分享边传播,终于得到了机械工业出版社华章分社的杨福川老师的认可,邀请我出书。
在杨老师和张工的帮助与指点下,经过将近半年的努力,书稿基本完稿。
由于我当时是一位名不经传的新人,按照出版行业的惯例,需要找一些该领域内专家大牛帮忙做序或写写推荐语。
当时我是初生牛犊不怕虎,蹦出了一个非常大胆的想法,是不是可以联系 RocketMQ 官方的一些大佬,最终我直接锁定了 RocketMQ 创始人冯嘉大神,希望他能帮我作序推荐。
令人惊喜的是冯嘉大神非常平易见人,得知我的来意后,他说了这样一句话:“我是非常愿意为写书的朋友作序,但需要评估一下书稿的质量,如果质量OK,非常愿意效劳”。
我备受鼓舞,在和出版社初步沟通后,将试读稿件再加上消息存储整章的内容发给冯嘉大神后,经冯嘉大神认真审稿后,决定帮忙推荐作序,真的让我备受鼓舞。
随着《RocketMQ技术内幕》一书的正式出版上市,并得到广大读者朋友的认可,与官方的联系也越来越多,后面在 RocketMQ 中国社区负责人青峰大佬的筹备下,我还参与了 RocketMQ 官方社区的源码解析直播活动、官方文档审稿等工作,并在社区得到了不错的反响。
说到这里大家是不是觉得非常奇怪,是不是都认为你只是在写文章,写书,没有真正参与开源社区呀,没有贡献代码,这个算哪门子参与开源社区?
其实我一开始连我自己也没有意识到我正在参与一个开源项目,直到我在冯嘉大神为我写的序言中看到他给了我一个新的称号:RocketMQ布道师,从而才真正了解到参与开源的另外一种方式:做一个开源项目的传播者,让更多人更容易的使用它,即降低大众对它的使用门槛。
我后面也特意去查了一下开源项目的布道师是一个什么的角色,或者说什么样的人能被称之为布道师。个人的理解就是首先认可并热爱这项技术,并持续输出高质量的技术类文章、文档等有助于技术传播的素材,让更多人更容易理解并使用它。
有了新的称号,那就得更加努力,朝着优秀努力,在2019年我又陆续发表了20几篇关于RocketMQ相关的文章,这些文章含金量极高,不仅及时跟进了RocketMQ4.3之后的新特性:消息轨迹、ACL、主从切换等机制,更是发表了数篇实战类文章,详细指出在生产环境下一些使用误区,更是输出了几篇生产环境真实故障与解决方案。最终于2019年 RocketMQ 官方社区授予我优秀布道师荣誉称号。
RocketMQ 成就了现在的我,我也会继续努力,为传播RocketMQ尽一份力所能及的力量。2020年,继续努力。
2、如何成为开源项目的 Committer
有一些粉丝在问我,您对 RocketMQ 研究的这么深入,为什么不考虑贡献代码,成为一名 Committer 呢?这是因为参与开源项目需要具备一些基本条件,当下我的实际情况不符合,那成为一个开源项目的 Committer 有些什么条件呢?
扎实的Java基础功底
一个开源项目的底层都会涉及到存储,这就要求具备一定的数据结构基础,JAVA集合框架中的类自然成为了我们突破数据结构最好的老师,其次是java并发,即多线程、并发容器、锁等课题,这方面可以好好学习一下JUC框架。最后最好是具备一些网络方面的知识,例如NIO、Netty。持续输出能力
成为一个开源项目的 contributions 非常容易,提交一个PR并被通过即可,甚至于提交一个文档被接受也同样可以,难的是持续贡献,最终被开源项目的PMC认为对该项目有着突出贡献。
我比较“苦逼”,在带娃方面我的资源只有我和我老婆,父母在老家无法分身,故下班后我没有连续的空闲时间专心投入一项任务中,而开源最需要的是精益求精,不只是需要完成功能,而是要编写结构优良的代码,设计所占据的时间比代码开发时间要多的多,故我个人认为我暂时不方便走代码贡献这条道路。但我零碎时间还是充足的,故现阶段我会好好利用这些零碎时间,继续通过写文章的方式为开源项目贡献自己的一份力量。
接下来我们回到本节的主题,那如何参与一个开源项目呢?
在参与一个开源项目之前,我觉得第一个最基本的步骤还是要打牢基础,这里的基础至少要包括 JAVA集合、JAVA并发(JUC)这两项,这是最最基本的,至少要阅读其源码,理解其设计理念,至于NIO,Netty 这些可以后续在需要使用时再去专门学习,有针对性的学习,结合使用需求,或许学习动力更强劲,学习效率更高效。
当具备一定的基础后,如何从零开始参与进开源项目呢?通常有如下几个方法:
看看官方文档,特别是设计手册,从整体上把握其设计理念。
写写源码分析类文章,从整体上把控这个框架,这个花费时间较多,如果框架正在起步阶段,不建议该方法;如果框架比较成熟,非常建议采用该方法。
尝试看看开源项目中的 issues,看能不能解决,从问题入手,快速融入该项目。
尝试写写单元测试用例,测试驱动开发,借此学习该框架。
后面的事情就是坚持不懈,朝着目标不断前进,中途可以放慢速度,但千万别放弃,因为只有坚持,才能胜利,只要前进,就离目标更近。
参与开源,一个最基本的条件是拥有大量的连续时间,想要成为一个开源框架的 Committer ,唯有坚持不懈,持续投入,持续产出。
布道师与代码贡献者都是参与开源项目的方式,大家可以结合自己的实际情况选择不同的方式,都能为一个开源社区贡献自己的力量,也能得到开源社区的认可,间接打造自身影响力,最终助力职场。
最后再次感谢RocketMQ社区对我的鼓励,最后用我的一句座右铭与大家共勉:心动不如行动,越努力越幸运,唯有坚持不懈。
原创不易,如果对你有所帮助请你为本文点个【在看】吧,这将是我写作更多优质文章的最强动力。
欢迎加入我的知识星球,一起交流源码,探讨架构,揭秘亿级订单的架构设计与实践经验,打造高质量的技术交流圈,为广大星友提供高质量问答服务,长按如下二维码加入。