`
m635674608
  • 浏览: 4934073 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

dubbo 协议分析,Hessian序列化分析

 
阅读更多

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

 

 

缺省协议,使用基于netty3.2.2+hessian3.2.1交互。

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

为什么要消费者比提供者个数多:
因dubbo协议采用单一长连接,
假设网络为千兆网卡(1024Mbit=128MByte),
根据测试经验数据每条连接最多只能压满7MByte(不同的环境可能不一样,供参考),
理论上1个服务提供者需要20个服务消费者才能压满网卡。

为什么不能传大包:
因dubbo协议采用单一长连接,
如果每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不一样,供参考),
单个服务提供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。
单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。
如果能接受,可以考虑使用,否则网络将成为瓶颈。

为什么采用异步单一长连接:
因为服务的现状大都是服务提供者少,通常只有几台机器,
而服务的消费者多,可能整个网站都在访问该服务,
比如Morgan的提供者只有6台提供者,却有上百台消费者,每天有1.5亿次调用,
如果采用常规的hessian服务,服务提供者很容易就被压跨,
通过单一连接,保证单一消费者不会压死提供者,
长连接,减少连接握手验证等,
并使用异步IO,复用线程池,防止C10K问题。

(1) 约束:

    参数及返回值需实现Serializable接口
    参数及返回值需有无参构造函数(可以是private的)或者有参构造所有函数允许传入null值。
    参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。
    Hessian序列化,只传成员属性值和值的类型,不传方法或静态变量,兼容情况:(由吴亚军提供)
    数据通讯     情况     结果
    A->B     类A多一种 属性(或者说类B少一种 属性)     不抛异常,A多的那 个属性的值,B没有, 其他正常
    A->B     枚举A多一种 枚举(或者说B少一种 枚举),A使用多 出来的枚举进行传输     抛异常
    A->B     枚举A多一种 枚举(或者说B少一种 枚举),A不使用 多出来的枚举进行传输     不抛异常,B正常接 收数据
    A->B     A和B的属性 名相同,但类型不相同     抛异常
    A->B     serialId 不相同     正常传输

    总结:会抛异常的情况:枚 举值一边多一种,一边少一种,正好使用了差别的那种,或者属性名相同,类型不同

接口增加方法,对客户端无影响,如果该方法不是客户端需要的,客户端不需要重新部署;
输入参数和结果集中增加属性,对客户端无影响,如果客户端并不需要新属性,不用重新
部署;
输入参数和结果集属性名变化,对客户端序列化无影响,但是如果客户端不重新部署,不管输入还是输

 

 

http://my.oschina.net/91jason/blog/377674

分享到:
评论

相关推荐

    Dubbo 序列化协议 5 连问,你接得住不.PDF

    默认就是⾛ dubbo 协议,单⼀⻓连接,进⾏的是 NIO 异步通信,基于 hessian 作为序列化协议。使⽤的场景是:传输数据量⼩ (每次请求在 100kb 以内),但是并发量很⾼。 为了要⽀持⾼并发场景,⼀般是服务提供者就⼏...

    dubbo-exp:Dubbo反序列化一键快速攻击测试工具,支持dubbo协议和http协议,支持hessian反序列化和java原生反序列化

    a --args gadget入参,多个参数使用多次该命令传入,例-a -a Calc-p --protocol [dubbo|http] 通讯协议名称,默认缺省dubbo-s --serialization [hessian|java] 序列化类型,默认缺省hessian-t --target 目标,例:...

    Dubbo服务框架面试题及答案.pdf

    传输协议 TCP,异步,Hessian 序列化;  rmi: 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数 据包大小混合,消费者...

    Dubbo简介.docx

    传输协议 TCP,异步, Hessian 序列化; . rmi : 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数 据包大小混合,消费者和...

    dubbo技术介绍

    用户指南 入门 背景 需求 架构 用法 快速启动 服务提供者 ...序列化 异常 调用 推荐用法 容量规划 基准测试工具包 性能测试报告 测试说明 测试环境 测试目的 测试脚本 测试结果 测试分析 测试覆盖率报告

    服务端各类面试题合集.pdf

    默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化 1.3 Dubbo超时时间怎样设置? Dubbo超时时间设置有两种方式: 服务提供者端设置超时时间,在Dubbo的用户文档中,推荐如果能在服务端多配置就尽量多配置...

    dubbo-php-framework:适用于Apache Dubbo的php

    使用zookeeper进行服务注册发现,并使用fastjson和hessian进行序列化。 介绍 php provider在多个进程中运行。 工作进程用于处理特定的业务,管理进程控制工作进程的生命周期,主进程处理网络IO。 代理监视注册表中...

    Java面试 Java分布式知识点 Java微服务知识点 面试知识点

    Dubbo序列化 10 服务提供者能实现失效踢出是什么原理? 10 服务上线怎么不影响旧版本 10 如何解决服务调用链过长的问题? 10 dubbo核心配置 10 同一个服务多个注册的情况下可以直连某一个服务吗? 11 服务注册与发现...

    backend:Java数据库

    Java QPS、RT、CPU 性能监控 阿里云OSS:文件存储系统(避免把文件存到数据库里、占用IO资源) ...序列化协议,hessian序列化。 同类开源的rpc框架:dubbo或thrift等 osgi:用于进行类库隔离的组件,允

    Thunder::high_voltage: Nepxion Thunder is a distribution RPC framework based on Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper + Redis + Spring Web MVC + Spring Boot + Docker 多协议、多组件、多序列化的分布式RPC调用框架

    Nepxion Thunder是一款基于Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper(Curator Framework) + Redis + FST + Spring + Spring Web MVC + Spring Boot + Docker分布式RPC调用框架。架构思想主要是来自...

    dubbo-go服务框架-其他

    3、序列化协议 JsonRPC V2 Hessian V2 json for grpc 4、协议 Dubbo Jsonrpc2.0 gRPC RESTful 5、路由器 Condition router Health check router 6、注册中心 ZooKeeper etcd v3 nacos consul k8s 7、动态配置中心与...

    技术选型分享:JAVA中几种常用的RPC框架介绍.docx

    RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分...其他的框架结构也类似,区别在于对象的序列化方法,传输对象的通讯协议,以及注册中心的管理与failover设计(利用zookeeper)。

    2阶段提交分布式事务中间件,一致性分布式事务框架

    一致性分布式事务框架。支持所有弹簧版本,无缝集成。提供对 springcloud dubbo motan RPC 框架的支持。...事务日志序列化支持:java hessian kryo protostuff。SPI扩展:用户可以自定义序列化和事务日志的存储

    myth分布式开发框架-其他

    事务日志序列化支持:Java Hessian Kryo Protostuff Spi扩展:用户可以自定义序列化和事务日志的存储 先决条件: 您必须使用jdk1.8 + 您必须是spring框架的用户 您必须使用消息传递中间件 您必须使用dubbo,motan和...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成

    另外,REST调用也达到了比较高的性能,在基准测试下,HTTP + JSON默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距,详见下文的基准测试报告。 ORM/Redis/Service仓库 RepositoryORM仓库,...

    java开源包8

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包3

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java8源码-tcc:TCC分布式事务框架

    支持事务参与者列表序列化 :hessian,kryo。 内置经典的分布式事务场景demo工程,并有swagger-ui可视化界面。 内置本地事务状态机,实现confirm和cancel操作不会被多次执行,放宽了幂等性要求。

    java开源包1

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics