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