天天看點

Dubbo 雲原生之路:ASF 畢業一周年、3.0 可期前言Dubbo 畢業一周年回顧雲原生 Dubbo - Dubbo 3.0總結與展望Dubbo 社群

Dubbo 雲原生之路:ASF 畢業一周年、3.0 可期前言Dubbo 畢業一周年回顧雲原生 Dubbo - Dubbo 3.0總結與展望Dubbo 社群

作者 | 劉軍

【Dubbo 3.0 前瞻系列】:

導讀:今年是 Dubbo 從 Apache 基金會畢業的一周年,同時也是推進 Dubbo 3.0,即全面擁抱雲原生的重要一年。Dubbo 社群策劃了【Dubbo 雲原生之路】系列文章,和大家一起回顧 Apache Dubbo 社群的發展。系列文章主要涵蓋 Dubbo 技術解讀、社群營運、應用案例解析三大部分。

縱觀中國開源曆史,你真的沒法找到第二個像 Dubbo 一樣自帶争議和讨論熱度的開源項目。

一方面,2011 年,它的開源填補了當時生産環境使用的 RPC 架構的空白,一釋出就被廣泛采用;另一方面,它經曆了停止維護、重新開機維護後捐獻給 Apache 基金會、接着又以頂級項目的身份畢業。即便阿裡努力對外展示開源投入的決心,在面對廣受歡迎的後起之秀 Spring Cloud,和新生兒 Service Mesh 的夾擊下,Dubbo 的路将怎麼走下去?在雲原生時代,它如何延續目前光芒?

前言

本篇作為整個系列的開篇,将整體回顧并展望 Dubbo 項目發展,同時簡要概括後續文章。

從 2019 年到現在,在 Dubbo 畢業的這一年時間裡,Dubbo 社群和産品都取得長足進步,同時 Dubbo 雲原生版本 - Dubbo 3.0 的開發工作也已經全面鋪開。

社群方面。需要重點提及的有兩點:一個是落地與貢獻的企業使用者進一步增加,主動與社群取得聯系的中、大規模公司達200多家,如攜程、工商銀行、瓜子二手車、網聯清算、中通等;另一個是以 Dubbo-go 為代表的子社群蓬勃發展。

産品技術演進方面。Dubbo Java 版釋出 10 個版本,在多語言、協定、性能、服務治理模型等方面都有深度探索。Dubbo go 釋出超過 8 個版本,在功能基本對齊 Java 版本的基礎上,一些方向上也已經走在了 Java 版本前面。值得一提的是,阿裡巴巴内部也正在積極推動 Dubbo 社群版本在内部的落地,從今年開始逐漸實作以 Dubbo 替換其内部的 HSF 架構。這一方面有利于阿裡将其在 HSF 上的豐富服務治理經驗回饋輸出到社群,另一方面阿裡官方的落地也将直接加速 Dubbo 雲原生的發展。

在雲原生大潮下,3.0 已被正式列為今年 Dubbo 産品建設的核心目标,涉及下一代 RPC 協定、服務治理模型、雲原生基礎設施适配等多方面的内容。其中,很多方面已經在目前的 2.7 版本中做了前置性探索,如近期釋出的基于 HTTP/2 的協定支援、應用級服務發現等,後續工作将以此為基礎展開。系列文章也會有對 Dubbo 3.0 Roadmap 及技術方案的詳細解析。

Dubbo 畢業一周年回顧

2017 年 7 月,Dubbo 開源項目被重新激活,2018 年捐獻到 Apache 基金會,2019 年 5 月,Dubbo 正式從 Apache 基金會孵化畢業,成為 Apache 頂級項目。接下來,文章分别從社群、子社群、産品三方面介紹 Dubbo 過去一年的成績。

社群一年釋出 24 個版本,貢獻者已超 300

如果說最開始重新激活是以阿裡巴巴為主導的項目維護投入,那自 Dubbo 加入 Apache 起,它就已經開始成為一個社群主導、社群貢獻為主的完全開放的基金會項目。

到今天,這一趨勢正變得更明顯。包括阿裡巴巴、攜程、工商銀行、瓜子二手車、網聯清算、中通等在内的網際網路、傳統企業公司,在 Dubbo 的使用與社群代碼貢獻上都有投入。Dubbo 社群正變得非常活躍和多樣化。

過去一年,Dubbo 社群項目總共釋出 24 個版本,發展 Committer/PMC 27 人,其中有 20% 的貢獻者是來自于阿裡巴巴,80% 以上來自不同組織的開發者或愛好者。

Dubbo 社群組織了超過 10 場線下 meetup 活動,基本覆寫了國内開發者聚集的城市。通過線下或線上直播活動,分享超過 100 個 topic 的演講,深度講解 Dubbo 社群最新動态、功能子產品開發和近期規劃等。主題演講大多是社群采集方式,由 Dubbo 的深度企業分享實踐經驗,其中典型的代表包括攜程、工商銀行、考拉、信用算力等。

從 Github 統計資料來看,Dubbo Star 數取得新的裡程碑,已超過 3 萬,相比重新開機開源時增長了近 5 倍;貢獻者由最初的幾十個增長到現在的 300 多個,而這其中有 60 多人已經被提名為 committer,不論是貢獻者數量還是 committer 比例都得到很大的提升;Dubbo Java 釋出的有 65 個。

上述主要是對 

Dubbo Java

項目社群發展的總結,下面将介紹 Dubbo Java 産品方面的進展。

Dubbo Java 疊代,目前主要維護 3 個大版本

目前社群維護的 Dubbo Java 大版本主要有 3 個,分别是 2.5.x、2.6.x 和 2.7.x。

  • 2.7.x 是社群的主要開發版本,在過去的一年共釋出了 8 個版本(2.7.0 - 2.7.7),每個版本都有一些值得關注的特性或功能更新,涵蓋從程式設計模型、服務治理、性能到協定的多個方面的增強;
  • 2.6.x 版本則定位為 bugfix 版本,過去一年共釋出了 3 個版本,主要以修複問題和安全漏洞為主,并沒有增加太多新的 feature;
  • 2.5.x 版本從 2019 年初開始已宣布 EOF,隻做安全修複;而到了下半年已經完全停止了維護。

下面通過一個簡要分層子產品圖,回顧過去一段時間 Dubbo 的技術架構演進,從程式設計模型、服務治理、傳輸協定、性能優化等角度切入:

Dubbo 雲原生之路:ASF 畢業一周年、3.0 可期前言Dubbo 畢業一周年回顧雲原生 Dubbo - Dubbo 3.0總結與展望Dubbo 社群

以上很多功能都已被各大廠商落地,用于解決具體的業務問題。我們也期待,接下來這些廠商帶來更多關于 Dubbo 實踐經驗的深度總結。

Dubbo-go 發展的第五年,正與 Dubbo 齊頭并進

除 Dubbo Java 之外,Dubbo 周邊也發展出了很多優秀的子項目(子社群),其中包括 

Dubbo-spring-boot-project

Dubbo-go

 等,這裡先着重介紹 Dubbo-go 子社群。

Dubbo-go 項目最早由

于雨

在 2016 年 5 月建構,同年9月釋出并開源,如下時間軸圖清晰記錄了

 Dubbo-go 的前世今生

Dubbo 雲原生之路:ASF 畢業一周年、3.0 可期前言Dubbo 畢業一周年回顧雲原生 Dubbo - Dubbo 3.0總結與展望Dubbo 社群

秉承 "bridge the gap between Java and Go" 天然使命的 

,已經進入第五個年頭,也走出了自己獨特的發展路徑:

  • 目前的  v1.4.0 版本 已對齊 2.6.x 版本,即将釋出的版本将與 v2.7.x【對标 v2.7.5】對齊,而後将會釋出對标 Dubbo 3.x 的 v1.6.0 版本;
  • 獨立維護從底層的 hessian2 協定庫  Dubbo-go-hessian2 、網絡庫  getty  到上層對标 Dubbo 的   的全套實作;
  • 獨立的 TCP + Protobuf 和 gRPC + JSON 通信方案也已開發完成【将包含着在版本 v1.5.0 中】;
  • 已與 Dubbo/ gRPC / Spring Boot  實作互聯互通;
  • 通過接入  Opentracing  和 Promethus,Dubbo-go 在可觀測性等微服務方向的進行了自己獨特的探索;
  • 已實作了基于 HTTPS 的 可信 RPC 調用
  • 已經實作了自己獨特的 把 Kubernetes 作為注冊中心的微服務方案

 從最開始 Dubbo 的 Go 語言實作,已發展成為目前 Dubbo 多語言版本中功能最強大者,它的發展離不開背後強大的 

Dubbo-go 社群

。除了上述 Dubbo-go 的自身特性外,通過跨社群合作,取得了如下成績:

  • 通過與 MOSN 社群合作,已經實作 Dubbo/Dubbo-go 應用可以 零成本接入 基于 MOSN 實作  Dubbo Mesh ,實作微服務和雲原生共存的 “雙模微服務”;
  • 與 sentinel 社群合作,在 Dubbo/Dubbo-go 完整接入  sentinel 的降級和限流方案
  • 與 Apollo 社群合作,在 Dubbo-go 中實作 遠端配置下發
  • 與 Nacos 社群合作,實作基于 Nacos 的服務發現。

2020 年 Q2 主要目标有:

  • 釋出完全對齊 Dubbo 2.7.x 的  v1.5.0 版本
  • 釋出對标 Dubbo 3.0 的 v1.6.0 版本;
  • 在雲原生方面繼續自己的探索;
  • 繼續與兄弟社群保持合作共進态勢,擴大自身使用範圍;
  • 生産實踐上推進在阿裡集團,以及更多廠家的落地。

項目(包括子項目)目前已先後在

攜程 塗鴉智能

螞蟻金服

等公司生産落地。今年阿裡集團完成 HSF 和 Dubbo 的融合後,項目也将在阿裡集團雙十一戰場經受考驗。

雲原生 Dubbo - Dubbo 3.0

3.0 是下一代 Dubbo 架構的代号。一年前,最開始探索 Reactive Stream 之時,社群也曾有過對 Dubbo 3.0 的廣泛讨論。而這一次,在雲原生大背景下,3.0 代表了更全面的 Dubbo 架構更新,涉及到下一代 RPC 協定、全新的服務治理模型和雲原生基礎設施适配等。

阿裡巴巴是參與 Dubbo 3.0 開發建設的主要力量之一,這款始于阿裡的開源項目正重新回歸阿裡内部落地。

去年開始,阿裡巴巴就已經在逐漸推動以 Dubbo 替換其内部的 HSF 架構的工作,通過将 Dubbo 與 HSF 兩個架構融為一體,并在此基礎上發展出适應雲原生架構的 Dubbo 版本。Dubbo 重回阿裡巴巴的落地是擁抱社群、擁抱雲原生、擁抱标準化的一次很好的實踐。阿裡巴巴内部 Dubbo 3.0 的落地,對社群也是一個重大利好,這一方面有利于阿裡巴巴将其在 HSF 上的豐富服務治理經驗回饋輸出到社群,另一方面也将直接推動 Dubbo 雲原生架構的快速演進。除了阿裡巴巴之外,包括鬥魚、工商銀行、愛奇藝、鬥魚等廠商也都在參與下一代 Dubbo 3.0 的建設。

下面列出了 Dubbo 3.0 中的三個重要方向,具體的 Roadmap 将在接下來文章中單獨說明:

  • 下一代 RPC 協定。新協定将提供更豐富的如 Stream、Flow Control 等内置語義,同時将具有更好的擴充性、網關的友好性等;
  • 基于應用粒度的服務發現機制。在兼顧 Dubbo 面向接口的易用性與功能性的基礎上,解決與 Kubernetes Native Service 适配問題,解決大規模叢集下的位址推送性能瓶頸問題;
  • 适配雲原生基礎設施的解決方案。這涉及到 Dubbo 服務與基礎設施生命周期對接、Kubernetes Native Service 适配、适應基礎設施排程的服務治理規則、适配 Service Mesh 架構的解決方案等。

接下來沿着這三個方面簡要展開。

下一代 RPC 協定

專注在協定自身來說,下一代的協定主要聚焦在 HTTP/2、Reactive Stream、Flow Control 等方面:

  • Reactive Stream:Reactive Stream 引入 RPC,帶來更豐富的通信語義和 API 程式設計模型支援,如 Request-Stream、Bi-Stream 等;
  • HTTP/2:微服務雲原生場景下,基于 HTTP/2建構的通信協定具有更好的通用性和穿透性;
  • Flow Control:協定内置流控機制,支援類似 Reqctive Stream 的 Request (n) 流控機制。

從解決的業務場景問題上來說,基于新的協定 Dubbo 在架構層面要支援智能決策的負載均衡算法、對 Mesh 和網關更友好、更容易提供多語言實作與互通等。

  • Mesh:協定對穿透 Mesh 更友好,區分協定頭 Metadata 與 RPC Payload,友善完成與 Mesh 的協作,包括流量控制機制、應用層配置協商等;
  • 協定通用性:兼顧通用性與性能,支援協定能在各種裝置上運作;
  • 多語⾔支援:如通過支援 Protobuf 提供了更完善的跨語言服務定義與序列化傳輸的支援。

應用級服務治理

面向接口一直以來都是 Dubbo 架構的優勢。一方面它的易用性,為開發者屏蔽了遠端調用的存在;另一方面面向接口的位址發現、服務治理帶來了更強大的能力,使得整個 Dubbo 治理體系非常強大與靈活。

既然面向接口有如此多的好處,那為什麼我們還要探索面向應用的服務治理模式呢?

聽起來似乎有些沖突。其實到底是面向接口,還是面向應用,隻是從不同的角度看 Dubbo。我們所聊的“面向接口 -> 面向應用”的改造,主要展現在服務注冊、發現層面:

Dubbo 雲原生之路:ASF 畢業一周年、3.0 可期前言Dubbo 畢業一周年回顧雲原生 Dubbo - Dubbo 3.0總結與展望Dubbo 社群

而我們說的面向應用的新模型,主要對第 2 點,即注冊中心的資料組織轉變為 “面向應用/執行個體” 粒度。這為我們解決兩個問題:

  • 在服務發現層面與 Kubernetes Service 等微服務模型對齊;
  • 服務發現的資料量将有一個量級的下降,從 “接口數  執行個體數 ”下降到 “應用數 執行個體數”。

具體可以參見文章《

Dubbo 邁出雲原生重要一步 - 應用級服務發現解析

》,本系列文章後續也會有對這部分機制和實作的更深度解析。

雲原生基礎設施

雲原生帶來了底層基礎設施,應用開發、部署和運維等全方位的變化:

基礎設施

  • 基礎設施排程機制變化,帶來運維(生命周期)、服務治理等方面的變化;
  • 服務發現能力下沉, Kubernetes 抽象了 Native Service Discovery。

Service Mesh - 雲原生微服務解決方案

  • Mesh 為跨語言、sdk 更新等提供了解決方案,Dubbo sdk 要與 Mesh 協作,做到功能、協定、服務治理等多友善的适配;
  • Mesh 尚未大規模鋪開,且其更适合對流量管控更關注的應用,傳統 SDK 的性能優勢仍舊存在,兩者混部遷移場景可能會長期存在。

從應用場景上,Dubbo 可能的部署環境包括:

  • 不使用 Kubernetes Native Service,Kubernetes 隻作為容器編排排程設施,繼續使用 Dubbo  自建的服務注冊、發現機制;
  • 複用 Kubernetes Native Service,Dubbo 不再關心服務注冊,Dubbo Client 負責服務發現與流量配置設定;
  • Dubbo sdk 往 Mesh 遷移,一方面要做到适應 Mesh 架構,成為 Mesh 體系下的 RPC 程式設計和通信方案;另一方面要做到 Dubbo 與 Mesh 架構長期共存,互相打通服務發現和治理體系;
  • Kubernetes 上與雲下混合部署的平滑遷移支援,包括服務發現的統一與網絡通信方案的打通。

從 Dubbo 功能劃分上,将着重從以下方面提供對雲原生基礎設施的支援:

  • 生命周期:Dubbo 與 Kubernetes 排程機制綁定,保持服務生命周期與 Pod 容器等生命周期的自動對齊;
  • 治理規則:服務治理規則在規則體、規則格式方面進行優化,如規則體以 YAML 描述、取消過濾規則對 IP 的直接依賴,定義規則特有的 CRD 資源等;
  • 服務發現: 支援 K8s Native Service 的服務發現,包括 DNS、API-Server,支援 xDS 的服務發現;
  • Mesh 架構協作:建構下一代的基于 HTTP/2 的通信協定,支援 xDS 的标準化的資料下發。

新一代的 RPC 協定和應用級服務發現模型将會是這一部分的前置基礎。

總結與展望

作為系列文章開篇,我們在這裡對 Dubbo 過去一年的成績做了簡要的總結與回顧,包括 Dubbo 社群、産品疊代的發展。

接下來我們會看到更多來自深度 Dubbo 使用者的落地經驗分享,Dubbo-go 子社群的發展故事等。

更重要的,我們也對下一代雲原生 Dubbo - Dubbo 3.0 做了展望,後續關于 Dubbo 3.0 Roadmap、方案設計與進展解析等也将在此系列中釋出。敬請期待!

Dubbo 社群

歡迎 Star 和共建:

https://github.com/apache/dubbo

作者簡介

劉軍  花名陸龜,Github 賬号 Chickenlj,Apache Dubbo PMC,項目核心開發,見證了 Dubbo 重新開機開源,到從 Apache 基金會畢業的整個過程。現任職阿裡雲雲原生應用平台團隊,參與服務架構、微服務相關工作,目前主要在推動 Dubbo 3.0 - Dubbo 雲原生。

阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公衆号。”