通信协议
一、 Dubbo通信协议设计概述
Dubbo框架提供了自定义的高性能RPC通信协议:基于HTTP/2的Triple协议和基于TCP的Dubbo2协议。除此之外,Dubbo框架支持任意第三方通信协议,如官方支持的gRPC、Thrift、REST、JsonRPC、Hessian2等,更多协议可以通过自定义扩展实现。这对于微服务实践中经常要处理的多协议通信场景非常有用。
Dubbo框架不绑定任何通信协议,在实现上Dubbo对多协议的支持也非常灵活,它可以让你在一个应用内发布多个使用不同协议的服务,并且支持用同一个port端口对外发布所有协议。
通过Dubbo框架的多协议支持,你可以做到:
• 将任意通信协议无缝地接入Dubbo服务治理体系。Dubbo体系下的所有通信协议,都可以享受到Dubbo的编程模型、服务发现、流量管控等优势。比如gRPC over Dubbo的模式,服务治理、编程API都能够零成本接入Dubbo体系。
• 兼容不同技术栈,业务系统混合使用不同的服务框架、RPC框架。比如有些服务使用gRPC或者Spring Cloud开发,有些服务使用Dubbo框架开发,通过Dubbo的多协议支持可以很好的实现互通。
• 让协议迁移变的更简单。通过多协议、注册中心的协调,可以快速满足公司内协议迁移的需求。比如如从自研协议升级到Dubbo协议,Dubbo协议自身升级,从Dubbo协议迁移到gRPC,从HTTP迁移到Dubbo协议等。
1. HTTP/2(Triple)协议
Triple协议是Dubbo3发布的面向云原生时代的通信协议,它基于HTTP/2并且完全兼容gRPC协议,原生支持Streaming通信语义,自Triple协议开始,Dubbo还支持基于Protobuf的服务定义与数据传输。Triple具备更好的网关、代理穿透性,因此非常适合于跨网关、代理通信的部署架构,如服务网格等。
Triple协议的核心特性如下:
• 支持TLS加密、Plaintext明文数据传输
• 支持反压与限流
• 支持Streaming流式通信
在编程与通信模型上,Triple协议支持如下模式:
• 消费端异步请求(Client Side Asynchronous Request-Response)
• 提供端异步执行(Server Side Asynchronous Request-Response)
• 消费端请求流(Request Streaming)
• 提供端响应流(Response Streaming)
• 双向流式通信(Bidirectional Streaming)
开发实践
• Triple协议使用示例请参考Dubbo官网文档中的任务模块
• Triple协议规范请参考Dubbo官网文档技术方案博客
《Apache Dubbo微服务开发从入门到精通》——通信协议—— 一、 Dubbo通信协议设计概述(下): https://developer.aliyun.com/article/1224957