我的另一種參與 RocketMQ 開源社區的方式

首先先“SHOW”一波我在 RocketMQ 開源社區所獲得的成就:2019年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社區對我的鼓勵,最後用我的一句座右銘與大家共勉:心動不如行動,越努力越幸運,唯有堅持不懈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章