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

jopen 10年前發布 | 40K 次閱讀 Dubbox

        當當網近日開源了 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 倍左右的差距,詳見下文的基準測試報告。

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

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

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

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

  •         支持基于嵌入式 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 框架

        目前開源領域能找到的分布式服務框架也有不少,比較有代表性的包括 推ter 的 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 相關框架和容器的開發。

來自: InfoQ
                    <span id="shareA4" class="fl">                             
                        </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!