hash一致性算法

为什么?

hash一致性算法主要应用于分布式系统中,当数据量过大,需要进行分库的时候采用这个算法。

具体实现:

使用普通的hash算法,在某一个服务器宕机或者添加新的服务器的时候,几乎所有的数据都会受影响,所以出现了hash一致性算法。

一致性hash算法是将整个hash值空间组织成一个虚拟的圆环,整个值空间为0-2^32-1.

我们通过服务器的ip或者主机名来进行hash,然后将每个服务器映射到hash环上,当用户发出请求,我们通过用户id计算出hash值也映射到这个hash环上面,根据这个hash值在hash环上的位置,顺时针找到最近的ip作为路由ip,将该服务器作为目标服务器。

优点:

一致性hash算法的容错性和可扩展性,这就是与普通的hash算法所不一样的地方。

当一个服务器宕机,受影响的只有这台服务器到其环空间中的前一台服务器之间的数据,这一部分数据将重新映射到这台服务器环空间中的后一台服务器。

当需要添加一台服务器时,受影响的也只有这台服务器到其环空间中的前一台服务器之间的数据,这一部分数据重新映射到新添加的这台服务器。

问题:

但hash一致性算法也有他自己的问题,就是数据倾斜的问题,当服务器节点特别少的时候,就会导致大部分数据映射到某一个服务节点,而其他的一些服务节点可能数据特别少。

我们解决的办法就是,采用虚拟节点,具体采用的方法就是在每一个服务节点后面加编号,重新取hash值映射到环里面,这样就可以解决在服务节点较少时使数据分布相对均匀。

 

参考:

https://blog.csdn.net/codertnt/article/details/80005005

https://www.jianshu.com/p/e968c081f563

posted @ 2019-03-27 10:13  LeeJuly  阅读(197)  评论(0编辑  收藏  举报