Dubbo 2.7.0 發佈,分佈式 RPC 服務框架
Dubbo 2.7.0 發佈。Dubbo 是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring 框架無縫集成。
據開源中國對 Dubbo 的項目負責人北緯的採訪Dubbo 重啓維護一年多,現在還活着嗎?,新版本的更新亮點有:
Dubbo 2.7.0 添加了社區呼聲很高的異步化支持、以及註冊中心與配置中心分離這兩個特性。
與 2.6 及以前的版本相比,異步化支持不再侷限於基於 Future 接口的異步,也不再僅僅侷限於只能在客戶端異步。具體來說,Dubbo 2.7.0 版本全面擁抱 JDK8,在客戶端開始支持基於 CompletableFuture 的異步編程範式,在服務端支持基於 AsyncContext 的異步模型。
2.6 及以前的版本,元數據全部存儲在 URL 上,配置信息和註冊信息只能存儲在註冊中心上,註冊中心的容量和擴展成爲瓶頸。這個限制在使用 ZooKeeper 作爲註冊中心的大規模 Dubbo 應用場景下尤爲突出。
在 2.7.0 中,通過對 URL 的改造,將註冊中心拆分成了三個中心,分別是註冊中心、配置中心和元數據中心,三者各司其責,不僅有效地解決了上述容量問題,而且很好地適應了微服務的技術架構,用戶可以開始自由選擇適合自己場景的註冊中心和配置中心。
2.7.0 將內建支持 ZooKeeper、Nacos 和 Apollo 等第三方註冊和配置中心,在後續的版本中,還會進一步提供對 Consul 和 etcd 的支持。另外,通過引入一個全新的元數據中心,將與註冊配置無關的服務信息單獨存儲,除了減輕配置中心與註冊中心的工作壓力之外,還爲將來更豐富的服務治理打下基礎。未來,Dubbo 會基於元數據中心提供服務測試、服務 Mock 以及服務 API 管理等特性。
針對三個中心的分離,Dubbo 還會配套發佈全新設計的 Dubbo Ops 控制檯。
另外,2.7.x 會是 Dubbo 在 Apache 軟件基金會畢業的版本,安裝包包名正式切換到了 org.apache.dubbo,爲了保證向前的兼容性,我們還在這個版本中提供了 com.alibaba.dubbo 的兼容包。
Dubbo 2.7.0 具體更新內容 如下:
(環境要求:需要Java 8及以上版本支持)
New Features
- 服務治理規則增強。
- 更豐富的服務治理規則,新增應用級別條件路由、Tag路由等
- 治理規則與註冊中心解耦,增加對Apollo等第三方專業配置中心的支持,更易於擴展
- 新增應用級別的動態配置規則
- 規則體使用更易讀、易用YAML格式
- 外部化配置。支持讀取託管在遠程的集中式配置中心的dubbo.properties,實現應用配置的集中式管控。
- 更精煉的註冊中心URL,進一步減輕註冊中心存儲和同步壓力,初步實現地址和配置的職責分離。
- 新增服務元數據中心,負責存儲包括服務靜態化配置、服務定義(如方法簽名)等數據,默認提供Zookeeper, Redis支持。此功能也是OPS實現服務測試、Mock等治理能力的基礎。
- 異步編程模式增強(限定於Dubbo協議)
- 原生CompletableFuture簽名接口支持
- 服務端異步支持
- 異步Filter鏈
- 新增Protobuf序列化協議擴展
- 新增ExpiringCache緩存策略擴展
Enhancements / Bugfixes
- 負載均衡策略優化,包括ConsitentHash(#2190) 、LeastActive(#2171)、Random(#2597) 、RoundRobin(#2586) (#2650)
- 升級第三方依賴:默認通信框架爲netty 4、默認ZK客戶端爲Curator、Jetty 9k
- 增加地址讀取時對IPV6的支持(#2079)
- 性能優化,鏈接關閉的情況下使得Consumer快速返回 (#2185)
- 修復Jdk原生類型在kryo中的序列化問題 (#2178)
- 修復Provider端反序列化失敗後,沒有及早通知Consumer端的問題 (#1903)
升級與兼容性
此次版本發佈我們遵循了保持和老版本兼容的原則,尤其是在一些可能會破壞2.7版本與低版本互操作性的問題上,我們增加了一些兼容性代碼,典型如服務治理規則、Package重命名、註冊URL簡化等。
- Package重命名
com.alibaba.dubbo -> org.apache.dubbo
- 註冊URL簡化
- 服務治理規則
- 配置