一、传统Hash分流
分析:Hash() % max结果在总在0 ~ max-1间,由此可以做负载均衡,请求分发
问题:分流时,机器宕机会产生失败请求,容易引起请求丢失
二、一致性Hash
分析:一致性哈希就是将整个哈希值空间组织成一个虚拟的圆环,如图,哈希函数的值空间为0 ~ 2^32-1,一致性Hash中2^32-1(最大值) + 1 = 0(最小值),因此Hash值空间形成闭环。添加机器,机器宕机,请求不会受任何影响,例如:Node2挂掉了,请求B就由Node3执行。
优点:很好的支持横向扩张、动态增长,具有较好的容错性和可扩展性,应用于分布式缓存、分布式Rpc框架的负载均衡
问题:节点少、分布不均匀而造成数据倾斜
三、数据倾斜问题解决
解决:服务器虚拟出多个Hash节点,均匀分布在Hash环上,而且可以根据虚拟出节点的多少来控制服务器的服务能力