Dubbo3 基準(zhǔn)測試

2022-04-24 16:29 更新

1 Benchmark 結(jié)論

對比 2.x 版本,Dubbo3 版本

  • 服務(wù)發(fā)現(xiàn)資源利用率顯著提升。對比接口級服務(wù)發(fā)現(xiàn),單機(jī)常駐內(nèi)存下降 50%,地址變更期 GC 消耗下降一個數(shù)量級 (百次 -> 十次)對比應(yīng)用級服務(wù)發(fā)現(xiàn),單機(jī)常駐內(nèi)存下降 75%,GC 次數(shù)趨零
  • Dubbo 協(xié)議性能持平,Triple 協(xié)議在網(wǎng)關(guān)、Stream吞吐量方面更具優(yōu)勢。Dubbo協(xié)議 (3.0 vs 2.x),3.0 實(shí)現(xiàn)較 2.x 總體 qps rt 持平,略有提升Triple協(xié)議 vs Dubbo協(xié)議,直連調(diào)用場景 Triple 性能并無優(yōu)勢,其優(yōu)勢在網(wǎng)關(guān)、Stream調(diào)用場景。

以下是詳細(xì)壓測過程與數(shù)據(jù)

2 應(yīng)用級服務(wù)發(fā)現(xiàn)(地址推送鏈路)

此部分壓測數(shù)據(jù)是由工商銀行 Dubbo 團(tuán)隊基于內(nèi)部生產(chǎn)數(shù)據(jù)給出,壓測過程模擬了“生產(chǎn)環(huán)境地址+zookeeper”的服務(wù)發(fā)現(xiàn)架構(gòu)。

2.1 環(huán)境

描述
壓測數(shù)據(jù) 提供者
500運(yùn)行實(shí)例??8interface??5protocol,即每個提供者向注冊中心注冊40個URL,總計20000個URL,每個URL字符長度約1k。

注冊中心
2個獨(dú)立zookeeper注冊中心,服務(wù)提供者消費(fèi)者采用并行配置。

消費(fèi)者
配置1c2g,xmx=768,開啟GC,從2個注冊中心訂閱,每5秒調(diào)用一次服務(wù)。運(yùn)行20小時。
壓測環(huán)境 Java version “1.8.0”
Java(TM) SE Runtime Enviroment (build pxa6480sr3fp12-20160919_01(SR3 FP12))
IBM J9 VM (Build 2.8, JRE 1.8.0 Linux amd64-64 Compressed References 20160915_318796, JIT enabled, AOT enabled)

2.2 數(shù)據(jù)分析

http://imgs/v3/performance/registry-mem.svg

圖一 服務(wù)發(fā)現(xiàn)模型內(nèi)存占用變化

  • Dubbo3 接口級服務(wù)發(fā)現(xiàn)模型,常駐內(nèi)存較 2.x 版本下降約 50%
  • Dubbo3 應(yīng)用級服務(wù)發(fā)現(xiàn)模型,常駐內(nèi)存較 2.x 版本下降約 75%

http://imgs/v3/performance/registry-gc.svg

圖二 服務(wù)發(fā)現(xiàn)模型 GC 變化

  • Dubbo3 接口級服務(wù)發(fā)現(xiàn)模型,YGC 次數(shù) 2.x 版本大幅下降,從數(shù)百次下降到十幾次
  • Dubbo3 應(yīng)用級服務(wù)發(fā)現(xiàn)模型,F(xiàn)GC 次數(shù) 2.x 版本大幅下降,從數(shù)百次下降到零次

3 RPC 協(xié)議(遠(yuǎn)程調(diào)用鏈路)

  • Dubbo3 的 _Dubbo協(xié)議 _實(shí)現(xiàn)與 Dubbo2 版本在性能上基本持平。
  • 由于 Triple協(xié)議 本身是基于 HTTP/2 構(gòu)建,因此在單條鏈路上的 RPC 調(diào)用并未比基于 TCP 的 Dubbo2 有提升,反而在某些調(diào)用場景出現(xiàn)一定下降。但 _Triple協(xié)議 _更大的優(yōu)勢在于網(wǎng)關(guān)穿透性、通用性,以及 Stream 通信模型帶來的總體吞吐量提升。
  • Triple 預(yù)期在網(wǎng)關(guān)代理場景下一定會有更好的性能表現(xiàn),鑒于當(dāng)前壓測環(huán)境,本輪 benchmark 暫未提供。

3.1 環(huán)境

描述
機(jī)器 4C8G Linux JDK 1.8(Provider)4C8G Linux JDK 1.8 (Consumer)
壓測用例 RPC 方法類型包括:無參無返回值、普通pojo返回值、pojo列表返回值

2.7 版本 Dubbo 協(xié)議(Hessian2 序列化)
3.0 版本 Dubbo 協(xié)議(Hessian2 序列化)
3.0 版本 Dubbo 協(xié)議(Protobuf 序列化)
3.0 版本 Triple 協(xié)議(Protobuf 序列化)
3.0 版本 Triple 協(xié)議(Protobuf 套 Hessian2 序列化)
壓測方法 單鏈接場景下,消費(fèi)端起 32 并發(fā)線程(當(dāng)前機(jī)器配置 qps rt 較均衡的并發(fā)數(shù)),持續(xù)壓后采集壓測數(shù)據(jù)
壓測數(shù)據(jù)通過 https://github.com/apache/dubbo-benchmark 得出


3.2 數(shù)據(jù)分析

Dubbo + Hessian2
2.7
Dubbo + Hessian2
3.0
Dubbo + Protobuf
3.0
Triple + Protobuf
3.0
Triple + Protobuf(Hessian)
3.0
無參方法 30333 ops/s
2.5ms P99
30414 ops/s
2.4ms P99
24123 ops/s
3.2ms P99
7016 ops/s
8.7ms P99
6635 ops/s
9.1ms P99
pojo返回值 8984 ops/s
6.1 ms P99
12279 ops/s
5.7 ms P99
21479 ops/s
3.0 ms P99
6255 ops/s
8.9 ms P99
6491 ops/s
10 ms P99
pojo列表返回值 1916 ops/s
34 ms P99
2037 ops/s
34 ms P99
12722 ops/s
7.7 ms P99
6920 ops/s
9.6 ms P99
2833 ops/s
27 ms P99

3.2.1 Dubbo 協(xié)議不同版本實(shí)現(xiàn)對比

http://imgs/v3/performance/rpc-dubbo.svg

圖三 Dubbo協(xié)議在不同版本的實(shí)現(xiàn)對比

  • 就 Dubbo RPC + Hessian 的默認(rèn)組合來說,Dubbo3 與 Dubbo2 在性能上在不同調(diào)用場景下基本持平

3.2.2 Dubbo協(xié)議 vs Triple協(xié)議

http://imgs/v3/performance/rpc-triple.svg

圖四 Triple vs Dubbo

  • 單純看 Consumer <-> Provider 的點(diǎn)對點(diǎn)調(diào)用,可以看出 Triple 協(xié)議本身并不占優(yōu)勢,同樣使用 Protobuf 序列化方式,Dubbo RPC 協(xié)議總體性能還是要優(yōu)于 Triple。
  • Triple 實(shí)現(xiàn)在 3.0 版本中將會得到持續(xù)優(yōu)化,但不能完全改變在某些場景下“基于 HTTP/2 的 RPC 協(xié)議”對比“基于 TCP 的 RPC 協(xié)議”處于劣勢的局面

3.2.3 補(bǔ)充網(wǎng)關(guān)場景

TBD

3.3.4 模擬 Stream 通信場景的吞吐量提升 

TBD


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號