文档章节

dubbo协议及序列化

请把小熊还给我_m
 请把小熊还给我_m
发布于 02/07 17:17
字数 1343
阅读 275
收藏 0

3 月,跳不动了?>>>

Dubbo是 Alibaba 开源的分布式服务框架远程调用框架,在网络间传输数据,就需要通信协议和序列化。

一、通信协议

通信协议:Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的,默认也是用的dubbo协议。

 dubbo协议

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

总结:

1、dubbo默认采用dubbo协议,dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
2、他不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
配置如下:

<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo”
serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9”
buffer=“8192” accepts=“1000” payload=“8388608” />

3、Dubbo协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接。

<dubbo:protocol name="dubbo" connections="2" />

4、为防止被大量连接撑挂,可在服务提供方限制大接收连接数,以实现服务提供方自我保护

<dubbo:protocol name="dubbo" accepts="1000" />

rmi协议

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

hessian协议

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

总结:
1、Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现。

2、Hessian是Caucho开源的一个RPC框架:http://hessian.caucho.com,其通讯效率高于WebService和Java自带的序列化。

http协议

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

webservice协议

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

二、序列化

序列化是将一个对象变成一个二进制流就是序列化, 反序列化是将二进制流转换成对象。

为什么要序列化?

  • 减小内存空间和网络传输的带宽
  • 分布式的可扩展性
  • 通用性,接口可共用。

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

  1. dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它。
  2. hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的,它是dubbo RPC默认启用的序列化方式。
  3. json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
  4. java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。

© 著作权归作者所有

请把小熊还给我_m
粉丝 22
博文 52
码字总数 69711
作品 0
杭州
私信 提问
加载中

评论(0)

Dubbo 支持哪些序列化协议?

面试题 dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dubbo 的基本工作原理,那是你必...

李红欧巴
2019/04/22
152
0
Apache Dubbo(CVE-2019-17564)反序列化漏洞分析

作者: Evi1hui@ QAX A-TEAM 原文链接:https://mp.weixin.qq.com/s/dpI-MyAXdLm4IR2Y2PqEQ Apache Dubbo是一个分布式框架,致力于提供高性能透明化的RPC远程服务调用方案,以及SOA服务治理方...

奇安信 A-Team
02/25
0
0
Dubbo剖析-Dubbo协议

一、前言 TCP协议栈中,每层模型都有自己的协议报文格式,TCP协议是网络七层模型中的传输层,在TCP上层是应用层,应用层协议常见的有telnet等,Dubbo协议作为建立在TCP协议之上的一种协议,自...

加多
2018/01/04
0
0
dubbo典型协议、传输组件、序列化方式组合性能对比测试

前言 Dubbo作为一个扩展能力极强的分布式服务框架,在实现rpc特性的时候,给传输协议、传输框架和序列化方式提供了多种扩展实现,供开发者根据实际场景进行选择。 1、支持常见的传输协议:R...

杨武兵
2016/06/13
3.8K
6
dubbo 面试18问 JAVA葵花宝典 今天

dubbo 面试18问 dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容...

DemonsI
2019/02/28
80
0

没有更多内容

加载失败,请刷新页面

加载更多

每年营收翻倍的 AfterShip 是如何体系化做新员工培训(下)

AfterShip 自 2012 年成立以来,每年业务都可实现 100% 的复合增长。对于这家公司来说,组建团队是一件更重要的事情,并且尤为重视工程师团队文化的建设,他们推崇团队文化多元化及相互包容性...

爱客科技
16分钟前
10
0
如何在企业内部实现云信私有化

在信息安全愈发重要的今天,企业越来越重视和业务有关的数据,视其为企业的生命线,云信针对这一特点专门构建了一整套私有化方案,并且在多家行业龙头企业内部稳定运行,成为企业内部发展的助...

真正稳定的网易云信
16分钟前
10
0
动态代理的实际应用

原文链接 前言 最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。 简单说就是当某张表的数据发生变化(曾、删、改)时会有一个事件...

crossoverJie
20分钟前
10
0
视频直播技术之如何搭建流媒体服务器?

实时视频直播是这两年非常火的技术形态,已经渗透到教育、在线互娱等各种业务场景中。但要搭建一套实时视频直播系统,并非易事,下面针对直播系统的的搭建做一下说明: 1.1 通常的直播系统的...

图玩智能科技
21分钟前
16
0
SpringTask任务调度详解+SpringBoot整合

1 定时任务的框架 Quartz:整合了Spring SpringTask:轻量 SpringBoot整合SpringTask:两行代码即可搞定 1.1.说说定时任务的应用场景 1. 月底扣话费2. 会员到期3. 生日祝福4. qq好友生日祝...

漫路h
22分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部