Dubbo3的Triple协议踩坑记录

Triple协议踩坑记录

Triple协议

Triple 协议是 Dubbo3 提出的基于 HTTP2 + gRPC 的开放协议,完整兼容 gRPC over HTTP/2,旨在解决 Dubbo2 私有协议带来的互通性问题。一句话概括 Triple:它是基于 HTTP/2 上构建的 RPC 协议,完全兼容 gRPC,并在此基础上扩展出了更丰富的语义。

相比于原有 Dubbo2 协议,Triple 有以下优势:

原生和 gRPC 协议互通。打通 gRPC 生态,降低从 gRPC 至 Dubbo 的迁移成本。
增强多语言生态。避免因 CPP/C#/RUST 等语言的 Dubbo SDK 能力不足导致业务难以选型适配的问题。
网关友好。网关无需参与序列化,方便用户从传统的 HTTP 转泛化 Dubbo 调用网关升级至开源或云厂商的 Ingress 方案。
完善的异步和流式支持。带来从底层协议到上层业务的性能提升,易于构建全链路异步以及严格保证消息顺序的流式服务。
目前 Java 和 Go 的 Dubbo SDK 已全面支持 Triple 协议。在阿里巴巴,Triple 协议广泛用于跨环境、跨语言、跨生态互通,已有数十万容器生产级使用。

Java SDK 支持 IDL 生成 Stub 和 Java Interface 两种方式,多语言、生态互通、流式需求推荐使用 IDL 方式,现有服务平滑升级推荐使用 Interface 方式。

坑一、consumer端调用provider端调用失败

在应用triple协议时,在测试环境同一台机器部署了provider和consumer,注册到同一个nacos,但是consumer始终调用不到provider,排查后发现因为测试环境加了http_proxyhttps_proxy代理

export http_proxy=http://10.0.0.1:3128
export https_proxy=http://10.0.0.1:3128

为什么服务器上加了http代理会导致dubbo服务调用不通呢?

原因是因为triple协议本身,triple协议是基于HTTP2和gRPC协议扩展的,故使用Triple协议时如果加了代理,会受代理影响。

解决办法

通过在服务器上配置no_proxy 来屏蔽内网代理,配置指定IP或者全部内网IP
配置指定IP

export no_proxy="127.0.0.1, localhost, *.cnn.com, 192.168.1.10"

配置所有内网IP

export no_proxy="`echo 10.1.{1..255}.{1..254},` 10.1.255.255"

no_proxy配置参考

坑二、triple协议在docker用应用

在讲dubbo服务build成docker镜像部署应用时,由于docker的隔离特性,consumer端与provider端大都不在同一个局域网内,以至于consumer端provider端无法正常的通信

在dubbo2中,通常在docker镜像启动时通过配置docker环境变量DUBBO_IP_TO_REGISTRYDUBBO_PORT_TO_REGISTRY绑定当前宿主机的IP和端口,通过宿主机的端口暴露注册provider服务

DUBBO_IP_TO_REGISTRY=172.16.0.1      # 当前服务以此IP注册到注册中心
DUBBO_PORT_TO_REGISTRY=20981            # 当前服务以此端口注册到注册中心

但是在使用Triple协议时,使用这两个配置不能完全解决问题,原因是因为dubbo3中元数据和服务使用了不同的端口,以至于DUBBO_PORT_TO_REGISTRY注册的端口不能满足,因此需要暴露两个端口,此时则不可使用此环境变量DUBBO_PORT_TO_REGISTRY指定端口(这是官方的一个bug,后续版本应该会修复)

解决办法
dubbo.application.metadata-service-port=20982  # 指定元数据端口
dubbo.protocol.port=50052                      # 指定服务端口

并将指定好的端口映射到宿主机上
以docker-compose配置为例,完整配置如下
在这里插入图片描述

以上阐述均基于dubbo3.0.8版本

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dubbo Triple协议是Apache Dubbo框架的一个新增特性,它提供了一种新的网络传输协议。在传统的Dubbo框架中,主要使用的网络传输协议是TCP,而Dubbo Triple协议则提供了一种基于HTTP/2协议的新的传输方式。 Dubbo Triple协议具有以下特点: 1. 支持双向通信:Dubbo Triple协议实现了Dubbo的双向通信能力。这意味着服务提供方和服务消费方都可以同时发送和接收消息,实现了更加灵活的通信方式。 2. 基于HTTP/2:Dubbo Triple协议底层使用了HTTP/2协议作为传输协议。相比于传统的HTTP/1.1协议,HTTP/2协议具有更高的性能和更低的延迟,能够提供更好的网络传输效率。 3. 支持长连接:Dubbo Triple协议通过复用底层的TCP连接实现长连接,提高了连接的复用率,减少建立连接的开销,提高了通信效率。 4. 支持多种消息格式:Dubbo Triple协议支持多种常见的消息格式,包括JSON、Protobuf等,可以根据需求选择合适的消息格式进行通信。 5. 支持多种编解码方式:Dubbo Triple协议支持多种编解码方式,包括Dubbo自身的序列化方式和常见的序列化框架,如Hessian、Kryo等,提供了更灵活的编解码选择。 总的来说,Dubbo Triple协议是一种基于HTTP/2的新的网络传输协议,它通过支持双向通信、长连接以及多种消息格式和编解码方式,提供了更加高效和灵活的服务通信方式,为Dubbo框架提供了更多的选择和扩展能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值