dtm icon indicating copy to clipboard operation
dtm copied to clipboard

希望dtm可以支持grpc的balancer扩展,比如一致性hash的方式访问目标服务

Open nearmeng opened this issue 2 years ago • 5 comments

目前dtm支持扩展grpcresolver以及服务注册的内容,但是对资源服务的grpc访问采用的是默认的balancer方式,希望可以对该负载均衡方式支持扩展

nearmeng avatar Oct 26 '22 03:10 nearmeng

有没有相关的使用场景,以及grpc的解决方案的资料,给一个?

yedf2 avatar Oct 26 '22 04:10 yedf2

使用的场景: 正常应用对微服务的访问采用一致性hash的方式进行访问,需要事务也按照一致性hash进行执行

下面是网上找的示例: https://lxkaka.wang/gprc-balancer/

nearmeng avatar Oct 26 '22 07:10 nearmeng

dtmdriver 中提供的 RegisterAddrResolver 接口应该就满足扩展了吧?

https://github.com/dtm-labs/dtmdriver/blob/96d229722f19449a0e02a2a24ab8375c912d597a/driver.go#L16

xyctruth avatar Oct 26 '22 08:10 xyctruth

RegisterAddrResolver 这个是可以注册一些扩展的balancer实现进去,不过dtm grpc dial时如何设置合适loadBalancingPolicy,以及如何对每个执行事务分支使用不同的hash_key,这些还没有支持

nearmeng avatar Oct 26 '22 09:10 nearmeng

这个感觉是需要的,默认grpc 走的是pick_first,但是实际情况机器可能拥有不同的权重,承接请求量不一样。用户也应该可以在客户端选择不同的picker策略,甚至可以开放接口让用户自定义自己的策略。

我目前是自定义一个balancer.PickerBuilder, 在里面提供不同的策略,客户端新增一个option,在 grpc dial 连接之前根据选择的策略类型向grpc register自定义balancer.PickerBuilder。

相关: https://github.com/grpc/grpc/blob/master/doc/load-balancing.md https://github.com/grpc/grpc/blob/master/doc/service_config.md

wuqinqiang avatar Nov 04 '22 08:11 wuqinqiang