`
wbj0110
  • 浏览: 1602437 次
  • 性别: 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分布式缓存数据库部署.doc

    《深入理解memcached分布式缓存数据库部署》 memcached,作为一款高性能的分布式缓存服务器,它的主要任务是缓存数据库查询结果,从而减少对数据库的访问,进而提升动态Web应用的响应速度。这一技术的广泛应用,...

    Memcached分布式缓存学习.doc

    2. 客户端需要实现分布式算法:客户端需要实现分布式算法,以便将数据缓存到不同的 Memcached 服务器上。 Memcached 是一个高性能的分布式缓存系统,能够提高网站的速度和性能,减轻数据库的负载。但是,Memcached ...

    memcached分布式工具

    总的来说,memcached分布式工具是应对大数据量和高并发场景的有效手段,通过合理的集群部署和管理,能够提升系统响应速度,降低数据库压力,从而提高整体应用性能。在实际应用中,我们需要充分理解其工作原理,结合...

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

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

    Memcached分布式缓存入门

    **Memcached分布式缓存入门** Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解...

    Memcached分布式缓存简介

    客户端使用特定的分布式算法(例如一致性哈希)来决定数据应存储在哪个服务器上。这种设计允许Memcached在多台服务器上分散大量数据,减轻单一服务器的压力,并且能实现缓存的扩展性。 Memcached的设计特征包括: 1...

    .net memcached 分布式缓存应用类库

    .NET Memcached 分布式缓存应用类库是用于在.NET环境...通过正确使用.NET Memcached分布式缓存应用类库,开发者能够构建出高效、可扩展的应用,显著提升服务响应速度,降低数据库压力,提高整体系统的性能和用户体验。

    Memcached 分布式缓存实现原理简介

    总结来说,Memcached的分布式缓存实现主要依赖于客户端的哈希算法,包括余数计算分散法和一致性哈希。这些策略确保了数据在多台服务器间的有效分布,减少了数据库的压力,提高了系统的响应速度和可扩展性。在实际...

    memcached 分布式缓存服务器

    3. **分布式**:通过哈希算法将键分发到集群中的不同节点,实现数据的分布式存储,提供扩展性和高可用性。 4. **LRU(Least Recently Used)策略**:当内存满时,memcached 采用 LRU 策略淘汰最近最少使用的数据。 ...

    Memcached分布式缓存系统的应用.pdf

    ### Memcached分布式缓存技术特点 Memcached作为一个开源的高性能内存对象缓存系统,具有以下特点: 1. **协议简单**:Memcached服务器与客户端之间采用基于文本行的协议进行通信,支持多种方式获取数据。协议的...

    20120102 net下memcached 分布式缓存系统应用

    7. **故障转移与分布式一致性**:如何处理节点故障,以及Memcached的分布式一致性哈希算法。 8. **性能优化**:缓存命中率提升技巧,避免缓存击穿、雪崩等问题的方法。 9. **源码分析**:如果包含源码,可能涉及具体...

    Memcached分布式缓存

    ### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...

    Memcached 分布式缓存实现原理 – 码农网1

    4. **分布式机制**:尽管各个memcached实例之间并不直接通信,但它们可以通过客户端的哈希算法实现数据的分布式存储。 分布式原理: Memcached 的分布式实现主要依赖于客户端的哈希策略。当客户端需要存储或检索...

    memcached 分布式内存

    - **分布式**: 通过哈希算法,Memcached 可以将数据分发到多台服务器上,实现数据的分布式存储,提高了服务的可扩展性。 2. **优势** - **高性能**: 由于数据存储在内存中,读取速度极快,极大地提升了服务响应...

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

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

    memcached全面剖析

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

    MemCached跨平台分布式缓存

    3. **分布式哈希**:为了实现分布式存储,Memcached使用一致性哈希算法,将键映射到不同的服务器节点上。这样,即使在服务器动态增减的情况下,大部分键的映射关系也能保持不变,降低了数据迁移的复杂性。 4. **预...

    缓存应用--Memcached分布式缓存简介(二)

    ### 缓存应用--Memcached分布式缓存简介(二) #### 1. 命令行查看状态 在日常运维和开发过程中,了解Memcached的实时状态是非常重要的。通过简单的命令行工具,我们可以轻松地获取到Memcached服务的运行状态。 - *...

    memcached构建分布式缓存[收集].pdf

    4. **非通信的分布式架构**:各个Memcached服务器之间不进行通信,分布式特性主要由客户端实现,通过算法决定数据存储在哪个服务器上。 在内存管理方面,Memcached采用了一种名为**Slab Allocation**的机制。这个...

Global site tag (gtag.js) - Google Analytics