噹噹網開源Dubbox,擴展Dubbo服務框架支持REST風格遠程調用

噹噹網近日開源了Dubbox項目,可爲Dubbo服務框架提供多項擴展功能,包括REST風格遠程調用、Kryo/FST序列化等等。git

噹噹網架構部和技術委員會架構師沈理向InfoQ中文站介紹了Dubbox項目,開發背景和主要特色描述以下:github

Dubbo是一個被國內不少互聯網公司普遍使用的開源分佈式服務框架,即便從國際視野來看應該也是一個很是全面的SOA基礎框架。做爲一個重要的技術研究課題,在噹噹網咱們根據自身的需求,爲Dubbo實現了一些新的功能,並將其命名爲Dubbox(即Dubbo eXtensions)。apache

主要的新功能包括:tomcat

  • 支持REST風格遠程調用(HTTP + JSON/XML):基於很是成熟的JBoss RestEasy框架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開發。事實上,這個REST調用也使得Dubbo能夠對當今特別流行的「微服務」架構提供基礎性支持。 另外,REST調用也達到了比較高的性能,在基準測試下,HTTP + JSON與Dubbo 2.x默認的RPC協議(即TCP + Hessian2二進制序列化)之間只有1.5倍左右的差距,詳見下文的基準測試報告。

  • 支持基於Kryo和FST的Java高效序列化實現:基於當今比較知名的KryoFST高性能序列化庫,爲Dubbo 默認的RPC協議添加新的序列化實現,並優化調整了其序列化體系,比較顯著的提升了Dubbo RPC的性能,詳見下圖和文檔中的基準測試報告。

  • 支持基於嵌入式Tomcat的HTTP remoting體系:基於嵌入式tomcat實現dubbo的 HTTP remoting體系(即dubbo-remoting-http),用以逐步取代Dubbo中舊版本的嵌入式Jetty,能夠顯著的提升REST等的遠 程調用性能,並將Servlet API的支持從2.5升級到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等協議都基於這個HTTP remoting體系)。架構

  • 升級Spring:將dubbo中Spring由2.x升級到目前最經常使用的3.x版本,減小項目中版本衝突帶來的麻煩。框架

  • 升級ZooKeeper客戶端:將dubbo中的zookeeper客戶端升級到最新的版本,以修正老版本中包含的bug。分佈式

上面不少功能已在噹噹網內部穩定的使用,如今開源出來,供你們參考和指正。也但願感興趣的朋友也來爲Dubbo貢獻更多的改進。微服務

注:dubbox和dubbo 2.x是兼容的,沒有改變dubbo的任何已有的功能和配置方式(除了升級了Spring之類的版本)。另外,dubbox也嚴格遵循了Apache 2.0許可證的要求。性能

附:分佈式服務框架與RPC框架

目前開源領域能找到的分佈式服務框架也有很多,比較有表明性的包括Twitter的Finagle(基於Scala語言),Flipkart(印度最大的B2C網站)的Phantom(文檔較少),Apache的Tuscany(有點陳舊,並且不是很適合互聯網公司)等等,其實國內也有少數公司提供了開源Java服務框架,但dubbo在其功能完善性、架構優雅性、使用簡便性等方面依然有其相對獨特的優點,儘管dubbo絕大部分的開發都是2012年之前完成的。測試

另外,業界的開源RPC框架更是數量衆多,難以計數,可是,通常的RPC框架和咱們討論的分佈式服務框架仍是具備至關大的距離,好比在遠程調用的多協議、多序列化支持,完善的服務治理等等方面都有較多的缺失。也正是因爲這種缺失,著名的Apache Thrift等框架在這裏也可歸爲RPC框架,而主要構建在Thrift之上的Finagle、Phantom等框架更接近於完整的分佈式服務框架(固然,Dubbo其實也支持Thrift,只是還不太完善)。

有關沈理

沈理,目前在噹噹網的架構部和技術委員會擔任架構師,主要負責噹噹網的SOA實施(即服務化)以及分佈式服務框架的開發。之前也有在BEA、Oracle、Redhat等外企的長期工做經歷,從事過多個不一樣SOA相關框架和容器的開發。

相關文章
相關標籤/搜索