Memcached一致性详解

来源:互联网 发布:网络彩票代理违法吗 编辑:程序博客网 时间:2024/06/05 18:55

前言

      今天听了浩田讲的memcached,非常的清晰,但是对于哈希环的问题,觉得有必要自己在总结一下,其实这篇博客早就该写了,一直被各种事情耽搁,废话不说了,让我们看看一致性哈希算法到底是什么


内存分配机制

Slab Allocator

memcache使用了Slab Allocator的内存分配机制:相当于内存池机制,实现从操作系统分配一大块内存,然后memcached自己管理这块内存,负责分配与回收。

基本原理:按照预先规定的大小,将分配的内存分割成特定长度的块

一、首先,想一般的内存池一样,从操作系统分配到一大块内存。
二、将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk集合),chunk的大小按照一定比例逐渐递增(也就是浩田说的增长因子)




memcache的存储涉及到Slab,page,chunk三个概念

  1. chunk:为固定大小的内存空间,默认为96Byte;
  2. page:分配给Slab的内存空间,默认为1MB.然后在将1MB切分成chunk
  3. slab:同样大小的chunk组称为slab

例如:如果要存的数据大小为100,那么这个数据就会被让如112byte的slab里边



Slab Allocator存在的问题

         还拿上边的例子举例,100的放到了112的chunk中,但是还有12byte没有用上,那么这12字节的空间就浪费了


余数Hash算法

      字符串对应的HashCose是50,服务器的数目是5,取余数得0,那么就将这个值放到0号服务器中,浩田今天讲的是宕机的情况,其实还有一种情况,那就是当你要添加服务器的时候,道理是一样的,会发现命中率急速下降,得不到数据,我们就要重新去数据库里查找,如果数据量非常庞大,那么数据访问的压力就会集中到了数据库身上,数据库负载不了的时候,就会宕机


一致性Hash算法


       具体算法过程为:先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将缓存服务器节点放置在这个Hash环上,然后根据需要缓存的数据的Key值计算得到其Hash值(其分布也为[0, 232-1]),然后在Hash环上顺时针查找距离这个Key值的Hash值最近的服务器节点,完成Key到服务器的映射查找。
      下图所示,我设置了四个节点,分别位于环上的4个位置,然后key值根据其HashCode,算出圆环上的位置,位置固定下来以后,key值就会顺时针去寻找离他最近的一个Node,把数据存到这个Node中的memcache服务器中。


如果我们在这个圆环上增加一个节点会怎样呢?如下图所示,只有红色星星的位置到Node5之间的数据收到了影响,别的地方命中率是没有变化的,可以发现,我们布置的node越多,受影响的概率越小



总结

关于memcache还有许多要学习的地方,随着学习的深入,在做另外的总结,今天浩田的分享,也给了我很多的灵感,不光是技术方面,演讲方面还是ppt的制作方面都会学习到了新的东西,谢谢浩田。


0 0
原创粉丝点击