Consistent Hashing 一致性hash

本文介绍了分布式缓存中的一致性哈希算法,对比了传统取模算法,详细阐述了一致性哈希如何解决传统方法中存在的瓶颈问题,如前端机头的性能瓶颈、热备需求以及数据迁移等挑战。

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

       copy一下一致性哈希的定义:首先求出memcached服务器(节点)的哈希值,并将其配置到0~232 的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232 仍然找不到服务器,就会保存到第一台memcached服务器上。


其核心是取代传统取模求余的常规算法,改为大数域内的Hash,以及线形冲突的Hash处理 (为什么是2的32次方,这个问题我还没弄清楚。mark)。    一致性hash的概念讲的很多了,公司最近的Memcached改造正在引入这个东西,来提高分布式cache的容灾能力及移除传统分布式cache的瓶颈。

 

 

首先分析传统按模划分的利弊端:

按模取余算法非常简单,效率很高。比如后台有3台cache机, 只需要将数据key模3,根据其余数就可以知道应该写入到哪台机器,而且也很容易得知数据分布在哪台具体机器上。

 

但是按模取余存在两个方面的弊端:

1.虽然是分布式cache,但是众多cache存储机器必须有一个集中的前台管理机器,来完成取模算法与写入控制。这里称为前端机头 。因此这台前端机头就会成为一个比较大的瓶颈(特别是在java上,Java内存消耗超过2g会出一些莫名的异常,并且内存回收效率会有问题)。
 2.由于只有一台前端机头,因此一旦crash将会使得后面所有cache机器失效。如此又必须热备前端机头。

3.后续增减cache机器,将会牵涉到大量数据的迁移过程。 由于模3和模4导致的数据迁移将会相当大。瞬间可能超过负荷。

 

于是就诞生了一致性hash的应用:



 回归到数据结构中最简单的线性表冲突处理来做真正的HASH。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值