协议

dubbo

rmi

hessian

http

webservice

连接个数

单一连接

多连接

多连接

多连接

多连接

连接方式

长连接

短连接

短连接

短连接

短连借

传输协议

tcp

tcp

http

http

http

传输方式

nio异步

同步传输

同步传输

同步传输

同步传输

序列化

hessian二进制序列化

java标准二进制序列化

hessian二进制序列化

表单序列化

soap文本序列化

使用范围

传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字符串

传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件

传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件

传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件

适用场景

常规远程服务方法调用

常规远程服务方法调用,与原生RMI服务互操作

页面传输,文件传输,或与原生hessian服务互操作


 

需同时给应用程序和浏览器 JS 使用的服务

系统集成,跨语言调用

dubbo 协议的相关问题:

常见问题

为什么要消费者比提供者个数多?

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

为什么不能传大包?

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

为什么采用异步单一长连接?

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

参考链接:

dubbo 协议 | Apache Dubbo