Description
What would you like to be added:
背景
现有dgp.filter.http.dubboproxy通过泛化调用代理dubbo,注册发现/路由/负载均衡均内置在dubbo-go的泛化调用中,无法利用到Pixiu现有的Router和Cluster的能力。
另一方面,triple代理目前不支持应用级服务发现,而且仍需要adapters+api_config来路由
目标
- 废弃adapters+api_config结合将信息写到Router的方式
- dgp.filter.http.directdubboproxy直接代理能力扩展,配合Router和Cluster完成dubbo代理
- triple代理配合Router和Cluster完成dubbo代理,同时支持接口级与服务级代理
- dubbo/triple协议代理/group/version可指定也可按约定根据元数据自动选择
- dubbo/triple代理客户端连接池管理
- dubbo/triple统一调用方式
- 支持nacos/zk
- 找不到路由时的友好提示
- 增加丰富的samples演示以上功能
How to
代理所需的信息即一个${appName}/${className}/${method} + group + version 即三元组应该被路由到哪个Cluster,最后从Cluster中选择一个Ip后,借助dgp.filter.http.directdubboproxy即可完成一次代理。
这部分信息可以从注册中心拿到,其中${appName}/${className}/${method} + group + version作为路由,即Router(三元组)->Cluster(EndPoints)。
以Nacos为例
配置文件:registry/nacos/go-server/conf/dubbogo.yml(https://github.com/apache/dubbo-go-samples)
元数据
接口级
服务列表
服务名 | 分组名称 |
---|---|
providers:org.apache.dubbo.UserProvider.Test2:myInterfaceVersion:myInterfaceGroup | myGroup |
服务详情
IP | 端口 | 健康状态 | 元数据 |
---|---|---|---|
192.168.128.1 | 20000 | true | methods=GetUser interface=org.apache.dubbo.UserProvider.Test2 path=/org.apache.dubbo.UserProvider.Test2 protocol=dubbo group=myInterfaceGroup version=myInterfaceVersion application=myApp |
192.168.128.1 | 20001 | true | methods=GetUser interface=org.apache.dubbo.UserProvider.Test2 path=/org.apache.dubbo.UserProvider.Test2 protocol=dubbo group=myInterfaceGroup version=myInterfaceVersion application=myApp |
应用级
服务名 | 分组名称 |
---|---|
myApp | myGroup |
应用详情
IP | 端口 | 元数据 |
---|---|---|
192.168.128.1 | 20001 | ... |
192.168.128.1 | 20000 | ... |
服务映射
Data Id | Group |
---|---|
org.apache.dubbo.UserProvider.Test2 | mapping |
服务映射详情(应用名)
myApp,myApp2,myApp3
实现
对于接口级,考虑将${appName}/${className}/${method} + group + version拼接起来做为一个Router项,并将EndPoints生成一个Cluster
对于应用级,则更为简单,以${appName}做为Router项,并将EndPoints生成一个Cluster即可。
接口级注册则可利用协议元数据中protocol=dubbo/triple自动选择dubbo/triple client调用。
Why is this needed:
Activity