`
wbj0110
  • 浏览: 1553007 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Memcached的分布式算法

阅读更多

memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点
下面假设memcached服务器有node1~node3三台,应用程序要保存键名为“yale”的数据,首先向memcached中添加“yale”。将“yale”传给客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的memcached服务器。服务器选定后,即命令它保存“yale”及其值, 接下来获取保存的数据。获取时也要将要获取的键“yale”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值,这样,将不同的键保存到不同的服务器上,就实现了memcached的分布式。 memcached服务器增多后,键就会分散,即使一台memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行,但需要注意一些问题:
1、 当选择的服务器无法连接时,会将连接次数添加到键之后,再次计算哈希值并尝试连接。这个动作称为rehash。不希望rehash时可以在生成对象时指定“rehash => 0”选项。
2、 当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,算法可能会影响服务器的选择,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率。

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


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


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

分享到:
评论

相关推荐

    memcached全面剖析–4. memcached的分布式算法.txt

    memcached全面剖析–4. memcached的分布式算法.txt

    memcached全面剖析–4.memcached的分布式算法

    正如第1次中介绍的那样,memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括第2次、第3次前坂介绍的内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端...

    memcached全面剖析

    目前为止我找到的关于memcached(分布式缓存)最详细的中文资料。

    分布式缓存系统Memcached

    memcached完全可以用到其他地方 比如分布式数据库,分布式计算等领域。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。  2.Memcached工作机制  通过在内存中开辟一块区域来维持一个大的hash表...

    高速web缓存组件 memcached全面剖析 中文版

    memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可...第4 章 memcached的分布式算法 第5 章 案例memcached的应用和兼容程序

    memcached全面剖析.zip

    memcached全面剖析, 密码 1234!@#$ memcached完全剖析–1. memcached的基础 memcached全面剖析–2.... memcached的分布式算法 memcached全面剖析–5. memcached的应用和兼容程序 可关注公众号:Java与大数据进阶

    Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持.txt

    它的优点是协议简单,内置内存存储,并且他的分布式算法是在客户端完成的,不需要服务器端进行通信,我们当时在做项目的时候因为考虑到项目的高可用性高扩展性,因此在服务器部署方面采用了apache+jk+tomcat这种负载...

    网站架构技术

    memcached分布式缓存集群的伸缩性挑战 分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构...

    memcached权威指南

    第六章 分布式集群算法.................................................................................................................19 6.1 memcached 如何实现分布式?.....................................

    raft-consensus:由 RAFT 共识算法支持的 Go (golang) 编写的简单 Memcached 克隆

    木筏-golang 由 RAFT 共识算法支持的用 golang 编写的分布式 Memcached 克隆(KeyValue 存储)。 ####Introduction 这个项目分为 4 个部分。1) 键值存储(非分布式) 查看 assignment1 文件夹2) 集群间共识的键值...

    9、缓存(10题)1

    1. 列举一个常用的Redis客户端的并发模型 2. 如何实现一个Hashtable 3. 分布式缓存,一致性hash 4. LRU算法, slab分配,如何减

    09、缓存(10题)1

    1. 列举一个常用的Redis客户端的并发模型 2. 如何实现一个Hashtable 3. 分布式缓存,一致性hash 4. LRU算法, slab分配,如何减

    Memcache缓存系统知识点梳理

    Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-value对的方式存在内存中。 官网下载地址: ...

    did:高性能的ID生成器,基于rpcx和Memcached协议提供网络服务调用

    分布式ID生成器服务 基于的算法实现的ID生成器高级的健壮的可容错的网络服务。 它提供了: 可配置的二进制位数和最大序列数 可以批量获取ID 基于提供网络服务,可以...memcached协议访问 除了使用访问外,你还可以通过m

    Redis面试专题.pdf

    3.使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别? 4.知道 redis 的持久化吗?底层如何实现的?有什么优点缺点? 5.redis 过期策略都有哪些?LRU 算法知道吗?写一下 ...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    3.2.4 Memcached的分布式算法 3.3 Memcached的管理与性能监控 3.3.1 如何管理Memcached 3.3.2 Memcached的监控 3.3.3 Memcached变种产品介绍 3.4 通过UDFs实现Memcached与MySQL的自动更新 3.4.1 UDFs...

    redis经典面试题详细

    13.其他问题Redis与Memcached的区别 如何保证缓存与数据库双写时的数据一致性? Redis常见性能问题和解决方案? Redis官方为什么不提供Windows版本? 一个字符串类型的值能存储最大容量是多少? Redis如何做大量数据...

    大数据下的数据分析平台架构.pdf

    还有很多易并⾏问题(Embarrassingly Parallel),计算可以分解成完全独⽴的部分,或者很简单地就能改造出分布式算法,⽐如⼤规模脸 部识别、图形渲染等,这样的问题⾃然是使⽤并⾏处理集群⽐较适合。 ⽽⼤多数统计...

Global site tag (gtag.js) - Google Analytics