破浪人丨國內首位 Envoy Maintainer!王佰平獨家講述四年開源之路

網易數帆發表於2022-04-27

說在前面

在揚帆破浪的2022年裡,有一批可愛的數帆同事在工作中、工作外憑熱愛發光發熱。

一個個小故事背後,呈現出他們在數字化技術與應用實踐中,步履不停的探索和開拓進取的力量。

今天是「破浪人」欄目第2期。


受邀成為Envoy 社群國內首位且唯一的 Maintainer,網易數帆資深架構師王佰平講述個人四年開源貢獻的心得體會。

Envoy Maintainer 是 Envoy 專案多個技術領域的 owner,負責這些領域的發展方向、質量保障等,是專案的核心人物,需要具備高度的責任心和足夠的技術敏感度。

嘉賓簡介:王佰平,網易數帆雲原生專家、資深架構師,CNCF Envoy Maintainer,Hango/Slime Maintainer ,輕舟 API 閘道器與輕舟服務網格資料面負責人,通曉閘道器、負載均衡、服務網格等分散式技術原理,熟悉 Envoy 和 Istio,對於 API 閘道器、服務網格落地具有豐富的經驗。

王佰平獲評截圖

數字化浪潮下,雲原生底層核心技術趨於成熟。根據中國信通院《雲端計算白皮書(2021年)》,2020年國內微服務架構採用率超過50%,服務註冊發現與服務代理技術已進入成熟期,而作為新一代微服務架構的服務網格(Service Mesh),也即將從技術爆發期進入整合期。

網易數帆是國內雲原生應用的先行者,率先實現了經典微服務框架與服務網格的整合、服務網格與 API 閘道器的整合,更實現了雲原生架構與金融、製造等傳統行業需求的整合,這些整合也獲得了中國信通院以及銀行、證券行業頭部客戶的認可。在這結果的背後,是雲原生社群技術和生態不斷成熟,更是網易數帆雲原生團隊堅持參與開源社群貢獻。

本文所說的 Envoy,是雲原生計算基金會(CNCF)第三個畢業專案,也是網易數帆輕舟服務網格及 API 閘道器的資料面選型,和重點貢獻專案之一。目前輕舟團隊已累計向 Envoy 社群貢獻 60+ PR,超過 14000+ 新增程式碼,覆蓋了 Envoy 的有狀態會話保持、Tracing 能力增強、Lua script 的支援和 Dubbo 治理能力增強等核心功能。

Envoy(github.com/envoyproxy/envoy )是由 Lyft 開源的高效能資料和服務代理,以可觀測性和高擴充套件性著稱,可通過 L3/L4/L7 外掛機制在各個層級實現功能擴充套件,從而為業務構建靈活易擴充套件、穩定高效能的服務網格、API 閘道器等基礎設施。

近日,Envoy 社群邀請網易數帆雲原生專家、資深架構師王佰平成為社群 Maintainer——這是國內首位且唯一的 Envoy Maintainer,同時也是 Dubbo Extension Senior Maintainer,表明了社群對網易數帆持續貢獻的認可。在本文中,小編邀請王佰平分享了他從參與開源到成長為知名專案 Maintainer 的經驗心得。

演講者為王佰平

初識 Envoy:貢獻始於 bugfix

2019 年,網易對服務網格技術應用的探索到了一個新階段,網易數帆與網易嚴選基於 Istio 共建的第二代服務網格平臺逐步成型,王佰平在這個時候加入網易數帆,從事和資料面 Envoy 相關的工作。秉承網易數帆堅持開源開放的技術路線,王佰平從那個時候起關注 Envoy 社群的一些動態。

此後,在輕舟微服務平臺採用 Envoy 落地 API 閘道器、服務網格的過程中,王佰平偶然間發現了 Envoy 的一些小 bug ,就嘗試把這些 bug 的修復貢獻給 Envoy 開源社群,意料之中地被社群立即接受,這成為他 Envoy 開源貢獻的良好開端。

高頻貢獻:縮減內部分支維護成本

隨著網易數帆雲原生實踐的不斷深入,輕舟微服務團隊對 Envoy 的侵入性修改越來越多,維護內部單獨的 Envoy 分支的成本也逐漸增加。為了避免後續和社群的分歧越來越大,也為了更好的藉助社群的力量往後演進,團隊開始投入較多的精力到開源社群當中,將內部的一些增強抽象化、通用化之後,貢獻到開源社群。

整個過程下來,一方面,輕舟微服務團隊的技術積累和對 Envoy 的理解程度提升了很多。因為社群有來自全球不同地區、風格習慣各異的貢獻者,為了保證工程的長期健康,除了功能的完善,各種編碼的約束和規範也細緻得多,所以貢獻給 Envoy 社群的程式碼,編寫要更為小心謹慎,要求非常高,當然在此過程中也會獲得很多社群大佬的幫助。另一方面,Envoy 社群也獲得了更多有生力量的支撐,輕舟團隊的貢獻使得 Envoy 專案的優勢得以充分發揮,也更適合國內大量 Dubbo 使用者的需求。

“這是一個 win-win 的過程。”王佰平說。

成為 Maintainer:團隊支援最關鍵

2021年,在網易集團的引導和鼓勵下,網易數帆自主開源工作迎來了一個小高潮:一方面,在雲原生領域一口氣開源了4個專案,包括基於 Istio 和 Envoy 的服務網格管理器 Slime(github.com/slime-io/slime )和雲原生 API 閘道器 Hango(github.com/hango-io/hango-gateway );另一方面,作為 Spark 生態的 Kyuubi 專案被納入 Apache 基金會孵化器,Spark 和 Kyuubi 的負責人燕青成為 Apache Spark Committer,併入選 Databricks 燈塔。這些成果獲得了管理層的肯定。

在這背景下,王佰平也立下了一個小小的 flag——希望能在 2022 年成為 Envoy 社群 Maintainer。一方面,他向社群說明了自身成為 Maintainer 意願。另一方面,除了建立 PR 向社群貢獻之外,他開始在自己較為熟悉的領域做一些 PR review,幫助其他的貢獻者完成他們的 PR。“開源社群其實很純粹簡單的。”他說。

付出終有收穫,王佰平提前 8 個月達成了目標。談到自己的感受,他這樣說:

在成為 Maintainer 之前,我曾想過如果能成為 Maintainer,一定能給我樂瘋了。實際上,高興確實是高興的,可是也沒有那麼激動,只是一種自己付出得到承認的舒心感。
對於 Envoy Maintainer 的角色,他表示,之前之後所做的事情其實差別並不大,包括日常的社群的相關 PR 的一些 review,問題解答,引導新人,做一些新的貢獻。當然,責任是更重了一些。因為之前做 PR review、做貢獻其實都是非強制的,而成為 Maintainer 之後,就有了相關的義務。

回顧之所以能成為 Envoy Maintainer,王佰平給出了三個關鍵因素:

第一個,是團隊的支援。團隊給予的角色定位讓他有更多的機會去深入的研究 Envoy,也給了他充分的自由去投入到開源社群。這也是最關鍵的因素。

第二個,是持之以恆。做開源貢獻是很需要耐心的。有時候,因為 reviewer 很忙,可能一個 PR 要掛在那裡十幾天,要適應這種節奏。

第三個,是 Envoy 社群提供了巨大的幫助,有很多大佬仔細地幫忙 review 方案和 PR,給出修改建議。

談到為什麼國內的 Envoy Maintainer 如此稀少,而 Istio 社群有更多的關注度和國內 Maintainer,王佰平認為這是一件很正常的事情。他解釋說,雖然服務網格很火,但是目前多數團隊對於資料面 Envoy 還是停留在“使用”的階段——Envoy 設計複雜,且採用 C++ 編寫,效能更有保證,但在人均 Golang 的雲原生社群頗顯另類,較難駕馭,而藉助 Service Mesh 或者說 Istio(國內 Mesh 基本就等價於 Istio 了)的封裝,大家不用太關注 Envoy 的細節。這其實也是 Istio 存在的很重要的意義。

不過,他也希望後面會有越來越多的國人能夠參與到 Envoy 社群當中。根據網易數帆的經驗,Envoy 在更多業務的深度實踐,必然對技術團隊的 Envoy 關鍵基礎元件掌握能力提出更高要求,如此才能保證團隊對專案的理解和有效控制,保持雲原生落地過程中微服務平臺對業務需求的強力支撐。比如在一些金融領域場景中,就會存在私有協議代理或者複雜協議轉換等需求,團隊如果對資料面沒有足夠的把控,就很難覆蓋此類需求。而參與開源社群顯然是學習和掌握 Envoy 最快的方法。

開源心得:不要羞澀,多 ping 幾次就好

對於參與開源社群貢獻,王佰平總結了三個普遍的原則。
一是要保持謙虛。因為技術領域真的是人外有人,天外有天。而謙虛真誠的態度更容易獲得他人的幫助。

二是要持續學習。在一個大開源社群當中,由於模組眾多,領域劃分很細,所以一個人很難一開始就能 cover 所有問題。這就需要參與者保持持續學習的精神,取長補短,逐步成長。
**
三是要遵守規則。**任何開源社群都有一些基本的規範,作為社群的後來參與者,應該尊重社群前人構築的規範。

這些原則可以在參與社群的過程中慢慢體悟。王佰平認為,最重要的其實還是第一步,就是主動去參與。

提出 issue 和建議也好,輔助程式碼 review 也好,做最簡單的一些貢獻也好,千里之行,邁出第一步是最重要的。
以 Envoy 而言,社群對新人還是非常友好的,大家會非常熱情地提供新人需要的幫助。當然,考慮到很多社群成員不是全職做開源,Envoy 是國外團隊發起的專案,交流時間不同步是正常的,所以可能有一些延遲響應的情況。“不要羞澀,多 ping 幾次就好了。”王佰平說。

那麼,非全職參與開源的情況下,商業化客戶專案工作繁重,如何能做出想要的成績?對此,王佰平的答案仍然是要邁出第一步並堅持。他表示,首先,作為商業化團隊,保障客戶專案任務始終是第一位的。其次,假設專案任務當中,可以汲取出對於開源有價值的一些點,那是最好的。再者,相比於突擊式開源,細水長流,持之以恆,可能更有價值。最後,萬事開頭難,雖然中間也難,結尾也難,但是開頭尤其難,先走出第一步,然後堅持下去,加上適當的宣傳,會有一個好結果的。

談到團隊自身開源的專案,王佰平表示,希望 Slime 能夠成為服務網格落地的必不可少的標配元件,希望 Hango 可以成為開源雲原生閘道器領域的領頭羊。當然,目前這些專案在開源領域還是新人,還需要沉澱和積累更多的東西,也需要更多的來自使用者和社群本身的意見。

他也意識到, Envoy 這樣的專案很可能是不可複製的。

對於我個人來說,我們的開源專案只要能夠為一部分使用者或者社群成員帶來價值,同時能夠給團隊帶來正向反饋,那就算是成功了,路可以慢慢走嘛。

權威機構和頭部客戶的認可,以及 Envoy 社群的承認,讓團隊相信,自己是走在正確的道路上的。

相關連結:

網易開源 Envoy 企業級自定義擴充套件框架 Hango Rider 簡介

Envoy 架構及其在網易數帆的落地實踐

網易數帆基於 Envoy 的雲原生閘道器實踐

如何基於開源Envoy,構建高效能雲原生微服務閘道器

Hango 開源解讀:雲原生閘道器實踐,為何要選擇 Envoy ?

雲原生API閘道器 - 開源專案Hango閘道器設計與實踐

網易開源 Slime:讓 Istio 服務網格變得更加高效與智慧

Istio1.5 & Envoy 資料面 WASM 實踐

Envoy 專案地址:https://github.com/envoyproxy...

Slime 專案地址:https://github.com/slime-io/s...

Hango 專案地址:https://github.com/hango-io/h...

相關文章