天天看點

Dubbo與SpringCloud全方位對比(6大優劣勢比較)

作者:mikechen的網際網路架構
Dubbo與SpringCloud全方位對比(6大優劣勢比較)

在微服務架構中,分布式通信、分布式事務、分布式鎖等問題是亟待解決的幾個重要問題。

Spring Cloud是一套完整的微服務解決方案,基于 Spring Boot 架構。确切的說,Spring Cloud是一個大容器(而不是一個架構),它可以将通過內建一些好的微服務架構,進而簡化開發者的代碼量。

Dubbo 是阿裡開源的分布式通信架構,專注于通信服務治理,類似于Spring Cloud中 Ribbon、 Hystrix、 Feign等核心元件的功能。

下面,我們着重來聊下這兩種處理方式有何不同@mikechen

01 協定處理

1)Spring Cloud更加優雅簡單

Feign使用Http進行傳輸。

Feign 內建了Ribbon,并且嵌入了Spring cloud全家桶 ,通過簡單配置 ,就能在分布式裡面實作服務間的調用,類似于Bean 調用。

2)Dubbo方式更靈活

Dubbo協定可選,大部分情況使用Dubbo傳輸協定,也可以使用http協定。

從協定層選擇看,Dubbo是配置化的,更加靈活。

Dubbo 協定更适合小資料高并發場景。

02 性能方面

1)Spring Cloud性能調優

Feign 在高并發場景下,通常需要進行如下性能優化,有明顯瓶頸,需要改造。

· 調整服務容器到 UnderTow ,在負載大的情況下Undertow 的性能有提高;

· 曾有同學表示将HTTPURLConnection 改成 Httpclient /Okhttp,這樣可以優化性能,其實單次調用性能Httpclient差很多,HttpClient 因為封裝了很多友善開發者處理的方法,性能比HTTPURLConnection差,改進同時Httpclient 需要設定複用連接配接池,效果可見一般;

· 開啟Gzip;

· Feign中HttpMessageConverters 預設使用jackson2方式進行序列化和反序列化,可以将其改造為ProtoBuf,降低Cpu 損耗并且響應時間也降低。

2)Dubbo性能調優

主要是配置而無需改造。

03 負載均衡

1)Ribbon 的負載均衡政策

· 随機;

· 規則輪詢;

· 空閑政策;

· 響應時間政策。

Feign預設使用Ribbon作為負載均衡的元件,Ribbon需要進行全局配置,個性化配置比較麻煩。

2)Dubbo 的負載均衡政策

· 随機;

· 權重輪詢;

· 最少活躍調用數;

· 一緻性Hash政策。

Dubbo 可以使用路由政策,然後再進行負載均衡。

04 容錯機制

Spring cloud 的 Hystix 提供了服務降級,服務熔斷,依賴隔離,監控(Hystrix Dashboard)等功能。

Dubbo與SpringCloud全方位對比(6大優劣勢比較)

Dubbo 提供了一整套 FailOver、FailFast、Failsafe、FailBack、Aviailable、Broadcast、Forking 政策,以及Mock。

Dubbo與SpringCloud全方位對比(6大優劣勢比較)

05 路由、流量排程、ABtest

1)Ribbon需自己實作,應用不靈活

Ribbon主要通過擴充 AbstractLoadBalancerRule負載均衡的方法來實作,在負載均衡的部分還要進行改造更新。

2)Dubbo更加靈活友善

Dubbo通過界面化、校本化配置路由規則,可以實作灰階釋出、動态流量排程、容量計算等,方案成熟。

另外,Dubbo 還支援多版本調用。

06 總結

正如Dubbo的介紹,業務發展影響着架構的選型,當服務數量不是很大時,使用普通的分布式RPC架構即可,當服務數量增長到一定資料,需要進行服務治理時,就需要考慮使用流式計算架構。

Dubbo與SpringCloud全方位對比(6大優劣勢比較)

Dubbo可以友善的做更精細化的流量排程,服務結構治理的方案成熟,适合生産上使用,雖然Dubbo是塵封後重新開啟,但這并不影響其技術價值。

更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:

阿裡架構師進階從0到1全部合集(建議收藏)

Dubbo與SpringCloud全方位對比(6大優劣勢比較)

繼續閱讀