memcached的分布式算法

memcached的分布式算法

当我们有多台Memcached服务器做成一个 memcached群组时,就要考虑分布式算法的问题了。

例如:我们有 key1,key2,key3的数据要写入memcached,此时我们有4台memcached的服务器。如何让这些数据均匀的分布到4台服务器中,并且在读取的时候又能正确定位到存储的服务器成为了我们必须要考虑的问题。

目前比较常见的做法分为两种:一种是 余数计算,一种是一致性散列 算法。

一、余数计算。

通过特定的算法将键值转换为数字,然后再除以服务器的台数,根据余数来选择将键存放到哪一台服务器。

例:fn(str) =int.  fn(key1) = 12,fn(key2) = 11,fn(key3) = 14

key1:  12  %4 = 0 存放到第一台机器。

key2:11%4 = 3  存放到第4台机器。

key3:14 %4 = 2 存放到第3台机器。

优点:计算简单、效率高。

缺点:服务器增加 或者减少时,会导致几乎所有的缓存失效。对于服务器而言,这是一场灾难,洪水般的访问都会直接冲向后台服务器;

例:增加一台机器

key1: 12 % 5 = 2   (本来存放在第一台机器,但是现在跑去第3台获取了。获取失败!)

key2:11 % 5 = 1 (本来存放在第 3台机器,但是现在跑去第2台获取了,获取失败!)

key3:14 % 5 = 4 (获取失败!)

二、一致性散列算法。

使用这样的算法有效的解决了求余算法的灾难性问题。

分布式存储中的应用

 


 

在分布式存储系统中,将数据分布至多个节点的方式之一是使用哈希算法。假设初始节点数为 N,则传统的对 N 取模的映射方式存在一个问题在于:当节点增删,即 N 值变化时,整个哈希表(Hash Table)需要重新映射,这便意味着大部分数据需要在节点之间移动。

因此现在普遍使用的是被称为一致性哈希(Consistent Hashing)的一类算法。“一致性” 这个定语的意义在于:当增删节点时,只影响到与变动节点相邻的一个或两个节点,散列表的其他部分与原来保持一致。某种程度上可以将其理解为:一致性哈希算法的哈希函数与节点数 N 无关。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值