Snailclimb / guide-rpc-framework

A custom RPC framework implemented by Netty+Kyro+Zookeeper.(一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。)
https://gitee.com/SnailClimb/guide-rpc-framework
Other
3.97k stars 2.06k forks source link

一致性哈希负载均衡器中,可以使用服务名的哈希值作为选择服务端地址的 key 吗? #39

Closed Lykr closed 2 years ago

Lykr commented 3 years ago

https://github.com/Snailclimb/guide-rpc-framework/blob/da6be9d4e5634f5e7258525d94519c96a7507846/rpc-framework-simple/src/main/java/github/javaguide/loadbalance/loadbalancer/ConsistentHashLoadBalance.java#L36

如题:一致性哈希负载均衡器中,可以使用服务名的哈希值作为选择服务端地址的 key 吗?

Dubbo 中使用调用参数进行散列作为 key,保证相同参数的请求总是发到同一提供者。

如果使用服务名称散列后的值做为 key 的话,会不会导致不同客户端对同服务的所有请求都落在一个服务器上?

mesmerizeBy commented 3 years ago

同,我用这个项目起了多个服务端,然而一致性哈希负载均衡并没有生效 image 因为每次调用key都一样,所以全都落在同一个服务器上了 image return selector.select(rpcServiceName); 这段代码确实应该加上其他调用信息,否则无法区别每次调用的状态,更别提负载均衡了

mesmerizeBy commented 3 years ago

@Snailclimb return selector.select(rpcServiceName); 建议一致性哈希这里可以加上调用参数信息 image

Snailclimb commented 3 years ago

@Snailclimb return selector.select(rpcServiceName); 建议一致性哈希这里可以加上调用参数信息 image

好的 👍 非常棒的建议

IThzf commented 2 years ago

同,我用这个项目起了多个服务端,然而一致性哈希负载均衡并没有生效 image 因为每次调用key都一样,所以全都落在同一个服务器上了 image return selector.select(rpcServiceName); 这段代码确实应该加上其他调用信息,否则无法区别每次调用的状态,更别提负载均衡了

请问怎么开始多个服务端啊。NettyRpcServer类中端口是固定的,我先启动一个服务端,然后改变端口值,再启动一个,第一个服务端就会报错