请通过浏览器功能收藏网页

Memcached提供了哪些算法保证KEY的唯一存在某台服务器的性质呢 Memcached

发布时间:2018-08-27 14:11:06  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏

算法有几种 算法需要考虑到服务器端变换的代价大小 ; 数据分布是否均匀;等等

下面我们来看看各种算法的特点:


根据余数计算分散

Memcached的分布式方法简单来说,就是“根据服务器台数的余数进行分散”。求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器。

 根据余数计算分散的缺点

    余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。那就是当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,余数就会产    生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率


一致性Hash算法

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

blob.png

如果要添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在continuum增加服务器的地点逆时针方向的第一台服务器上的键会受到影响。

blob.png

从上面的分析可知,Consistent Hashing最大限度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum上分配100200个点。这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。 使用Consistent Hashing算法的memcached客户端函数库进行测试的结果是,由服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下: (1 - n/(n+m)) * 100



如有疑问 请留言 欢迎提供建议
  • 0

    开心

  • 0

    板砖

  • 0

    感动

  • 0

    有用

  • 0

    疑问

  • 0

    难过

  • 0

    无聊

  • 0

    震惊

评论已有 0