一致性hash算法为什么可以降低分散性

关于一致性hash算法有很都帖子了,自己找了几篇,都会介绍到一致性hash算法的几个特性

  • 单调性:增加新的节点,原有请求只会映射到原来的或者新的服务器上,不会映射到原来其他的服务器上
  • 分散性:
  • 平衡性:通过虚拟节点,来实现负载均衡

什么是分散性

在分布式环境中,客户端请求时可能不知道所有服务器的存在,只知道一部分服务器的存在,如果多个客户端都把部分服务器作为完整的hash环,可能导致相同的请求被映射到不同的服务器上,分散性是指以上情况发生的严重程度。

为什么一致性hash可以降低分散性

因为一致性hash的取模运算,是对 2^32-1 取模,不是对服务器的数量取模,所以一致性hash保证相同请求的映射地址都是一样的,和服务器的数量没关系。这样只要不同的客户端都能知道到存储该数据的服务器,都可以准确的找到该服务器,不用考虑客户端知道的服务器的数量。

一致性hash只要不同的客户端都能知道存储该请求数据的服务器存在,就可以得到正确的服务器地址。而普通的hash算法在知道存储该请求数据的服务器存在的情况下,hash运算之后,得到的可能也不是这个服务器地址

比如A客户端识别到编号为1,2,3的三台服务器,一致性hash地址分别是100,200,300。
B客户端识别到编号为2,3,4三台服务器,一致性hash地址分别是200,300,400。
A,B请求的数据做一致性hash运算都是160,做对服务器数量的hash运算都是2。
这么来看,A和B的请求采用一致性hash,定位到的服务器都是编号为2的服务器。
如果采用对服务器数量进行hash计算,定位到的服务器分别是2和3,造成不一致。

你可能感兴趣的:(分布式)