dubbo协议和序列化

Dubbo VS. HTTP

RPC

长连接,这样避免了多次重复创建TCP连接的开销,传输效率较高,可定制化路由,适用于内部系统互联

HTTP

http短连接,协议标准化且易读,容易对接外部系统
HTTP因为协议的特性,会有一系列的HTTP header,这些内容往往会占用几K的数据,访问量特别巨大的时候,这些无关的数据其实也是一种负担。而使用dubboRPC,协议可以自定义,这些无关数据都可以省掉的

协议

dubbo协议

缺省协议
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
Dubbo 协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接

  • <dubbo:service connections="0"> 或 <dubbo:reference connections="0"> 表示该服务使用 JVM 共享长连接。缺省
  • <dubbo:service connections="1"> 或 <dubbo:reference connections="1"> 表示该服务使用独立长连接
  • <dubbo:service connections="2"> 或<dubbo:reference connections="2"> 表示该服务使用独立两条长连接

rmi协议

Java标准的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:TCP
传输方式:同步传输
序列化:Java标准二进制序列化
适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
适用场景:常规远程服务方法调用,与原生RMI服务互操作
RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式

hessian协议

基于Hessian的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:表单序列化
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
适用场景:需同时给应用程序和浏览器JS使用的服务。
1、Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现

http协议

基于http表单的远程调用协议
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:表单序列化
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
适用场景:需同时给应用程序和浏览器JS使用的服务。

webservice协议

基于WebService的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:SOAP文本序列化
适用场景:系统集成,跨语言调用

序列化

Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。

  1. dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它
  2. hessian2序列化(默认):hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的
  3. json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
  4. java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。
  5. kryo和fst序列化
    即使不注册任何类,Kryo和FST的性能依然普遍优于hessian和dubbo序列化
    ps: 官网有提到注册optimizer,但是我尝试了在服务端进行注册,消费端调用会报错
<dubbo:protocol name="dubbo" serialization="kryo"/>
<dubbo:protocol name="dubbo" serialization="fst"/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • dubbo.xsd 文件说明 当我们要使用Dubbo进行 配置时,需要像下面那样引入dubbo.xsd这个文件. ...
    Mis_Gtw阅读 1,148评论 0 1
  • Dubbo是 Alibaba 开源的分布式服务框架远程调用框架,在网络间传输数据,就需要通信协议和序列化。 一 通...
    holmes000阅读 1,517评论 0 1
  • 目录 1 应用架构演变 2 RPC 3 Dubbo概述 4 Dubbo配置 5 Dubbo协议 6 高...
    小小千千阅读 705评论 0 0
  • Dubbo 核心组件 层次作用Service该层与业务逻辑相关,根据 provider 和 consumer 的业...
    Q南南南Q阅读 607评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 10,753评论 0 11

友情链接更多精彩内容