噹噹網開源Dubbox

沈理發表於2014-10-22

噹噹網近日開源了Dubbox專案,可為Dubbo服務框架提供多項擴充套件功能,包括REST風格遠端呼叫、Kryo/FST序列化等等。

噹噹網架構部和技術委員會架構師沈理向InfoQ中文站介紹了Dubbox專案,開發背景和主要特點描述如下:

Dubbo是一個被國內很多網際網路公司廣泛使用的開源分散式服務框架,即使從國際視野來看應該也是一個非常全面的SOA基礎框架。作為一個重要的技術研究課題,在噹噹網我們根據自身的需求,為Dubbo實現了一些新的功能,並將其命名為Dubbox(即Dubbo eXtensions)。

主要的新功能包括:

  • 支援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相關框架和容器的開發。

相關文章