memcached-分布式集群算法

看到一篇文章写的很好,在这里推荐一下。

原文出处:http://www.cnblogs.com/tomcatx/p/4277210.html


memcached如何实现分布式?

  memcached是一个“分布式内存对象缓存系统”,然而memcached并不像mongodb那样,允许配置多个节点,且节点之间“自动分配数据”,就是说memcached节点之间是不能互相通信的,因此,memcached的分布式,要靠用户去设计算法,把数据分布在多个memcached节点中。

  分布式之取模算法

  N个节点,从节点0到节点N-1。key对N取模,余i,则key落在第i台服务器上。

  

  取模算法对缓存命中率的影响

     假设有N台服务器,运行中突然down掉一台,那么取模的底数就变为了N-1

  后果是什么呢?

  后果是命中率在服务器down期间内,急剧下降至1/N-1;服务器越多,则down机后果越严重。

  一致性哈希算法原理

  把各服务器节点映射放在钟表的各个时刻上, 把key 也映射到钟表的某个时刻上。该key 沿钟表顺时针走,碰到的第1 个节点即为该key 的存储节点。

  

  一致性哈希对其他节点的影响  

  当某个节点down 后,只影响该节点顺时针之后的1 个节点,而其他节点不受影响.因此,Consistent Hashing 最大限度地抑制了键的重新分布。

  

  一致性哈希+虚拟节点对缓存命中率的影响

  节点在圆环上分配均匀,因此承担的任务也平均,但事实上, 一般的Hash 函数对于节点在圆环上的映射,并不均匀。当某个节点down 后,直接冲击下1 个节点,对下1 个节点冲击过大,能否把down 节点上的压力平均的分担到所有节点上?答案是可以的。

  引入虚拟节点

  

  虚拟节点即----N 个真实节点,把每个真实节点映射成M 个虚拟节点, 再把M*N 个虚拟节点,散列在圆环上. 各真实节点对应的虚拟节点相互交错分布这样,某真实节点down 后,则把其影响平均分担到其他所有节点上。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值