「當我看到那個 issue 後,就有種強烈的想要參與到社區的衝動。看了社區的新手指南後,我像重新手村出來的勇者,準備打怪。」 —— Apache APISIX committer 屠正鬆
歷時 282 天,屠正鬆(GitHub ID:tzssangglass)從開源社區的小白成長爲了 Apache APISIX 的 committer。git
屠正鬆因深度參與 Apache APISIX 的開發,在社區中貢獻不少,2021 年 7 月 22 日被推選爲 Apache APISIX committer。程序員
在一個平淡的下午,咱們和正鬆連線聊了聊。由於疫情關係,居住在南京的他已經多日未外出。在沒有和他聊天以前,我沒有想到,鬍子拉碴的他,居然走過了這麼曲折的路。github
「我大學的時候學的是通訊工程,天天最開心的事就是踢球。如今有時候會想,若是能帶着如今的記憶回到大學時光就行了。」
正鬆在大學期間裏面其實沒怎麼接觸過編程,他當年其實有 C 語言的編程課,可是由於忙着踢球,掛科了。但是,他掛科以後的補考也沒過,致使重修。最尷尬的是,他重修也沒過,後來怎麼辦呢?畢業以前還有畢業清考。這可不能再掛了,因而正鬆就去圖書館去借了一本 C 語言的書來看。apache
「我當時心想,C 語言真的這麼難嗎?」正鬆說。編程
而後他就一直看一直看,看着看着就忽然發現編程好像有那麼點意思,他看懂了!最後他在畢業前順利經過了考試。在畢業以後,找到了一份作程序員的工做。segmentfault
「我原本都準備畢業回家找個廠上班了」,他半開玩笑地說。後端
彼時,他可能不會想到現在的他會成爲數個知名開源項目的 developer,參與一些支撐着千萬級併發流量的基礎設施的開發。api
「在工業界,真實的業務場景和學校裏學的很不同的。」
正鬆的第一份工做就任於一家作穿戴設備的創業公司,從事智能手環的研發工做。正鬆和他的前同事們須要經過處理從智能手環上的獲取的各類傳感器數據,來完成對用戶的心率、運動量、血壓等的監測。安全
「工做蠻好玩的,由於在工業界,真實的業務場景和學校裏學的很不同的,不少東西都得從頭開始學」,正鬆說。併發
有一天下班以後,這家公司的老闆娘忽然發了一條信息,說公司的員工暫時休假,何時上班等通知。
正鬆當時就以爲不對勁,怎麼好好的上着班,忽然就休假了?而後他立馬打開招聘軟件,開始找新的工做。後來才知道,公司的老闆跟供應商有合同糾紛,公司短暫停擺了。
而後,正鬆便到另一家公司從過後端業務開發的工做,學習業界規範、進一步增進技術。過了快一年,由於正鬆比較喜歡 Nginx、OpenResty、Netty 這類簡潔和高性能的技術,他進入一家大公司的開發團隊,從事中間件相關開發工做。
「在這家大公司,我作的離業務稍微遠那麼一點點,更偏向技術一些。「正鬆說。
正鬆接觸 Apache APISIX 的時間是 2020 年 9 月份,那時候,他所在的團隊使用的是 Kong,可是當時 Kong 沒法徹底知足他們的需求,因而他們便從新作網關的技術選型,試圖尋找更好的方案。正鬆擔任本次技術選型的負責人,因而他關注到了 Apache 基金會的頂級項目 Apache APISIX,進而接觸了 Apache APISIX 的社區。
彼時的他,已經畢業三年多了。
"我能夠給 Apache 基金會的頂級項目提交代碼了!做爲一個技術工做者,這是一種技術上的自信。"
正鬆在開源社區的第一個 PR 是一個 enhancement(功能加強)類型的 PR,這個 PR 讓 Apache APISIX 支持了多端口監聽。
這個功能是正鬆公司須要的,在 issue 區也早有人提到,可是不知爲什麼一直無人認領。以前,正鬆正好對這方面的知識有所瞭解,因而他想:」我能夠給 Apache APISIX 提個 PR 來 fix 這個問題。「因此他在 issue 裏主動要求把這個問題指派給他。
他說:「當時我有一種強烈的參與社區的衝動,而後我看了一下 Apache APISIX 社區的新手指南,而後就像拿着武器重新手村出來同樣,興致沖沖的準備參與。」
選擇了這個 issue 以後,正鬆開始在 GitHub 上面開始跟社區的夥伴討論細節上的問題,像是配置端口的 style、實現的思路等。在討論完以後,他開始動手實現。天天晚上下班以後去翻看 Apache APISIX 的代碼,測試相關用例。在經歷了三四個晚上的奮鬥後,測試第一次跑通了!
當時正鬆心裏很是的興奮,立刻按照那個新手指南的引導把 PR 提上去了。而後接受 Code Review 的意見,進一步修改代碼。終於,在 10 月 18 號,PR 順利地 merge 進了倉庫。
「當時我很是的激動,感受本身終於實質性地參與到開源社區裏面去了。我能夠給 Apache 基金會的頂級項目提交代碼了!做爲一個技術工做者,這是一種技術上的自信。」
這是正鬆在開源世界的第一個 PR。
"由於 etcd 有 MaxCallRecvMsgSize 的限制, 就從 etcd 的源頭去解決, 這是最優雅, 也是最適合的。"
當咱們問到,正鬆在社區印象最深入的事情是什麼的時候,正鬆想了想說,多是一個和 bug 有關的問題:etcd 的 MaxCallRecvMsgSize 限制。
正鬆曾經被 etcd 限制返回體大小的問題折磨過,社區內也屢次反映、討論過這個問題,但在 Apache APISIX 上不管怎麼處理都不是很優雅。
直到今年 4 月份,支流科技的一位小夥伴給 etcd 提交了 PR,最終解決了這個問題。正鬆據說這個消息時,感到很是的震撼,當時他沒有想過這個事情會以這樣的方式去解決。可是如今來看的話,這個方法確實是最適合的。
「由於 etcd 有 MaxCallRecvMsgSize 的限制,就從 etcd 的源頭去解決,這是最優雅,也是最適合的。這是很棒的跨社區合做的示例」,正鬆說。
「你們分工合做不一樣,可是都是在爲開源作貢獻。」
正鬆說,他剛開始參與社區的時候,把當時能看到的 APISIX 文檔大部分都過了一遍。因此當時在所在公司工做的時候,同事問他問題,他雖然並非很清楚,可是他清楚項目的文檔分佈狀況,直接把文檔找出來看一下,就大概知道是什麼問題了。他認爲看文檔是熟悉項目的一個合適的方式。
Apache APISIX 的項目官網上,有完善的包括如何提 PR 的新手指南。若是想參與社區的話,能夠先把官網和 Github 上的主要的文檔都看一下,對項目有基本的瞭解,也清楚項目的文檔分佈狀況,後面再按需索引文檔。
若是想在代碼方面作貢獻,或者參與設計的話,一些 Ngnix 或者 OpenResty 方面的知識的儲備是必要的。包括看他們官方的文檔及和代碼,學習他們對於相關 feature 的實現等。
正鬆說:「我以爲這一步是沒法跳過的。」
固然,你能夠以使用者的身份,去參與到社區裏。好比說你以爲文檔有問題,或者說你按照文檔去實踐的時候,發現並非那樣,你也能夠去提一些 issue 指出這些問題。
你們分工合做不一樣,可是都是在爲開源作貢獻。
「但這樣作更好」
正鬆說,你們都在開源社區,首先要注意的就是要遵照社區的一些規矩,和社區的小夥伴平等交流。
交流時要注意的點能夠分紅兩種。
第一種是,假如你遇到了一些問題,那你應該儘可能準確地描述問題,提供可復現的用例。這個實際上是最受歡迎的,或者說最能提升溝通效率的一個方式。若是你能把一個問題描述的很清晰,那你們回答問題的效率天然會很是高。
第二種是,若是是提出想法,解決問題等,在動手作以前,對於有歧義的點,須要在公開的場合,好比 issue ,郵件列表等上面討論,在社區內達成一致,取得共識以後,再開始作。
「共識也會更新,它是社區推進項目前進的一種力量。」
正鬆理解的 Apache Way,是社區大於代碼。
他認爲,社區本質上是人與人之間的合做,你們分工合做,各司其職。可是在合做和各司其職以前,你們是須要造成一些共識。
共識是一點點積累起來的。社區參與者們拋出一個個問題,社區內會討論,辯駁,驗證,直至最後解決這些問題。在這個過程當中,共識在社區內慢慢造成,共識多是規範,也多是邊界,或者其餘的形式。共識也會更新,它是社區推進項目前進的一種力量。這個過程帶有一些理想主義色彩。
社區的共識其實比你作代碼貢獻更重要,由於有了共識以後,後面去回溯某一個改動的點的時候,會更加清晰,知道這個改動的起源和當時的視角。
最後在關麥以前,咱們請正鬆給咱們推薦一些東西。正鬆想了想,說:「我推薦了一部德國電影,跟社會工程學相關的《我是誰:沒有絕對安全的系統》,和一本書,孔飛力老師的《叫魂:1768年中國妖術大恐慌》。但願你們在忙碌的工做中,也不要忘了充實本身的精神生活。「
這就是此次的採訪啦!下回,咱們會採訪哪位社區的小夥伴呢?快來 Apache APISIX 社區瞧一瞧吧!沒準,下一位 committer 就是你!
Apache APISIX 是一個動態、實時、高性能的開源 API 網關,提供負載均衡、動態上游、灰度發佈、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。Apache APISIX 能夠幫忙企業快速、安全的處理 API 和微服務流量,包括網關、Kubernetes Ingress 和服務網格等。
全球已有數百家企業使用 Apache APISIX 處理關鍵業務流量,涵蓋金融、互聯網、製造、零售、運營商等等,好比美國航空航天局(NASA)、歐盟的數字工廠、中國航信、中國移動、騰訊、華爲、微博、網易、貝殼找房、360、泰康、奈雪的茶等。
200 餘位貢獻者,一同締造了 Apache APISIX 這個世界上最活躍的開源網關項目。聰明的開發者們!快來加入這個活躍而多樣化的社區,一塊兒來給這個世界帶來更多美好的東西吧!