哈希一致性算法(分布式服务器落点算法)

场景预设和一般hash算法:

先预设一个场景,有10000份文件,需要缓存到五台缓存服务器之上

那么按照最常规,每个服务器平均分配2000份文件

那么用一个取余操作就可以完成

比如说是第2513的图片,那么用一个公式

需要缓存的文件数%服务器数量就可以得到文件需要存在几号服务器上

2513%5=3,那么低2513号文件就可以缓存到3号服务器上面

一般hash算法的缺陷:

当缓存服务器数量需要增加或者减少的时候,这时候取模数发生了变化,文件取hash后不是原来的服务器,造成缓存失效,失效后就需要从后台服务器去取到指定的文件

举个例子,当一台服务器故障的时候,会造成缓存雪崩,后端服务器突然出现了巨大的压力,整个系统就会被压垮,于是就需要一致性哈希算法1去解决这个问题

一致性哈希算法:

 先假设一个哈希环,由2^32个点组成

 在节点之间分配三个服务器

 用公式文件 % 2^32,得到文件1和文件2在服务器A和服务器B节点之间

那么顺时针旋转,找到一个服务器节点,找到服务器B,那么服务器B就作为存储节点

同理文件3找到服务器C作为存储节点

这时候服务器C挂掉了,那么就会顺时针找到服务器A作为存储节点

文件1和文件2依旧在服务器B上面

位置没有发生改变,这就是哈希一致性算法的区别

哈希环倾斜:

未倾斜的情况:

 发生倾斜的情况:

 这时候大量的文件会缓存到服务器A,A的压力巨大,这时候就需要虚拟节点:

虚拟节点:

 在哈希环上面再分配虚拟节点,比如算到虚拟节点A的也会交给服务器A缓存,这样就可以实现相对平均的分配

猜你喜欢

转载自blog.csdn.net/qq_36653924/article/details/129296952