關於 Apache Pulsar 雲原生時代訊息佇列和流融合系統,提供統一的消費模型,支援訊息佇列和流兩種場景,既能為佇列場景提供企業級讀寫服務質量和強一致性保障,又能為流場景提供高吞吐、低延遲;採用儲存計算分離架構,支援大叢集、多租戶、百萬級 Topic、跨地域資料複製、持久化儲存、分層儲存、高可擴充套件性等企業級和金融級功能。
GitHub 地址:http://github.com/apache/pulsar/
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,我總結出以下三方面建議:
- 針對目前社群只有
help wanted
的問題,社群可以建設文件和 issue 分類的機制,進行難度標記,不論是新人還是老手均可根據自身能力進行任務選擇。 - 剛入門的小夥伴可以按照社群操作文件探索相應功能,依次體驗,並在發現問題時立即提出來,如程式碼不能操作、文件寫錯等,大膽嘗試解決,如此能夠更快進入社群。
- 如何讀原始碼?首先注意不要一行一行去讀,因為閱讀速度趕不上程式碼更新的速度。目前 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 專案的不斷髮展與前進。
受訪:賀張儉@華為雲
採訪:雞排@StreamNative,Haiqi@StreamNative
相關閱讀
關注公眾號「ApachePulsar」,獲取更多技術乾貨
加入 Apache Pulsar 中文交流群??
點選 連結 ,為 Pulsar 點贊!