《Apache Dubbo微服务开发从入门到精通》——高级功能——八、 泛化调用(1) https://developer.aliyun.com/article/1224979
2) 基于 HTTP/2 的 Triple 协议成为最终选择
最终我们选择了兼容 gRPC,以 HTTP2 作为传输层构建新的协议,也就是 Triple。
容器化应用程序和微服务的兴起促进了针对负载内容优化技术的发展。客户端中使用的传统通信协议(RESTFUL 或其他基于 HTTP 的自定义协议)难以满足应用在性能、可维护性、扩展性、安全性等方便的需求。
一个跨语言、模块化的协议会逐渐成为新的应用开发协议标准。自从 2017 年 gRPC协议成为 CNCF 的项目后,包括 k8s、etcd 等越来越多的基础设施和业务都开始使用 gRPC 的生态,作为云原生的微服务化框架,Dubbo 的新协议也完美兼容了 gRPC。并且,对于 gRPC 协议中一些不完善的部分,Triple 也将进行增强和补充。
那么,Triple 协议是否解决了上面我们提到的一系列问题呢?
• 性能上:Triple 协议采取了 metadata 和 payload 分离的策略,这样就可以避
免中间设备,如网关进行 payload 的解析和反序列化,从而降低响应时间。
• 路由支持上:由于 metadata 支持用户添加自定义 header,用户可以根据
header 更方便的划分集群或者进行路由,这样发布的时候切流灰度或容灾都有了更高的灵活性。
• 安全性上:支持双向 TLS 认证(mTLS)等加密传输能力。
• 易用性上:Triple 除了支持原生 gRPC 所推荐的 Protobuf 序列化外,使用通用的方式支持了 Hessian/JSON 等其他序列化,能让用户更方便的升级到 Triple 协议。对原有的 Dubbo 服务而言,修改或增加 Triple 协议只需要在声明服务的代码块添加一行协议配置即可,改造成本几乎为 0。
现状
• 完整兼容 grpc、客户端/服务端可以与原生 grpc 客户端打通。
• 目前已经经过大规模生产实践验证,达到生产级别。
特点与优势
• 具备跨语言互通的能力,传统的多语言多 SDK 模式和 Mesh 化跨语言模式都需要一种更通用易扩展的数据传输格式。
• 提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming和 Bidirectional。
• 易扩展、穿透性高,包括但不限于 Tracing/Monitoring 等支持,也应该能被各层设备识别,网关设施等可以识别数据报文,对 Service Mesh 部署友好,降低用户理解难度。
• 多种序列化方式支持、平滑升级。
• 支持 Java 用户无感知升级,不需要定义繁琐的 IDL 文件,仅需要简单的修改协议名便可以轻松升级到 Triple 协议。
《Apache Dubbo微服务开发从入门到精通》——高级功能——八、 泛化调用(3) https://developer.aliyun.com/article/1224976