都已经十岁的 Apache Dubbo,还能再乘风破浪吗?
縱觀中國(guó)開源歷史,你真的沒法找到第二個(gè)像 Dubbo 一樣自帶爭(zhēng)議和討論熱度的開源項(xiàng)目。
一方面,2011 年,它的開源填補(bǔ)了當(dāng)時(shí)生產(chǎn)環(huán)境使用的 RPC 框架的空白,一發(fā)布就被廣泛采用;另一方面,它經(jīng)歷了停止維護(hù)、重啟維護(hù)后捐獻(xiàn)給 Apache 基金會(huì)、接著又以頂級(jí)項(xiàng)目的身份畢業(yè)。
面對(duì)多疑的開發(fā)者,在云原生時(shí)代,Apache Dubbo 將如何延續(xù)當(dāng)前光芒?
今年是 Dubbo 從 Apache 基金會(huì)畢業(yè)的一周年,同時(shí)也是推進(jìn) Dubbo 3.0,即全面擁抱云原生的重要一年。開源中國(guó)與 Apaceh Dubbo 共同策劃**【Dubbo 云原生之路】**系列文章,和大家一起回顧 Apache Dubbo 社區(qū)的發(fā)展。系列文章主要涵蓋 Dubbo 技術(shù)解讀、社區(qū)、應(yīng)用案例解析三大部分,之后每周都會(huì)和大家見面。
在【阿里巴巴云原生公眾號(hào)】留言說出與 Apache Dubbo 的故事,點(diǎn)贊排名前十的同學(xué)可領(lǐng)取 Dubbo 送出的專屬獎(jiǎng)品杯子一只;另外由Apache Dubbo PMC @Chickenlj 隨機(jī)抽取一名幸運(yùn)讀者,贈(zèng)送價(jià)值 260 元護(hù)眼燈一臺(tái)。下周三開獎(jiǎng)。
作者簡(jiǎn)介
劉軍,花名陸龜,GitHub 賬號(hào) Chickenlj,Apache Dubbo PMC,項(xiàng)目核心開發(fā),見證了 Dubbo 重啟開源,到從 Apache 基金會(huì)畢業(yè)的整個(gè)過程。現(xiàn)任職阿里云云原生應(yīng)用平臺(tái)團(tuán)隊(duì),參與服務(wù)框架、微服務(wù)相關(guān)工作,目前主要在推動(dòng) Dubbo 3.0 - Dubbo 云原生。
系列開篇:3.0 全面鋪開、ASF 畢業(yè)一周年
從 2019 年到現(xiàn)在,在 Dubbo 畢業(yè)的這一年時(shí)間里,Dubbo 社區(qū)和產(chǎn)品都取得長(zhǎng)足進(jìn)步,同時(shí) Dubbo 云原生版本 - Dubbo 3.0 的開發(fā)工作也已經(jīng)全面鋪開。
社區(qū)方面。需要重點(diǎn)提及的有兩點(diǎn):一個(gè)是落地與貢獻(xiàn)的企業(yè)用戶進(jìn)一步增加,主動(dòng)與社區(qū)取得聯(lián)系的中、大規(guī)模公司達(dá) 200 多家,如攜程、工商銀行、瓜子二手車、網(wǎng)聯(lián)清算、中通等;另一個(gè)是以 Dubbo-go 為代表的子社區(qū)蓬勃發(fā)展。
產(chǎn)品技術(shù)演進(jìn)方面。Dubbo Java 版發(fā)布 10 個(gè)版本,在多語言、協(xié)議、性能、服務(wù)治理模型等方面都有深度探索。Dubbo go 發(fā)布超過 8 個(gè)版本,在功能基本對(duì)齊 Java 版本的基礎(chǔ)上,一些方向上也已經(jīng)走在了 Java 版本前面。
值得一提的是,阿里巴巴內(nèi)部也正在積極推動(dòng) Dubbo 社區(qū)版本在內(nèi)部的落地,從今年開始逐步實(shí)現(xiàn)以 Dubbo 替換其內(nèi)部的 HSF 框架。這一方面有利于阿里將其在 HSF 上的豐富服務(wù)治理經(jīng)驗(yàn)回饋輸出到社區(qū),另一方面阿里官方的落地也將直接加速 Dubbo 云原生的發(fā)展。
在云原生大潮下,3.0 已被正式列為今年 Dubbo 產(chǎn)品建設(shè)的核心目標(biāo),涉及下一代 RPC 協(xié)議、服務(wù)治理模型、云原生基礎(chǔ)設(shè)施適配等多方面的內(nèi)容。其中,很多方面已經(jīng)在當(dāng)前的 2.7 版本中做了前置性探索,如近期發(fā)布的基于 HTTP/2 的協(xié)議支持、應(yīng)用級(jí)服務(wù)發(fā)現(xiàn)等,后續(xù)工作將以此為基礎(chǔ)展開。系列文章也會(huì)有對(duì) Dubbo 3.0 Roadmap 及技術(shù)方案的詳細(xì)解析。
Dubbo 畢業(yè)一周年回顧
2017 年 7 月,Dubbo 開源項(xiàng)目被重新激活,2018 年捐獻(xiàn)到 Apache 基金會(huì),2019 年 5 月,Dubbo 正式從 Apache 基金會(huì)孵化畢業(yè),成為 Apache 頂級(jí)項(xiàng)目。接下來,文章分別從社區(qū)、子社區(qū)、產(chǎn)品三方面介紹 Dubbo 過去一年的成績(jī)。
社區(qū)一年發(fā)布 24 個(gè)版本,貢獻(xiàn)者已超 300
如果說最開始重新激活是以阿里巴巴為主導(dǎo)的項(xiàng)目維護(hù)投入,那自 Dubbo 加入 Apache 起,它就已經(jīng)開始成為一個(gè)社區(qū)主導(dǎo)、社區(qū)貢獻(xiàn)為主的完全開放的基金會(huì)項(xiàng)目。
到今天,這一趨勢(shì)正變得更明顯。包括阿里巴巴、攜程、工商銀行、瓜子二手車、網(wǎng)聯(lián)清算、中通等在內(nèi)的互聯(lián)網(wǎng)、傳統(tǒng)企業(yè)公司,在 Dubbo 的使用與社區(qū)代碼貢獻(xiàn)上都有投入。Dubbo 社區(qū)正變得非常活躍和多樣化。
過去一年,Dubbo 社區(qū)項(xiàng)目總共發(fā)布 24 個(gè)版本,發(fā)展 Committer/PMC 27 人,其中有 20% 的貢獻(xiàn)者是來自于阿里巴巴,80% 以上來自不同組織的開發(fā)者或愛好者。
Dubbo 社區(qū)組織了超過 10 場(chǎng)線下 meetup 活動(dòng),基本覆蓋了國(guó)內(nèi)開發(fā)者聚集的城市。通過線下或線上直播活動(dòng),分享超過 100 個(gè) topic 的演講,深度講解 Dubbo 社區(qū)最新動(dòng)態(tài)、功能模塊開發(fā)和近期規(guī)劃等。主題演講大多是社區(qū)采集方式,由 Dubbo 的深度企業(yè)分享實(shí)踐經(jīng)驗(yàn),其中典型的代表包括攜程、工商銀行、考拉、信用算力等。
從 GitHub 統(tǒng)計(jì)數(shù)據(jù)來看,Dubbo Star 數(shù)取得新的里程碑,已超過 3 萬,相比重啟開源時(shí)增長(zhǎng)了近 5 倍;貢獻(xiàn)者由最初的幾十個(gè)增長(zhǎng)到現(xiàn)在的 300 多個(gè),而這其中有 60 多人已經(jīng)被提名為 committer,不論是貢獻(xiàn)者數(shù)量還是 committer 比例都得到很大的提升;Dubbo Java 發(fā)布的有 65 個(gè)。
上述主要是對(duì) Dubbo Java 項(xiàng)目社區(qū)發(fā)展的總結(jié),下面將介紹 Dubbo Java 產(chǎn)品方面的進(jìn)展。
Dubbo Java?迭代,目前主要維護(hù) 3 個(gè)大版本
當(dāng)前社區(qū)維護(hù)的 Dubbo Java?大版本主要有 3 個(gè),分別是 2.5.x、2.6.x 和 2.7.x。
-
2.7.x 是社區(qū)的主要開發(fā)版本,在過去的一年共發(fā)布了 8 個(gè)版本(2.7.0 - 2.7.7),每個(gè)版本都有一些值得關(guān)注的特性或功能升級(jí),涵蓋從編程模型、服務(wù)治理、性能到協(xié)議的多個(gè)方面的增強(qiáng);
-
2.6.x 版本則定位為 bugfix 版本,過去一年共發(fā)布了 3 個(gè)版本,主要以修復(fù)問題和安全漏洞為主,并沒有增加太多新的 feature;
-
2.5.x 版本從 2019 年初開始已宣布 EOF,只做安全修復(fù);而到了下半年已經(jīng)完全停止了維護(hù)。
下面通過一個(gè)簡(jiǎn)要分層模塊圖,回顧過去一段時(shí)間 Dubbo 的技術(shù)架構(gòu)演進(jìn),從編程模型、服務(wù)治理、傳輸協(xié)議、性能優(yōu)化等角度切入:
以上很多功能都已被各大廠商落地,用于解決具體的業(yè)務(wù)問題。我們也期待,接下來這些廠商帶來更多關(guān)于 Dubbo 實(shí)踐經(jīng)驗(yàn)的深度總結(jié)。
Dubbo-go 發(fā)展的第五年,正與 Dubbo 齊頭并進(jìn)
除 Dubbo Java 之外,Dubbo 周邊也發(fā)展出了很多優(yōu)秀的子項(xiàng)目(子社區(qū)),其中包括?Dubbo-spring-boot-project、Dubbo-go?等,這里先著重介紹 Dubbo-go 子社區(qū)。
Dubbo-go?項(xiàng)目最早由于雨在 2016 年 5 月構(gòu)建,同年 9 月發(fā)布并開源,如下時(shí)間軸圖清晰記錄了?Dubbo-go 的前世今生。
秉承?“bridge the gap between Java and Go” 天然使命的?Dubbo-go,已經(jīng)進(jìn)入第五個(gè)年頭,也走出了自己獨(dú)特的發(fā)展路徑:
-
當(dāng)前的?v1.4.0 版本已對(duì)齊 2.6.x 版本,即將發(fā)布的版本將與 v2.7.x【對(duì)標(biāo) v2.7.5】對(duì)齊,而后將會(huì)發(fā)布對(duì)標(biāo) Dubbo 3.x 的 v1.6.0版本;
-
獨(dú)立維護(hù)從底層的 hessian2 協(xié)議庫?Dubbo-go-hessian2、網(wǎng)絡(luò)庫?getty?到上層對(duì)標(biāo) Dubbo 的?Dubbo-go?的全套實(shí)現(xiàn);
-
獨(dú)立的 TCP + Protobuf 和 gRPC + JSON 通信方案也已開發(fā)完成【將包含著在版本 v1.5.0 中】;
-
已與?Dubbo/gRPC/Spring Boot?實(shí)現(xiàn)互聯(lián)互通;
-
通過接入?Opentracing?和 Promethus,Dubbo-go 在可觀測(cè)性等微服務(wù)方向的進(jìn)行了自己獨(dú)特的探索;
-
已實(shí)現(xiàn)了基于 HTTPS 的可信 RPC 調(diào)用;
-
已經(jīng)實(shí)現(xiàn)了自己獨(dú)特的把 Kubernetes 作為注冊(cè)中心的微服務(wù)方案;
Dubbo-go?從最開始?Dubbo 的?Go 語言實(shí)現(xiàn),已發(fā)展成為目前 Dubbo 多語言版本中功能最強(qiáng)大者,它的發(fā)展離不開背后強(qiáng)大的?Dubbo-go 社區(qū)。除了上述 Dubbo-go 的自身特性外,通過跨社區(qū)合作,取得了如下成績(jī):
-
通過與 MOSN 社區(qū)合作,已經(jīng)實(shí)現(xiàn)?Dubbo/Dubbo-go 應(yīng)用可以零成本接入基于 MOSN 實(shí)現(xiàn)?Dubbo Mesh,實(shí)現(xiàn)微服務(wù)和云原生共存的?“雙模微服務(wù)”;
-
與 sentinel 社區(qū)合作,在 Dubbo/Dubbo-go 完整接入?sentinel 的降級(jí)和限流方案;
-
與 Apollo 社區(qū)合作,在 Dubbo-go 中實(shí)現(xiàn)遠(yuǎn)程配置下發(fā);
-
與 Nacos 社區(qū)合作,實(shí)現(xiàn)基于 Nacos 的服務(wù)發(fā)現(xiàn);
Dubbo-go 社區(qū) 2020 年 Q2 主要目標(biāo)有:
-
發(fā)布完全對(duì)齊 Dubbo 2.7.x 的?v1.5.0 版本;
-
發(fā)布對(duì)標(biāo) Dubbo 3.0 的 v1.6.0版本;
-
在云原生方面繼續(xù)自己的探索;
-
繼續(xù)與兄弟社區(qū)保持合作共進(jìn)態(tài)勢(shì),擴(kuò)大自身使用范圍;
-
生產(chǎn)實(shí)踐上推進(jìn)在阿里集團(tuán),以及更多廠家的落地。
項(xiàng)目(包括子項(xiàng)目)目前已先后在攜程、涂鴉智能和螞蟻金服等公司生產(chǎn)落地。
今年阿里集團(tuán)完成 HSF 和 Dubbo 的融合后,項(xiàng)目也將在阿里集團(tuán)雙十一戰(zhàn)場(chǎng)經(jīng)受考驗(yàn)。
云原生 Dubbo - Dubbo 3.0
3.0 是下一代 Dubbo 架構(gòu)的代號(hào)。一年前,最開始探索 Reactive Stream 之時(shí),社區(qū)也曾有過對(duì) Dubbo 3.0的廣泛討論。而這一次,在云原生大背景下,3.0 代表了更全面的 Dubbo 架構(gòu)升級(jí),涉及到下一代 RPC 協(xié)議、全新的服務(wù)治理模型和云原生基礎(chǔ)設(shè)施適配等。
阿里巴巴是參與 Dubbo 3.0 開發(fā)建設(shè)的主要力量之一,這款始于阿里的開源項(xiàng)目正重新回歸阿里內(nèi)部落地。
去年開始,阿里巴巴就已經(jīng)在逐步推動(dòng)以 Dubbo 替換其內(nèi)部的 HSF 框架的工作,通過將 Dubbo 與 HSF 兩個(gè)框架融為一體,并在此基礎(chǔ)上發(fā)展出適應(yīng)云原生架構(gòu)的 Dubbo 版本。Dubbo 重回阿里巴巴的落地是擁抱社區(qū)、擁抱云原生、擁抱標(biāo)準(zhǔn)化的一次很好的實(shí)踐。
阿里巴巴內(nèi)部 Dubbo 3.0 的落地,對(duì)社區(qū)也是一個(gè)重大利好,這一方面有利于阿里巴巴將其在 HSF 上的豐富服務(wù)治理經(jīng)驗(yàn)回饋輸出到社區(qū),另一方面也將直接推動(dòng) Dubbo 云原生架構(gòu)的快速演進(jìn)。除了阿里巴巴之外,包括斗魚、工商銀行、愛奇藝、斗魚等廠商也都在參與下一代 Dubbo 3.0 的建設(shè)。
下面列出了 Dubbo 3.0 中的三個(gè)重要方向,具體的 Roadmap 將在接下來文章中單獨(dú)說明:
-
下一代 RPC 協(xié)議。新協(xié)議將提供更豐富的如 Stream、Flow Control 等內(nèi)置語義,同時(shí)將具有更好的擴(kuò)展性、網(wǎng)關(guān)的友好性等;
-
基于應(yīng)用粒度的服務(wù)發(fā)現(xiàn)機(jī)制。在兼顧 Dubbo 面向接口的易用性與功能性的基礎(chǔ)上,解決與 Kubernetes Native Service 適配問題,解決大規(guī)模集群下的地址推送性能瓶頸問題;
-
適配云原生基礎(chǔ)設(shè)施的解決方案。這涉及到 Dubbo 服務(wù)與基礎(chǔ)設(shè)施生命周期對(duì)接、Kubernetes Native Service 適配、適應(yīng)基礎(chǔ)設(shè)施調(diào)度的服務(wù)治理規(guī)則、適配 Service Mesh 架構(gòu)的解決方案等;
接下來沿著這三個(gè)方面簡(jiǎn)要展開。
下一代 RPC 協(xié)議
專注在協(xié)議自身來說,下一代的協(xié)議主要聚焦在 HTTP/2、Reactive Stream、Flow Control 等方面:
-
**Reactive Stream:**Reactive Stream 引入 RPC,帶來更豐富的通信語義和 API 編程模型支持,如 Request-Stream、Bi-Stream 等;
-
**HTTP/2:**微服務(wù)云原生場(chǎng)景下,基于 HTTP/2 構(gòu)建的通信協(xié)議具有更好的通用性和穿透性;
-
**Flow Control:**協(xié)議內(nèi)置流控機(jī)制,支持類似 Reqctive Stream 的 Request (n) 流控機(jī)制。
從解決的業(yè)務(wù)場(chǎng)景問題上來說,基于新的協(xié)議 Dubbo 在框架層面要支持智能決策的負(fù)載均衡算法、對(duì) Mesh 和網(wǎng)關(guān)更友好、更容易提供多語言實(shí)現(xiàn)與互通等。
-
**Mesh:**協(xié)議對(duì)穿透 Mesh 更友好,區(qū)分協(xié)議頭 Metadata 與 RPC Payload,方便完成與 Mesh 的協(xié)作,包括流量控制機(jī)制、應(yīng)用層配置協(xié)商等;
-
**協(xié)議通用性:**兼顧通用性與性能,支持協(xié)議能在各種設(shè)備上運(yùn)行;
-
**多語言支持:**如通過支持 Protobuf 提供了更完善的 跨語言服務(wù)定義 與 序列化傳輸?shù)闹С帧?/p>
應(yīng)用級(jí)服務(wù)治理
面向接口一直以來都是 Dubbo 框架的優(yōu)勢(shì)。一方面它的易用性,為開發(fā)者屏蔽了遠(yuǎn)程調(diào)用的存在;另一方面面向接口的地址發(fā)現(xiàn)、服務(wù)治理帶來了更強(qiáng)大的能力,使得整個(gè) Dubbo 治理體系非常強(qiáng)大與靈活。
既然面向接口有如此多的好處,那為什么我們還要探索面向應(yīng)用的服務(wù)治理模式呢?
聽起來似乎有些矛盾。其實(shí)到底是面向接口,還是面向應(yīng)用,只是從不同的角度看 Dubbo。我們所聊的“面向接口 -> 面向應(yīng)用”的改造,主要體現(xiàn)在服務(wù)注冊(cè)、發(fā)現(xiàn)層面:
而我們說的面向應(yīng)用的新模型,主要對(duì)第 2 點(diǎn),即注冊(cè)中心的數(shù)據(jù)組織轉(zhuǎn)變?yōu)?“面向應(yīng)用/實(shí)例” 粒度。這為我們解決兩個(gè)問題:
-
在服務(wù)發(fā)現(xiàn)層面與 Kubernetes Service 等微服務(wù)模型對(duì)齊;
-
服務(wù)發(fā)現(xiàn)的數(shù)據(jù)量將有一個(gè)量級(jí)的下降,從?“接口數(shù) *?實(shí)例數(shù) ”下降到 “應(yīng)用數(shù) * 實(shí)例數(shù)”。
具體可以參見文章《Dubbo 邁出云原生重要一步 - 應(yīng)用級(jí)服務(wù)發(fā)現(xiàn)解析》,本系列文章后續(xù)也會(huì)有對(duì)這部分機(jī)制和實(shí)現(xiàn)的更深度解析。
云原生基礎(chǔ)設(shè)施
云原生帶來了底層基礎(chǔ)設(shè)施,應(yīng)用開發(fā)、部署和運(yùn)維等全方位的變化:
基礎(chǔ)設(shè)施
-
基礎(chǔ)設(shè)施調(diào)度機(jī)制變化,帶來運(yùn)維(生命周期)、服務(wù)治理等方面的變化;
-
服務(wù)發(fā)現(xiàn)能力下沉, Kubernetes 抽象了 Native Service Discovery。
Service Mesh - 云原生微服務(wù)解決方案
-
Mesh 為跨語言、sdk 升級(jí)等提供了解決方案,Dubbo sdk 要與 Mesh 協(xié)作,做到功能、協(xié)議、服務(wù)治理等多方便的適配;
-
Mesh 尚未大規(guī)模鋪開,且其更適合對(duì)流量管控更關(guān)注的應(yīng)用,傳統(tǒng) SDK 的性能優(yōu)勢(shì)仍舊存在,兩者混部遷移場(chǎng)景可能會(huì)長(zhǎng)期存在。
從應(yīng)用場(chǎng)景上,Dubbo 可能的部署環(huán)境包括:
不使用 Kubernetes Native Service,Kubernetes 只作為容器編排調(diào)度設(shè)施,繼續(xù)使用 Dubbo ?自建的服務(wù)注冊(cè)、發(fā)現(xiàn)機(jī)制;
復(fù)用 Kubernetes Native Service,Dubbo 不再關(guān)心服務(wù)注冊(cè),Dubbo Client 負(fù)責(zé)服務(wù)發(fā)現(xiàn)與流量分配;
Dubbo sdk 往 Mesh 遷移,一方面要做到適應(yīng) Mesh 架構(gòu),成為 Mesh 體系下的 RPC 編程和通信方案;另一方面要做到 Dubbo 與 Mesh 架構(gòu)長(zhǎng)期共存,互相打通服務(wù)發(fā)現(xiàn)和治理體系;
Kubernetes 上與云下混合部署的平滑遷移支持,包括服務(wù)發(fā)現(xiàn)的統(tǒng)一與網(wǎng)絡(luò)通信方案的打通。
從 Dubbo 功能劃分上,將著重從以下方面提供對(duì)云原生基礎(chǔ)設(shè)施的支持:
-
生命周期:Dubbo 與 Kubernetes 調(diào)度機(jī)制綁定,保持服務(wù)生命周期與 Pod 容器等生命周期的自動(dòng)對(duì)齊;
-
治理規(guī)則:服務(wù)治理規(guī)則在規(guī)則體、規(guī)則格式方面進(jìn)行優(yōu)化,如規(guī)則體以 YAML 描述、取消過濾規(guī)則對(duì) IP 的直接依賴,定義規(guī)則特有的 CRD 資源等;
-
服務(wù)發(fā)現(xiàn):支持 K8S Native Service 的服務(wù)發(fā)現(xiàn),包括 DNS、API-Server,支持 xDS 的服務(wù)發(fā)現(xiàn);
-
Mesh 架構(gòu)協(xié)作:構(gòu)建下一代的基于 HTTP/2的通信協(xié)議,支持 xDS 的標(biāo)準(zhǔn)化的數(shù)據(jù)下發(fā)。
新一代的 RPC 協(xié)議和應(yīng)用級(jí)服務(wù)發(fā)現(xiàn)模型將會(huì)是這一部分的前置基礎(chǔ)。
總結(jié)與展望
作為系列文章開篇,我們?cè)谶@里對(duì) Dubbo 過去一年的成績(jī)做了簡(jiǎn)要的總結(jié)與回顧,包括 Dubbo 社區(qū)、產(chǎn)品迭代的發(fā)展。接下來我們會(huì)看到更多來自深度 Dubbo 用戶的落地經(jīng)驗(yàn)分享,Dubbo-go 子社區(qū)的發(fā)展故事等。更重要的,我們也對(duì)下一代云原生 Dubbo - Dubbo 3.0 做了展望,后續(xù)關(guān)于 Dubbo 3.0 Roadmap、方案設(shè)計(jì)與進(jìn)展解析等也將在此系列中發(fā)布。
在【阿里巴巴云原生公眾號(hào)】留言說出與 Apache Dubbo 的故事,點(diǎn)贊排名前十的同學(xué)可領(lǐng)取 Dubbo 送出的專屬獎(jiǎng)品杯子一只;另外由 Apache Dubbo PMC @Chickenlj 隨機(jī)抽取一名幸運(yùn)讀者,贈(zèng)送價(jià)值 260 元護(hù)眼燈一臺(tái)。下周三開獎(jiǎng)。
總結(jié)
以上是生活随笔為你收集整理的都已经十岁的 Apache Dubbo,还能再乘风破浪吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里 Midway 正式发布 Serve
- 下一篇: 进击的 Kubernetes 调度系统(