Skip to content

Dubbo/Triple direct & auto proxy #600

Open
@mark4z

Description

What would you like to be added:

背景

现有dgp.filter.http.dubboproxy通过泛化调用代理dubbo,注册发现/路由/负载均衡均内置在dubbo-go的泛化调用中,无法利用到Pixiu现有的Router和Cluster的能力。
另一方面,triple代理目前不支持应用级服务发现,而且仍需要adapters+api_config来路由

目标

  1. 废弃adapters+api_config结合将信息写到Router的方式
  2. dgp.filter.http.directdubboproxy直接代理能力扩展,配合Router和Cluster完成dubbo代理
  3. triple代理配合Router和Cluster完成dubbo代理,同时支持接口级与服务级代理
  4. dubbo/triple协议代理/group/version可指定也可按约定根据元数据自动选择
  5. dubbo/triple代理客户端连接池管理
  6. dubbo/triple统一调用方式
  7. 支持nacos/zk
  8. 找不到路由时的友好提示
  9. 增加丰富的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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions