自去年 12 月開始,Dubbo 3.0 便已正式進入開發階段,並備受社區和廣大 Dubbo 用戶的關注,本文將為您詳細解讀 3.0 預覽版的新特性和新功能。
下面先解答一下兩個有意思的與 Dubbo 相關的疑問。
為什麼 Dubbo 一開源就是 2.0 版本?之前是否存在 1.0 版本?
筆者曾做過 Dubbo 協議的適配兼容,Dubbo 確實存在過 1.x 版本,而且從協議設計和模型設計上都與 2.0 的開源版本協議是完全不一樣的。下圖是關於 Dubbo 的發展路徑:
阿里內部正在使用 Dubbo 開源版本嗎?
是的,非常確定,當前開源版本的 Dubbo 在阿里巴巴被廣泛使用,而阿里的電商核心部門是用的 HSF2.2 版本,這個版本是兼容了 Dubbo 使用方式和 Remoting 協議。當然,我們現在正在做 HSF2.2 的升級,直接依賴開源版本的 Dubbo 來做內核的統一。所以,Dubbo 是得到大規模線上系統驗證的分布式服務框架,這一點毋容置疑。
Dubbo 3.0 預覽版的要點
Dubbo 3.0 在設計和功能上的新增支持和改進,主要是以下四方面:
Dubbo 內核之 Filter 鏈的異步化
這裡要指出的是,3.0 中規劃的異步去阻塞和 2.7 中提供的異步是兩個層面的特性。2.7 中的異步是建立在傳統 RPC 中 request – response 會話模型上的,而 3.0 中的異步將會從通訊協議層面由下向上構建,關注的是跨進程、全鏈路的異步問題。通過底層協議開始支持 streaming 方式,不單單可以支持多種會話模型,還可以在協議層面開始支持反壓、限流等特性,使得整個分布式體系更具有彈性。綜上所述,2.7 關注的異步更局限在點對點的異步(一個 consumer 調用一個 provider),3.0 關注的異步化,寬度上則關注整個調用鏈上的異步,高度上則向上又可以包裝成 Rx 的編程模型。有趣的是,Spring 5.0 發布了對 Flux 的支持,隨後開始解決跨進程的異步問題。
功能方面是 reactive(響應式)支持
最近幾年, reactive programming這個詞語的熱度迅速提升,Wikipedia 上的 reactive programming 解釋是 reactive programming is a programming paradigm oriented around data flows and the propagation of change. Dubbo3.0會實現Reactive Stream 的 rx 接口,從而能讓用戶享受到RP帶來的響應性提升,甚至面向 RP 的架構升級。當然,我們希望 reactive 不單單能夠帶來事件(event)驅動的應用集成方式的升級,也希望在 Load Balance(選擇最優的服務節點),fault tolerance(限流降級時最好做到自適應)等方面發揮其積極價值。
雲原生/ ServiceMesh 方向的探索
我們定下的策略是進入 Envoy 社區來實現 Dubbo 融入 mesh 的理念思想,目前 Dubbo 協議已經被 Envoy 支持。當然,Dubbo Mesh 離真正可用還有很長一段距離,其在選址、負載均衡和服務治理方面的工作需要繼續在數據面建設,另外,控制面板的建設在社區也沒有提上日程。
融合併支持阿里內部
Dubbo 3.0 定下了內外融合的策略,也就是說 3.0 的核心最終會在阿里巴巴的生產系統中部署,相信通過大流量、大規模的考驗,Dubbo 用戶可以獲得一個性能、穩定、服務治理實踐各方面俱佳的核心,用戶在生產系統中採用 3.0 也會更加放心。這一點也是 Dubbo 3.0 最重要的使命。
當前 Dubbo 3.0 將提供具備當代特性(如響應性編程)的相關支持,同時汲取阿里內部 HSF 的設計長處來實現兩者的融合,當前預覽版的很多地方還在探討中,希望大家能夠積極反饋,我們都會虛心學習並參考。
Dubbo 3.0 sample @GitHub:
https://github.com/apache/incubator-dubbo-samples/tree/3.x
本文作者:
覃柳傑(花名:未宇)
Github ID: qinliujie,阿里巴巴中間件開發,Dubbo 開源項目 PMC,參與 HSF2.2和 Dubbo3.0 的設計和開發。
呂仁琦(花名:空冥)
Github ID: jefflv,阿里巴巴中間件開發,Dubbo 開源項目 commiter,參與了內部 HSF2.0 的設計和開發。
劉軍(花名:陸龜)
阿里巴巴中間件高級開發工程師,Apache Dubbo (Incubating)PPMC,深度參與 Dubbo 項目開發,主要貢獻者之一。
謝育能(花名:思邪)
阿里巴巴中間件開發,Dubbo 3.0 開源項目的響應式模塊的負責人,參與了內部 HSF2.2 的設計和開發。