孰優孰劣?Dubbo VS Spring Cloud效能測試大對決!
最近我們試圖從Dubbo遷移到Spring Cloud。為此對二者分別進行了效能測試。為了得出資料量不同的情況下的二者的效能表現,我們分別準備了一個25個屬性pojo物件和一個50個屬性的pojo物件,通過這樣的方式我們也可以間接地瞭解二者在序列化方面的水平。
以下是測試結果:
25個屬性,10W次:
50個屬性,10W次:
分析:
由於Spring Cloud與Dubbo天生使用的協議層面不一樣,前者是HTTP,後者是TCP(使用的是Netty NIO框架,序列化使用的阿里定製版Hessian2),導致兩個框架的效能差距略大。基本上是三比一的差距
另外根據Dubbo官方說法,Dubbo在小資料量的情況下表現卓越,這和我們的測試也是吻合的,在50個屬性的pojo物件下,Dubbo效能確實下降了。
另外Spring Cloud預設的feigh client是使用jdk的urlconnection來做HTTP的請求,考慮這種做法的效能問題,我們嘗試接入了httpclient包來測試,結果發現httpclient更慢,最後我們引入了開源的okhttp包,綜合發現,okhttp和Spring Cloud的feign client結合是效能最高的。
還有就是我們之前也測試過用RestTemplate進行測試,效能要比用Feigh還要好一些。大概能提升百分之十到十五。
雖然Spring Cloud在效能上與Dubbo有天生的劣勢,但考慮到Spring Cloud作為一套專門的微服務框架,再加上RESTful風格的API的趨勢,從綜合的角度,Spring Cloud無疑是你所在的公司未來微服務化程序中不可缺少的選擇之一!
以上測試僅供參考!
測試環境:
1、微服務伺服器:
CPU(s): 12
Free Mem:6G
2、註冊中心伺服器:
開發環境機器。
3、客戶機器:
CPU(s): 2
Free Mem:2G
測試工具:
OneTest
版本資訊:
Dubbo:2.8.4
Spring Cloud:1.4.3.RELEASE