Memcached一致性详解
来源:互联网 发布:网络彩票代理违法吗 编辑:程序博客网 时间:2024/06/05 18:55
前言
今天听了浩田讲的memcached,非常的清晰,但是对于哈希环的问题,觉得有必要自己在总结一下,其实这篇博客早就该写了,一直被各种事情耽搁,废话不说了,让我们看看一致性哈希算法到底是什么
内存分配机制
Slab Allocator
memcache使用了Slab Allocator的内存分配机制:相当于内存池机制,实现从操作系统分配一大块内存,然后memcached自己管理这块内存,负责分配与回收。
基本原理:按照预先规定的大小,将分配的内存分割成特定长度的块
一、首先,想一般的内存池一样,从操作系统分配到一大块内存。
二、将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk集合),chunk的大小按照一定比例逐渐递增(也就是浩田说的增长因子)
memcache的存储涉及到Slab,page,chunk三个概念
- chunk:为固定大小的内存空间,默认为96Byte;
- page:分配给Slab的内存空间,默认为1MB.然后在将1MB切分成chunk
- 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服务器中。
总结
关于memcache还有许多要学习的地方,随着学习的深入,在做另外的总结,今天浩田的分享,也给了我很多的灵感,不光是技术方面,演讲方面还是ppt的制作方面都会学习到了新的东西,谢谢浩田。
0 0
- Memcached一致性详解
- 【Memcached】数据缓存一致性问题详解
- memcached 一致性hash原理
- Memcached 一致性hash原理
- memcached 一致性hash原理
- Memcached 一致性hash实现
- memcached hash一致性算法
- memcached做session一致性
- Session一致性配置---memcached
- libmemcached一致性hash算法详解(1)----php-memcached客户端一致性哈希与crc算法共用产生的bug分析
- memcached:一致性哈希算法
- 关于Memcached一致性hash算法
- memcached分布式-一致性哈希
- memcached一致性哈希算法
- memcached详解
- memcached详解
- MemCached详解
- memcached详解
- 深入理解React、Redux
- 内部类
- idea 创建maven工程
- Android设计模式~~~责任链模式
- 你必须懂的 T4 模板:深入浅出
- Memcached一致性详解
- 什么是WebPack?????npm
- swing框架
- 线程
- Redis 优缺点
- mysql中sql时间段查询语句
- Android简单类型资源(Bool、Color、Dimension、ID、Integer、Integer Array、Typed Array)
- 如何发现优秀的开源项目?
- 【37.07%】【UESTC 360】Another LCIS