一致性hash算法
2022-04-04 / 2 min read
分布式缓存中的运用。
分布式缓存
在我们的分布式应用中我们常常会用到分布式缓存,什么是分布式缓存,说简单点就是将缓存放在几台机器上,然后我们就会发现一个问题,我们怎么做到用户想要数据的时候将数据给到用户呢。
一般的hash算法
使用一般的hash算法呢,就是将值进行hash然后取余服务器的数量,然后就会得到数字,然后将数据放在对应编号的服务器中。
但是这样的话,容错性和扩展性都很差,为什么呢?
无论是多了一台机器还是少一台机器它的hash后取余的位置都会不一样,然后访问数据的时候,因为服务器数量的变化这里也是不一样的。也就是说如果出现宕机或者想要增加服务器,那么所有的缓存都会失效。
为了避免这样的问题产生,我们就要使用到hash一致性算法
hash一致性算法
hash一致性算法,在hash一致性算法中,我们首先先生成一个2^32的圆,然后将服务器节点进行hash放在圆上,然后将数据进行hash,然后hash到的位置,我们进行顺时针的寻找,寻找到第一个节点,我们就会将数据存放在上面,然后这里我们需要注意的事情是,这里我们需要增加虚拟节点,因为在hash的时候我们的服务器节点不一定说就是均匀分布的,这个时候如果节点很少,可能就会发生一些数据的偏移,可能会出现大部分的数据存放在一个服务器上,然后这个时候对于这个服务器来说,这样的压力就会很大,所以我们通过将节点进行增加几个虚拟节点来解决这个问题。