当当网开源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相关框架和容器的开发。

相关文章
相关标签/搜索