Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并将其命名为Dubbox(即Dubbo eXtensions)。Dubbox主要的新功能包括:
一、支持REST风格远程调用(HTTP + JSON/XML)
dubbo支持多种远程调用方式,例如dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议,至少在开源版本没发现对文本序列化的支持)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等等,但缺乏对当今特别流行的REST风格远程调用(文本序列化 + http协议)的支持。
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倍左右的差距。
REST的优点(摘自维基百科):
- 可更高效利用缓存来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好
基于简单的文本格式消息和通用的HTTP协议,使REST具备极广的适用性,几乎所有语言和平台都对它提供支持,同时其学习和使用的门槛也较低。在dubbo中支持REST,可以为当今多数主流的远程调用场景都带来好处:
- 显著简化企业内部的异构系统之间的(跨语言)调用。此处主要针对这种场景:dubbo的系统做服务提供端,其他语言的系统(也包括某些不基于 dubbo的java系统)做服务消费端,两者通过HTTP和文本消息进行通信。即使相比Thrift、ProtoBuf等二进制跨语言调用方 案,REST也有自己独特的优势(详见后面讨论)
- 显著简化对外Open API(开放平台)的开发。既可以用dubbo来开发专门的Open API应用,也可以将原内部使用的dubbo service直接“透明”发布为对外的Open REST API(当然dubbo本身未来最好可以较透明的提供诸如权限控制、频次控制、计费等诸多功能)
- 显著简化手机(平板)APP或者PC桌面客户端开发。类似于2,既可以用dubbo来开发专门针对无线或者桌面的服务器端,也可以将原内部使用的 dubbo service直接“透明”的暴露给手机APP或桌面程序。当然在有些项目中,手机或桌面程序也可以直接访问以上场景2中所述的Open API。
- 显著简化浏览器AJAX应用的开发。类似于2,既可以用dubbo来开发专门的AJAX服务器端,也可以将原内部使用的dubbo service直接“透明”的暴露给浏览器中JavaScript。当然,很多AJAX应用更适合与web框架协同工作,所以直接访问dubbo service在很多web项目中未必是一种非常优雅的架构。
- 为企业内部的dubbo系统之间(即服务提供端和消费端都是基于dubbo的系统)提供一种基于文本的、易读的远程调用方式。
- 一定程度简化dubbo系统对其它异构系统的调用。可以用类似dubbo的简便方式“透明”的调用非dubbo系统提供的REST服务(不管服务提供端是在企业内部还是外部)
需要指出的是, 1~3是dubbo的REST调用最有价值的三种应用场景,并且为dubbo添加REST调用,其最主要到目的也是面向服务的提供端,即开发REST服务来提供给非dubbo的(异构)消费端。归纳起来,所有应用场景如下图所示:
二、支持基于Kryo和FST的Java高效序列化实现
dubbo RPC是dubbo体系中最核心的一种高性能、高吞吐量的远程调用方式,简单的说:
- 长连接:避免了每次调用新建TCP连接,提高了调用的响应速度
- 多路复用:单个TCP连接可交替传输多个请求和响应的消息,降低了连接的等待闲置时间,从而减少了同样并发数下的网络连接数,提高了系统吞吐量。
dubbo RPC主要用于两个dubbo系统之间作远程调用,特别适合高并发、小数据的互联网场景。而序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也 起着至关重要的作用,是我们提升分布式系统性能的最关键因素之一。在dubbo RPC中,同时支持多种序列化方式,例如:
- dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它
- hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式
- json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
- java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。
在通常情况下,这四种主要序列化方式的性能从上到下依次递减。对于dubbo RPC这种追求高性能的远程调用方式来说,实际上只有1、2两种高效序列化方式比较般配,而第1个dubbo序列化由于还不成熟,所以实际只剩下2可用, 所以dubbo RPC默认采用hessian2序列化。但hessian是一个比较老的序列化实现了,而且它是跨语言的,所以不是单独针对java进行优化的。而 dubbo RPC实际上完全是一种Java to Java的远程调用,其实没有必要采用跨语言的序列化方式(当然肯定也不排斥跨语言的序列化)。
最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:
- 专门针对Java语言的:Kryo,FST等等
- 跨语言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等
这些序列化方式的性能多数都显著优于hessian2(甚至包括尚未成熟的dubbo序列化)。有鉴于此,我们为dubbo引入Kryo和FST这 两种高效Java序列化实现,来逐步取代hessian2。其中,Kryo是一种非常成熟的序列化实现,已经在Twitter、Groupon、 Yahoo以及多个著名开源项目(如Hive、Storm)中广泛的使用。而FST是一种较新的序列化实现,目前还缺乏足够多的成熟使用案例,但它还是非 常有前途的。
三、其他新功特性
- 支持基于嵌入式Tomcat的HTTP remoting体系:基于嵌入式tomcat实现dubbo的 HTTP remoting体系(即dubbo-remoting-http),用以逐步取代Dubbo中旧版本的嵌入式Jetty,可以显著的提高REST等的远 程调用性能,并将Servlet API的支持从5升级到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等协议都基于这个HTTP remoting体系)。
- 升级Spring:将dubbo中Spring由x升级到目前最常用的3.x版本,减少项目中版本冲突带来的麻烦。
- 升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。
参考文档:
来自:http://www.biaodianfu.com/dubbox.html
相关推荐
**Dubbox 框架详解及使用实例** Dubbox 是由淘宝开源的一个基于 Java 的分布式服务框架,它是基于阿里巴巴的 Dubbo 进行了扩展和优化。Dubbox 提供了更多的特性和更好的社区支持,使其在微服务架构中广泛应用。本篇...
【标题】"dubbox 源码jar包约束文件管理中心"主要涉及到的是关于DUBBO框架的一个扩展——dubbox以及与之相关的组件和资源。这个标题暗示了我们将要探讨的是一个集成了dubbox源码、jar包、监控工具和配置文件的综合...
Dubbox 是一个基于 Spring 和 Apache Dubbo 的微服务框架,由淘宝开源,旨在提供轻量级、高性能的服务治理方案。2.8.4 版本是 Dubbox 的一个稳定版本,可能包含了一些新特性、优化或者修复了已知的问题。由于在阿里...
【标题】"dubbox + springmvc 2017整合最新版"涉及的主要知识点是分布式服务框架dubbox与Spring MVC的集成应用。dubbox是阿里巴巴开源的一个基于Java的RPC框架,它在dubbo的基础上增加了更多的特性,如REST支持、...
【标题】"已经打包好的dubbox示例"所涉及的知识点主要集中在使用dubbox这一框架构建服务提供者(Provider)和服务消费者(Consumer)的实践中。dubbox是基于Dubbo的扩展版本,它提供了更多的特性,如RESTful支持、...
【Dubbox源码及资源】是一个关于Dubbo的扩展项目,它主要关注的是Dubbo的源代码分析和相关的学习资源。Dubbox是阿里巴巴开源的一款高性能、轻量级的服务框架,基于Java实现,广泛应用于分布式系统中。这个压缩包可能...
Dubbox是基于Spring框架的RPC服务框架,由淘宝开源,它是Dubbo的增强版,提供了更多的功能和更好的社区支持。本篇文章将深入探讨Dubbox的详细配置和实践案例,帮助你理解和掌握如何在项目中有效地使用它。 首先,让...
【标题】"dubbox2.8.4"是一个基于Java的开源框架,它是由当当网开发并维护的一个扩展版的Dubbo服务框架。Dubbo是阿里巴巴贡献的高性能、轻量级的服务治理框架,而dubbox则在其基础上添加了更多的特性与优化,为...
Dubbox是基于Spring和Apache Dubbo的高可扩展性、高性能的RPC框架,它在Dubbo的基础上添加了许多增强功能,如更多的服务发现机制、更丰富的监控指标以及更好的API支持。本教程将详细介绍如何使用Dubbox搭建一个基础...
Dubbox 是一个基于 Spring 和 Dubbo 的微服务框架,由 Alibaba 开源,它在 Dubbo 基础上增加了一些额外的功能和优化。这个“dubbox-master.zip”压缩包包含的是 Dubbox 项目的源码,是2018年07月06日的最新版本。...
Dubbox 是一款基于 Spring 和 Dubbo 的微服务框架,它主要由阿里巴巴开发并维护,用于构建高可用、高性能、易扩展的服务。Dubbox-admin 是 Dubbo 框架中的一个关键组件,它提供了一个可视化的管理界面,方便开发者对...
【标题】"dubbox2.8.4版本的dubbo-admin"是基于Apache Dubbo构建的一个管理控制台,主要用于监控和管理Dubbo服务。Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了服务治理、负载均衡、容错、监控等一系列...
在这个“dubbox2.5.1-2.8.4包集合”中,包含了从Dubbo的2.5.1版本到2.5.4版本的Maven编译包,以及一个特殊的Dubbox2.8.4的Maven编译包。Dubbox是Dubbo的一个分支,由当当网维护,它在原版Dubbo的基础上添加了一些...
【Dubbox2.8.4】是阿里巴巴开源的一款基于Java的RPC框架,它在Apache Dubbo的基础上进行了一些改进和增强,旨在提供更加高效、稳定的服务治理能力。这个压缩包包含了Dubbox的jar包以及关于如何安装和使用Dubbox源码...
Dubbox 是一个基于 Spring MVC 和 Apache Dubbo 的高可扩展性框架,主要用于简化分布式服务开发。这个标题 "dubbox2.8.4(需要自己解压一下)" 暗示我们获得了 Dubbox 的一个特定版本,即 2.8.4,它是一个需要手动...
之前一直用阿里的2.5.3,版本,不过阿里的后来没有人维护了,dubbox的2.8.4版本是当当网的,注意2.8.4版本必须用jkd1.8,否则会报错,具体使用文档请看http://blog.csdn.net/u011282930/article/details/51017820,我...
【标题】"dubbox-admin2.8.4" 是一个基于Dubbo、Zookeeper和Kafka构建的RPC(远程过程调用)架构的管理平台。这个版本的dubbo-admin是一个用于监控和管理Dubbo服务的Web界面,它提供了一个方便的用户界面,帮助...
Dubbox 是 Dubbo 的一个扩展版本,它在 Dubbo 基础上增加了更多的特性,如 REST 支持、Zookeeper 注册中心等。在这个场景中,我们将关注如何在 Dubbox 中添加过滤器功能,这对于服务调用过程中的监控、日志记录、...
【Dubbox部署说明】 Dubbox是Alibaba开源的一款高性能、轻量级的Java RPC框架,它是Dubbo的增强版,包含更多的扩展功能和优化。在本文中,我们将深入探讨Dubbox的部署过程以及如何与Zookeeper配合实现分布式服务。 ...