《Apache Dubbo微服务开发从入门到精通》——通信协议—— 三、 Dubbo2协议(上) https://developer.aliyun.com/article/1224599
2. 使用场景
适合大并发小数据量的服务调用,服务消费者远大于服务提供者的情景。
3. 使用方式
1) 配置协议
2) 设置默认协议
3) 设置某个服务的协议
4) 多端口
5) 配置协议选项
6) 多连接配置
Dubbo协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接。
• 或表示该服务使用JVM共享长连接。缺省
• 或表示该服务使用独立长连接。
• 或表示该服务使用独立两条长连接。
为防止被大量连接撑挂,可在服务提供方限制大接收连接数,以实现服务提供方自我保护。
4. 常见问题
问:为什么要消费者比提供者个数多?
答:因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问题。
《Apache Dubbo微服务开发从入门到精通》——通信协议—— 三、 Dubbo2协议(下) https://developer.aliyun.com/article/1224595