写在 Dubbo go 的第五年
作者 |?于雨
阿里巴巴云原生公眾號后臺回復(fù)“915”即可查看 dubbogo?v1.5.1?項(xiàng)目管理圖清晰大圖!
引語
dubbogo 項(xiàng)目已進(jìn)入第五個年頭。
項(xiàng)目發(fā)展的前兩年,我們把 hessian2 協(xié)議庫、網(wǎng)絡(luò)庫和整體基礎(chǔ)框架搭建一番。從 2018 年項(xiàng)目被 Dubbo 官方接納開始,依托阿里平臺,社區(qū)開始形成并快速發(fā)展。與社區(qū)同學(xué)們齊心合力之下,如今全面兼容 Dubbo v2.7.x 的 Dubbo-go v1.5.1 已經(jīng)發(fā)布。
立項(xiàng)
一個項(xiàng)目整體必須提煉出核心目標(biāo),指明其存在的意義和價(jià)值。有了初心,項(xiàng)目發(fā)展過程中產(chǎn)生困惑時,才能明確答復(fù) “我是誰?從哪里來?到哪里去”。
1. dubbogo
dubbogo 項(xiàng)目有其自身的 milestone 要求,大致規(guī)劃了每個階段的關(guān)鍵里程碑,在項(xiàng)目發(fā)展初期僅僅是實(shí)現(xiàn) Dubbo 的某個功能,但在發(fā)展過程中會不斷結(jié)合當(dāng)下的技術(shù)發(fā)展潮流,不斷修正其未來發(fā)展方向。
其發(fā)版計(jì)劃是通過“開發(fā)當(dāng)前版本、規(guī)劃新版本、根據(jù)反饋修正新版本”的模式定義當(dāng)前版本的開發(fā)內(nèi)容和下一個版本的發(fā)展方向。每次發(fā)版后會根據(jù)社區(qū)使用反饋對下一代的發(fā)展目標(biāo)進(jìn)行修正。
站在吃瓜人的角度,或許可以說出 “dubbogo 不就是 dubbo 的 Go 語言版本嘛,照著抄就是了” 之類的論調(diào)。而參與過 dubbogo 項(xiàng)目跟著社區(qū)一路走來的人,就知道 dubbogo 并不簡單定位于 Dubbo 項(xiàng)目的 Go 語言版本。
dubbogo 初心不變,不同時間對自身定位均有升級。我認(rèn)為當(dāng)前 dubbogo 的定位是:
- 全面兼容 Dubbo;
- 一個 Go 語言應(yīng)用通信框架,充分利用作為云原生時代第一語言—Go 語言的優(yōu)勢,擴(kuò)展 dubbo 的能力。
2. dubbo-go-proxy
dubbogo 項(xiàng)目初期目的是依靠 Dubbo 實(shí)現(xiàn) “bridge the gap between Java and Go” ,目前 dubbogo 正與 Dubbo 齊頭并進(jìn),已經(jīng)達(dá)到項(xiàng)目立項(xiàng)的目標(biāo)。有長期生命的通信框架,大概有 5 年的成長期和 5 年的穩(wěn)定成熟期。目前的 dubbogo 處在成長期和穩(wěn)定成熟期的過渡期,這意味著社區(qū)如果想保持發(fā)展態(tài)勢,就必須開始走多元化道路,發(fā)展自己的生態(tài)了。
眼下 dubbogo 社區(qū)正在集中精力孵化一個新的項(xiàng)目—實(shí)現(xiàn)一個基于 dubbogo 的 HTTP 網(wǎng)關(guān),項(xiàng)目的意義是:dubbogo 自身是一個流量控制中間件,在其上擴(kuò)展項(xiàng)目,其方向很自然就是做一個 proxy/sidecar or gateway,且社區(qū)一直有網(wǎng)關(guān)這方面的需求。
項(xiàng)目目的如下:
- 做一個具有生產(chǎn)使用意義的網(wǎng)關(guān);
- dubbo-go-proxy 驗(yàn)證 dubbogo 的能力,對 dubbogo 未來的進(jìn)化指出新方向,共同進(jìn)化;
- 優(yōu)化 dubbogo 的穩(wěn)定性和性能。
團(tuán)隊(duì)
項(xiàng)目立項(xiàng)完畢后,就進(jìn)入招兵買馬階段了。
1. 來源
dubbogo 社區(qū)發(fā)展初期,其關(guān)鍵成員都是通過提交 issue 或者 pr 的同學(xué)撩來的。通過這種方式撩來的同學(xué)因?yàn)橹就篮?#xff0c;有極高的概率同社區(qū)一起走下來。dubbogo 社區(qū)的 core member 就是這樣來的。
其次是與其他公司的合作。dubbogo 本身是一個有著極高生產(chǎn)環(huán)境需求的項(xiàng)目,在發(fā)展過程中依次與攜程、涂鴉、斗魚、虎牙、螞蟻金服和阿里集團(tuán)有過極深的合作,其間與攜程的合作對 dubbogo 成型而言極為關(guān)鍵。
另一個途徑是與其他社區(qū)合作。dubbogo 項(xiàng)目發(fā)展過程中,與以下社區(qū)合作過:
- 與 MOSN 社區(qū)合作實(shí)現(xiàn) Dubbo Mesh;
- 與 sentinel 社區(qū)合作,在 Dubbo/Dubbo-go 完整接入 sentinel 的降級和限流方案;
- 與 Apollo 社區(qū)合作,在 Dubbo-go 中實(shí)現(xiàn)遠(yuǎn)程配置下發(fā);
- 與 Nacos 社區(qū)合作,實(shí)現(xiàn)基于 Nacos 的服務(wù)發(fā)現(xiàn)。
與其他社區(qū)合作的好處是使得雙方的項(xiàng)目都受益:擴(kuò)展雙方的能力和使用場景,其次是社區(qū)間人員的流動。在合作過程中,dubbogo 自身受益極大,目前有 4 個社區(qū) committer 來自于其它社區(qū)。合作完成后并不意味著結(jié)束,而是一個新的雙贏的開始:社區(qū)項(xiàng)目也是發(fā)展的,當(dāng)一個項(xiàng)目有新特性時可以同時快速被另一個項(xiàng)目采用驗(yàn)證,對擴(kuò)展開發(fā)者們的技術(shù)能力和人脈也是極為有利的,dubbogo 社區(qū)目前的好幾個同學(xué)同時活躍在多個社區(qū)。
dubbogo 項(xiàng)目已經(jīng)過了草莽階段,形成了一個的 800 多人的社區(qū)群,所以 dubbogo-proxy 項(xiàng)目立項(xiàng)后,很快就在社區(qū)群內(nèi)找到很多項(xiàng)目愛好者。
2. 成員的 qualification
項(xiàng)目發(fā)展初期有很多同學(xué)會 Java 不懂 Dubbo 不會 Go,最后都通過參與項(xiàng)目提升了自我的能力。當(dāng)然有些人會擔(dān)心項(xiàng)目代碼的質(zhì)量,但只要秉持 “Community Over Code” 這個 “Apache Way”,在發(fā)展過程中這些問題都不大。
2019 年時,參與 dubbogo 項(xiàng)目的成員中一部分同學(xué)平時的工作是進(jìn)行業(yè)務(wù)開發(fā),秉承著對中間件通信技術(shù) “我是誰?我從哪里來?要到那里去” 的初心參與 dubbogo 的開發(fā),無論是對 dubbogo 抑或是對其自身技術(shù)水平提升都產(chǎn)生了積極的影響。
dubbogo 社區(qū)對 dubbogo 發(fā)版時間有一定期限要求,所以對參與人員的時間投入也有一定的要求。每個版本的核心功能的 owner,需要保證在 deadline 期限內(nèi)完成開發(fā)任務(wù)。
dubbogo 每個版本都有一個發(fā)版人,負(fù)責(zé)相應(yīng)版本的任務(wù)拆分、發(fā)展跟蹤、代碼 Review 和最后的測試驗(yàn)收,這就要求發(fā)版人自身的技術(shù)水平和時間投入極高。目前 dubbogo 每個大版本的發(fā)版人都不是同一個人,每次 dubbogo 發(fā)版,都意味著每個發(fā)版人的體力和精力的極大付出。于某在此致敬歷屆發(fā)版人!
管理
項(xiàng)目立項(xiàng)后,就需要明確發(fā)展大方向、發(fā)展 milestone、版本規(guī)劃、以及一段時間內(nèi)的具體的開發(fā)規(guī)劃。項(xiàng)目發(fā)展初期,Roadmap 可以不清晰,先摸著石頭過河,在發(fā)展過程中逐步明確其內(nèi)容。
1. 需求收集
dubbogo 項(xiàng)目發(fā)展初期,其目標(biāo)僅僅是實(shí)現(xiàn) dubbo 某個版本的功能, 所以其需求收集并不用花費(fèi)很久時間。隨著 2019 年 8 月份發(fā)布 v1.0 后,dubbogo 越來越多地被多家生產(chǎn)廠商投入生產(chǎn)使用環(huán)境中,目前其需求方來源如下:
- 實(shí)現(xiàn) dubbo 某個版本的功能;
- 實(shí)際使用方的生產(chǎn)需求;
- 為緊跟當(dāng)下最近技術(shù)發(fā)展方向而進(jìn)行的技術(shù)預(yù)演。
dubbogo 當(dāng)前的 K8s 注冊中心技術(shù)方案就是緊跟最新技術(shù)發(fā)展方向而進(jìn)行預(yù)演的極好例證,其發(fā)展時間線如下:
-
2019 年 7 月,隨著阿里集團(tuán)和螞蟻金服在云原生方向的推波助瀾,阿里 dubbo 開發(fā)團(tuán)隊(duì)并未給出可靠的技術(shù)方向,dubbogo 社區(qū) core members 也都沒有云原生方向的技術(shù)積累和相應(yīng)人才,決定先開發(fā)一個基于 kube-apiserver 的注冊中心,以進(jìn)行技術(shù)儲備;
-
2019 年 8 月, 調(diào)研 dubbo 的 K8s 注冊中心方案后,dubbogo 社區(qū)決定拋開它獨(dú)立實(shí)現(xiàn)一個,爭取以最低代價(jià)把 dubbo 應(yīng)用遷移到 K8s 環(huán)境中運(yùn)行起來,同時決定未來的發(fā)展方向是 dubbogo operator;
-
2019 年 11 月,社區(qū)的王翔同學(xué)給出了初步實(shí)現(xiàn),在 2020 年 1 月隨 dubbogo v1.2 版本發(fā)布;
-
2020 年 4 月,有用戶要求在 K8s 環(huán)境中 consumer 可跨 namespace 訪問 provider,相應(yīng)實(shí)現(xiàn)在 2020 年 7 月隨著 dubbogo v1.5 版本發(fā)布;
-
2020 年 5 月,dubbogo 社區(qū)和 mosn 社區(qū)合作實(shí)現(xiàn)了 dubbo mesh;
-
2020 年 6 月,社區(qū)意識到 kube-apiserver 是系統(tǒng)的運(yùn)維態(tài) IaaS 層的核心組件,不應(yīng)該跨過 PaaS 層直接暴露給應(yīng)用層,否則應(yīng)用層使用不當(dāng)或者框架自身的流量方面的 bug 把 kube-apiserver 打垮后將造成整個系統(tǒng)的 P0 級故障,dubbogo v1.6 應(yīng)當(dāng)給出 dubbogo operator 的具體實(shí)現(xiàn);
-
2020 年 7 月,dubbogo v1.5 發(fā)布后,社區(qū)已經(jīng)知道完全可以把目前的 kube-apiserver 注冊中心的實(shí)現(xiàn)獨(dú)立成為一個 dubbogo operator,未來的方向是結(jié)合 Istio 拓展其灰度發(fā)布、限流、故障注入和配置動態(tài)下發(fā)能力。
至于 dubbo-go-proxy ,dubbogo 社區(qū)并不打算借鑒其他項(xiàng)目,完全依靠社區(qū)同學(xué)貢獻(xiàn)各自想法后,進(jìn)行項(xiàng)目需求收集。目前 dubbogo 社區(qū)已經(jīng)收集完畢 dubbo-go-proxy 的項(xiàng)目需求方的意見,社區(qū)已有 5 位同學(xué)參與項(xiàng)目一期開發(fā),預(yù)計(jì) 10 月份發(fā)布初版。
2. 項(xiàng)目管理
需求收集完畢,定義近期一段時間內(nèi)的開發(fā)目標(biāo)后,就進(jìn)入了項(xiàng)目任務(wù)拆解和項(xiàng)目開發(fā)管理階段。像 dubbogo 和 dubbo-go-proxy 這種后來者項(xiàng)目,處于追趕階段,個人理解它們并沒有所謂的后發(fā)優(yōu)勢,更沒有特定的技術(shù)優(yōu)勢,能夠做的就是快速迭代,縮短與競品的差距。
dubbogo 要求接受開發(fā)任務(wù)的各個 feature owner 必須在某個 deadline 前完成相應(yīng)的開發(fā)任務(wù)。當(dāng)然,feature 的等級不同,非核心 feature 【如技術(shù)預(yù)演性的 feature】允許 delay,順延發(fā)布也無不可。
我們在項(xiàng)目每個版本的需求收集階段,會把愛好者統(tǒng)一拉入一個小群進(jìn)行溝通交流。進(jìn)入開發(fā)階段時,由于項(xiàng)目時間 deadline 限定以及技術(shù)匹配度兩項(xiàng)要求,每個版本就很自然能選出能夠留下來參與項(xiàng)目開發(fā)的人。最終參與每個版本開發(fā)的人盡量不要超過 7 個人,否則溝通成本就會劇增。
下圖是 dubbogo v1.5.1 的項(xiàng)目管理圖**(阿里巴巴云原生公眾號后臺回復(fù)“915”即可查看清晰大圖)**:
其有任務(wù)分解、技術(shù)風(fēng)險(xiǎn)以及風(fēng)險(xiǎn)預(yù)案。
工具是生產(chǎn)力,目前以 dubbogo 項(xiàng)目開發(fā)進(jìn)度跟蹤工具使用 Github Projects。如上圖,每個子任務(wù)進(jìn)度,這個工具都會及時顯示,相應(yīng)的任務(wù) owner 可以及時根據(jù)任務(wù)進(jìn)度和 deadline ,調(diào)整開發(fā)計(jì)劃。更進(jìn)一步的好處是,沒有人會對工具產(chǎn)生意見,擺脫“交通基本靠走,通訊基本靠吼”的溝通模式,減少版本發(fā)版人和 feature owner 之間的戾氣。
3. 代碼質(zhì)量
開源項(xiàng)目的開發(fā)任務(wù)不僅僅是開發(fā)代碼,也不意味著因?yàn)楦鱾€ owner 僅僅是業(yè)余時間參與開源項(xiàng)目就可以降低對代碼質(zhì)量要求。
工具就是生產(chǎn)力,合適的工具能夠減少人工工作量和提升代碼質(zhì)量。dubbogo 在項(xiàng)目開發(fā)過程中的各個階段都用到了如下工具:
-
auto-comment:contributor 提出 issue 或者 pr 后,可很方便地發(fā)出預(yù)先定制的評語;
-
hound:一個 Go 語言項(xiàng)目靜態(tài)代碼檢測工具,自動 Review 代碼;
-
travis:一個 Github 項(xiàng)目自動化測試工具,可自動執(zhí)行代碼單測和用戶自定義的集成測試,并發(fā)出釘釘通知;
-
人工 Review:dubbogo 社區(qū)要求每個 pr 至少有三個 committer 級別的人 Review 通過;
-
goreportcard:一個很好的 Github 項(xiàng)目靜態(tài)代碼檢測工具;
-
gitee:作為國內(nèi)一個比較強(qiáng)大的代碼托管網(wǎng)站,免費(fèi)為項(xiàng)目提供了一些代碼安全和靜態(tài)代碼質(zhì)量檢測工具,dubbogo 也經(jīng)常使用,受益良多;
-
代碼規(guī)范,社區(qū)內(nèi)部有一份簡單的代碼規(guī)范,并隨著項(xiàng)目發(fā)展不斷完善。
展望
dubbogo 項(xiàng)目每次發(fā)完版本,發(fā)版人都會首先發(fā)出一份 “What’s New”,除了總結(jié)最新版本的特性外,還會總結(jié)其近期進(jìn)展并對未來發(fā)展進(jìn)行規(guī)劃,以幫助項(xiàng)目愛好者和使用者了解其實(shí)現(xiàn)思路和使用方法。
dubbogo 自身還有很多缺點(diǎn),如:
- 網(wǎng)站建設(shè)和文檔質(zhì)量都有待改進(jìn);
- API 用戶友好度不夠;
- 配置文件過多且沒有合理的文檔說明導(dǎo)致入門門檻高;
- 整體性能改進(jìn),很多地方可添加調(diào)用鏈的緩存以減小鎖競爭;
- 添加 prometheus 指標(biāo),繼續(xù)提高 可觀測性;
- 在協(xié)議層面支持其他微服務(wù)框架,實(shí)現(xiàn)原生通信,以繼續(xù)提升其互聯(lián)互通性;
- dubbo-samples 用例不夠豐富,繼續(xù)添加測試用例,以減小入門門檻;
希望借助社區(qū)之力,在 dubbogo 發(fā)展過程中消化并解決掉這些問題,dubbogo 社區(qū)【釘釘群號 23331795】與 dubbogo 同在。
作者簡介
于雨,一個有十多年服務(wù)端基礎(chǔ)架構(gòu)研發(fā)一線工作經(jīng)驗(yàn)的程序員,目前在螞蟻金服可信原生部從事容器編排和 service mesh 工作。熱愛開源,從 2015 年給 Redis 貢獻(xiàn)代碼開始,陸續(xù)改進(jìn)過 Muduo/Pika/Dubbo/Dubbo-go 等知名項(xiàng)目。
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號。”
總結(jié)
以上是生活随笔為你收集整理的写在 Dubbo go 的第五年的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零入门 Serverless | SA
- 下一篇: 设计稿生成代码与 Serverless