做者 | 於雨git
阿里巴巴雲原生公衆號後臺回覆「915」便可查看 dubbogo v1.5.1 項目管理圖清晰大圖!程序員
dubbogo 項目已進入第五個年頭。github
項目發展的前兩年,咱們把 hessian2 協議庫、網絡庫和總體基礎框架搭建一番。從 2018 年項目被 Dubbo 官方接納開始,依託阿里平臺,社區開始造成並快速發展。與社區同窗們齊心協力之下,現在全面兼容 Dubbo v2.7.x 的 Dubbo-go v1.5.1 已經發布。apache
一個項目總體必須提煉出核心目標,指明其存在的意義和價值。有了初心,項目發展過程當中產生困惑時,才能明確答覆 「我是誰?從哪裏來?到哪裏去」。api
dubbogo 項目有其自身的 milestone 要求,大體規劃了每一個階段的關鍵里程碑,在項目發展初期僅僅是實現 Dubbo 的某個功能,但在發展過程當中會不斷結合當下的技術發展潮流,不斷修正其將來發展方向。緩存
其發版計劃是經過「開發當前版本、規劃新版本、根據反饋修正新版本」的模式定義當前版本的開發內容和下一個版本的發展方向。每次發版後會根據社區使用反饋對下一代的發展目標進行修正。安全
站在吃瓜人的角度,或許能夠說出 「dubbogo 不就是 dubbo 的 Go 語言版本嘛,照着抄就是了」 之類的論調。而參與過 dubbogo 項目跟着社區一路走來的人,就知道 dubbogo 並不簡單定位於 Dubbo 項目的 Go 語言版本。網絡
dubbogo 初心不變,不一樣時間對自身定位均有升級。我認爲當前 dubbogo 的定位是:架構
dubbogo 項目初期目的是依靠 Dubbo 實現 "bridge the gap between Java and Go" ,目前 dubbogo 正與 Dubbo 齊頭並進,已經達到項目立項的目標。有長期生命的通訊框架,大概有 5 年的成長期和 5 年的穩定成熟期。目前的 dubbogo 處在成長期和穩定成熟期的過渡期,這意味着社區若是想保持發展態勢,就必須開始走多元化道路,發展本身的生態了。併發
眼下 dubbogo 社區正在集中精力孵化一個新的項目---實現一個基於 dubbogo 的 HTTP 網關,項目的意義是:dubbogo 自身是一個流量控制中間件,在其上擴展項目,其方向很天然就是作一個 proxy/sidecar or gateway,且社區一直有網關這方面的需求。
項目目的以下:
項目立項完畢後,就進入招兵買馬階段了。
dubbogo 社區發展初期,其關鍵成員都是經過提交 issue 或者 pr 的同窗撩來的。經過這種方式撩來的同窗由於志同道合,有極高的機率同社區一塊兒走下來。dubbogo 社區的 core member 就是這樣來的。
其次是與其餘公司的合做。dubbogo 自己是一個有着極高生產環境需求的項目,在發展過程當中依次與攜程、塗鴉、鬥魚、虎牙、螞蟻金服和阿里集團有過極深的合做,其間與攜程的合做對 dubbogo 成型而言極爲關鍵。
另外一個途徑是與其餘社區合做。dubbogo 項目發展過程當中,與如下社區合做過:
與其餘社區合做的好處是使得雙方的項目都受益:擴展雙方的能力和使用場景,其次是社區間人員的流動。在合做過程當中,dubbogo 自身受益極大,目前有 4 個社區 committer 來自於其它社區。合做完成後並不意味着結束,而是一個新的共贏的開始:社區項目也是發展的,當一個項目有新特性時能夠同時快速被另外一個項目採用驗證,對擴展開發者們的技術能力和人脈也是極爲有利的,dubbogo 社區目前的好幾個同窗同時活躍在多個社區。
dubbogo 項目已通過了草莽階段,造成了一個的 800 多人的社區羣,因此 dubbogo-proxy 項目立項後,很快就在社區羣內找到不少項目愛好者。
項目發展初期有不少同窗會 Java 不懂 Dubbo 不會 Go,最後都經過參與項目提高了自個人能力。固然有些人會擔憂項目代碼的質量,但只要秉持 "Community Over Code" 這個 "Apache Way",在發展過程當中這些問題都不大。
2019 年時,參與 dubbogo 項目的成員中一部分同窗平時的工做是進行業務開發,秉承着對中間件通訊技術 「我是誰?我從哪裏來?要到那裏去」 的初心參與 dubbogo 的開發,不管是對 dubbogo 抑或是對其自身技術水平提高都產生了積極的影響。
dubbogo 社區對 dubbogo 發版時間有必定期限要求,因此對參與人員的時間投入也有必定的要求。每一個版本的核心功能的 owner,須要保證在 deadline 期限內完成開發任務。
dubbogo 每一個版本都有一個發版人,負責相應版本的任務拆分、發展跟蹤、代碼 Review 和最後的測試驗收,這就要求發版人自身的技術水平和時間投入極高。目前 dubbogo 每一個大版本的發版人都不是同一我的,每次 dubbogo 發版,都意味着每一個發版人的體力和精力的極大付出。於某在此致敬歷屆發版人!
項目立項後,就須要明確發展大方向、發展 milestone、版本規劃、以及一段時間內的具體的開發規劃。項目發展初期,Roadmap 能夠不清晰,先摸着石頭過河,在發展過程當中逐步明確其內容。
dubbogo 項目發展初期,其目標僅僅是實現 dubbo 某個版本的功能, 因此其需求收集並不用花費好久時間。隨着 2019 年 8 月份發佈 v1.0 後,dubbogo 愈來愈多地被多家生產廠商投入生產使用環境中,目前其需求方來源以下:
dubbogo 當前的 K8s 註冊中心技術方案就是緊跟最新技術發展方向而進行預演的極好例證,其發展時間線以下:
至於 dubbo-go-proxy ,dubbogo 社區並不打算借鑑其餘項目,徹底依靠社區同窗貢獻各自想法後,進行項目需求收集。目前 dubbogo 社區已經收集完畢 dubbo-go-proxy 的項目需求方的意見,社區已有 5 位同窗參與項目一期開發,預計 10 月份發佈第一版。
需求收集完畢,定義近期一段時間內的開發目標後,就進入了項目任務拆解和項目開發管理階段。像 dubbogo 和 dubbo-go-proxy 這種後來者項目,處於追趕階段,我的理解它們並無所謂的後發優點,更沒有特定的技術優點,可以作的就是快速迭代,縮短與競品的差距。
dubbogo 要求接受開發任務的各個 feature owner 必須在某個 deadline 前完成相應的開發任務。固然,feature 的等級不一樣,非核心 feature 【如技術預演性的 feature】容許 delay,順延發布也無不可。
咱們在項目每一個版本的需求收集階段,會把愛好者統一拉入一個小羣進行溝通交流。進入開發階段時,因爲項目時間 deadline 限定以及技術匹配度兩項要求,每一個版本就很天然能選出可以留下來參與項目開發的人。最終參與每一個版本開發的人儘可能不要超過 7 我的,不然溝通成本就會劇增。
下圖是 dubbogo v1.5.1 的項目管理圖(阿里巴巴雲原生公衆號後臺回覆「915」便可查看清晰大圖):
其有任務分解、技術風險以及風險預案。
工具是生產力,目前以 dubbogo 項目開發進度跟蹤工具使用 Github Projects。如上圖,每一個子任務進度,這個工具都會及時顯示,相應的任務 owner 能夠及時根據任務進度和 deadline ,調整開發計劃。更進一步的好處是,沒有人會對工具產生意見,擺脫「交通基本靠走,通信基本靠吼」的溝通模式,減小版本發版人和 feature owner 之間的戾氣。
開源項目的開發任務不只僅是開發代碼,也不意味着由於各個 owner 僅僅是業餘時間參與開源項目就能夠下降對代碼質量要求。
工具就是生產力,合適的工具可以減小人工工做量和提高代碼質量。dubbogo 在項目開發過程當中的各個階段都用到了以下工具:
dubbogo 項目每次發完版本,發版人都會首先發出一份 "What's New",除了總結最新版本的特性外,還會總結其近期進展並對將來發展進行規劃,以幫助項目愛好者和使用者瞭解其實現思路和使用方法。
dubbogo 自身還有不少缺點,如:
但願藉助社區之力,在 dubbogo 發展過程當中消化並解決掉這些問題,dubbogo 社區【釘釘羣號 23331795】與 dubbogo 同在。
於雨,一個有十多年服務端基礎架構研發一線工做經驗的程序員,目前在螞蟻金服可信原生部從事容器編排和 service mesh 工做。熱愛開源,從 2015 年給 Redis 貢獻代碼開始,陸續改進過 Muduo/Pika/Dubbo/Dubbo-go 等知名項目。
「 阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的公衆號。」