Dubbo是一個來自阿里巴巴的開源分佈式服務框架,噹噹根據自身的需求,爲Dubbo實現了一些新的功能,包括REST風格遠程調用、Kryo/FST序列化等等。並將其命名爲Dubbox(即Dubbo eXtensions)。Dubbox主要的新功能包括:html
1、支持REST風格遠程調用(HTTP + JSON/XML)java
dubbo支持多種遠程調用方式,例如dubbo RPC(二進制序列化 + tcp協議)、http invoker(二進制序列化 + http協議,至少在開源版本沒發現對文本序列化的支持)、hessian(二進制序列化 + http協議)、WebServices (文本序列化 + http協議)等等,但缺少對當今特別流行的REST風格遠程調用(文本序列化 + http協議)的支持。git
dubbox基於很是成熟的JBoss RestEasy框架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開發。事實上,這個REST調用也使得Dubbo能夠對當今特別流行的「微服務」架構提供基礎性支持。 另外,REST調用也達到了比較高的性能,在基準測試下,HTTP + JSON與Dubbo 2.x默認的RPC協議(即TCP + Hessian2二進制序列化)之間只有1.5倍左右的差距。github
REST的優勢(摘自維基百科):web
基於簡單的文本格式消息和通用的HTTP協議,使REST具有極廣的適用性,幾乎全部語言和平臺都對它提供支持,同時其學習和使用的門檻也較低。在dubbo中支持REST,能夠爲當今多數主流的遠程調用場景都帶來好處:json
須要指出的是, 1~3是dubbo的REST調用最有價值的三種應用場景,而且爲dubbo添加REST調用,其最主要到目的也是面向服務的提供端,即開發REST服務來提供給非dubbo的(異構)消費端。概括起來,全部應用場景以下圖所示:瀏覽器
2、支持基於Kryo和FST的Java高效序列化實現緩存
dubbo RPC是dubbo體系中最核心的一種高性能、高吞吐量的遠程調用方式,簡單的說:tomcat
dubbo RPC主要用於兩個dubbo系統之間做遠程調用,特別適合高併發、小數據的互聯網場景。而序列化對於遠程調用的響應速度、吞吐量、網絡帶寬消耗等一樣也 起着相當重要的做用,是咱們提高分佈式系統性能的最關鍵因素之一。在dubbo RPC中,同時支持多種序列化方式,例如:服務器
在一般狀況下,這四種主要序列化方式的性能從上到下依次遞減。對於dubbo RPC這種追求高性能的遠程調用方式來講,實際上只有一、2兩種高效序列化方式比較般配,而第1個dubbo序列化因爲還不成熟,因此實際只剩下2可用, 因此dubbo RPC默認採用hessian2序列化。但hessian是一個比較老的序列化實現了,並且它是跨語言的,因此不是單獨針對java進行優化的。而 dubbo RPC實際上徹底是一種Java to Java的遠程調用,其實沒有必要採用跨語言的序列化方式(固然確定也不排斥跨語言的序列化)。
最近幾年,各類新的高效序列化方式層出不窮,不斷刷新序列化性能的上限,最典型的包括:
這些序列化方式的性能多數都顯著優於hessian2(甚至包括還沒有成熟的dubbo序列化)。有鑑於此,咱們爲dubbo引入Kryo和FST這 兩種高效Java序列化實現,來逐步取代hessian2。其中,Kryo是一種很是成熟的序列化實現,已經在Twitter、Groupon、 Yahoo以及多個著名開源項目(如Hive、Storm)中普遍的使用。而FST是一種較新的序列化實現,目前還缺少足夠多的成熟使用案例,但它仍是非 常有前途的。
3、其餘新功特性
參考文檔:
來自:http://www.biaodianfu.com/dubbox.html