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

文章探讨了在分布式系统中如何利用hash算法进行文件缓存分配,指出现有hash方法在服务器增减时导致的缓存失效问题。为解决此问题,文章介绍了使用一致性哈希算法,包括其工作原理,如哈希环的概念以及如何处理服务器故障。此外,还提到了哈希环倾斜和虚拟节点的概念,以确保更均衡的负载分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景预设和一般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缓存,这样就可以实现相对平均的分配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值