`

Memcached分布式结构和Consistent Hashing算法

阅读更多

本文转自:http://www.xiaoyaochong.net/wordpress/?p=210

Memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个Memchached不会互相通信以共享信息。那么,怎么样进行分布式呢?完全取决于客户端的实现。


下面假设Memcached服务器有node1~node3三台,应用程序要保存键名为“tokyo”、“kanagawa”、“chiba”、“saitama”、“gunma”的数据。




 首先想Memcached中添加“tokyo”。将“tokyo”传想客户端程序库后,客户端实现的算法就会根据“键”来决定保存数据的Memcached服务器。服务器选定后,即命令它保存“tokyo”及其值。



 同样,“kanagawa”、“chiba”、“saitama”、“gunma”都是选选择服务器再保存。

接下来获取保存的数据。获取时页要将要获取的键“tokyo”传递给函数库。函数库通过与数据保存时相同的算法,根据“键”选择服务器。使用的算法相同,就能选中与保存时相同的服务器,然后发送get命令。只要数据没有因为某些原因被删除,就能获得保存的值。



 这样,就不同的键保存到不同的服务器,就实现了Memcached的分布式。Memcached服务器增多后,键就会分散,即使一台Memcached服务器发生故障无法连接,也不会影响其他的缓存,系统依然能继续运行。

 

前面将到Memcached服务端是不会互相通信共享信息的,分布式的实现核心是客户端的算法,这个算法叫做Consistent Hashing,关于Consistent Hashing的思想,读者可以在网上搜索详细的分析,这里只简单说明一下。

 

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



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



 因此,Consistent Hashing最大限度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点分布非常不均匀。

 

引系使用虚拟节点的思想,为每个物理节点服务器的continuum上分配100~200个点。这样就能抑制分布不均匀,最大限度地减少服务器增减时的缓存重新分布。

 

通过上文介绍的算法,Memcached客户端函数库进行测试的结果是,由服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下:

(1 - n / (n + m)) * 100

  • 大小: 9.6 KB
  • 大小: 42.3 KB
  • 大小: 26.6 KB
  • 大小: 41.6 KB
  • 大小: 21 KB
  • 大小: 23.8 KB
分享到:
评论

相关推荐

    Memcached分布式缓存

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

    分布式Memcached在社交游戏中的应用研究.pdf

    使用Consistent Hashing算法,Memcached能够在多台服务器之间均衡地分散数据,从而提高了整个系统的可用性和容错性。在社交游戏中部署这种分布式缓存,不仅能够提升数据访问速度,还能在服务器出现故障时,快速实现...

    Ketama一致性Hash算法(含Java代码) 1

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中平衡数据分布的策略,尤其适用于缓存服务如Memcached或Redis。它的核心思想是通过哈希函数将对象映射到一个固定大小的环形空间中,然后将服务器也映射到这个...

    memcached全面剖析.pdf

    而Consistent Hashing算法能够提供一种更均匀的分配策略,以解决分散不均的问题,进一步提高系统的稳定性和可伸缩性。 memcached在实际应用中也表现出色,特别是在需要高并发访问的Web应用程序中。例如,日本的mixi...

    083-分布式协议与算法实战

    1. **Consistent Hashing**:解决动态添加或移除节点时的数据分布问题,保持尽可能少的迁移。 2. **Hadoop YARN**:Hadoop的资源管理系统,负责作业调度和集群资源管理。 3. **Kubernetes调度器**:自动化容器部署...

    一致性哈希算法(ketama hashing)

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中实现负载均衡的算法,尤其在分布式缓存如Memcached和Redis等场景下广泛使用。它解决了传统哈希算法在节点增减时导致的大量数据迁移问题,提高了系统的可用...

    MemCached 全面剖析 memcached.pdf(中文)

    ### MemCached 全面剖析 #### 一、MemCached ...以上内容覆盖了 MemCached 的基本概念、安装使用、内存管理、删除机制、分布式算法以及实际应用场景等方面的知识点,为深入理解和掌握 MemCached 提供了全面的信息。

    Consistent-Hashing:Consistent Hashing 一致哈希

    一致性哈希(Consistent Hashing)是一种分布式哈希算法,主要应用于分布式缓存、负载均衡等领域,例如在Redis、Memcached等系统中广泛使用。它解决了传统哈希算法在节点动态增减时导致的大量数据迁移问题。在Java中...

    memcached的细节文档

    - **ConsistentHashing**:一致性哈希算法,即使缓存服务器数量发生变化,也只影响一小部分数据的存储位置,减少了数据重新分配的影响。 ### memcached的应用和兼容程序 - **mixi案例研究**:研究了mixi如何大规模...

    memcached全面剖析(入门到精通)

    此外,它还引入了Consistent Hashing算法来优化分布式缓存的节点管理,减少因节点增减导致的大规模缓存失效问题。 在实际应用中,mixi作为日本的一个社交网络平台,大规模使用memcached来优化其Web应用的性能。他们...

    解决分布式数据插入数据库~一致性hash算法

    一致性哈希算法(Consistent Hashing)是一种常用于分布式系统中的数据分片策略,它有效地解决了数据在多台服务器间均匀分布的问题,同时减少了因节点加入或离开时的数据迁移成本。 首先,一致性哈希的基本原理是将...

    memcached应用疑惑

    一致性哈希算法(Consistent Hashing)是memcached用于节点管理的关键技术,其目的是在memcached集群节点变动时,尽可能减少受影响的节点数量和数据重新分配的工作量,以此实现节点的动态增加或删除而对整体性能影响...

    初识memcached

    在Memcached的分布式策略中,一致性哈希是一种常用的算法,用于在添加或删除服务器时尽可能地保持数据分布的稳定。相比于简单的余数计算,一致性哈希能更好地处理服务器动态增减的情况,减少了数据重新分布的次数,...

    MySQL查询优化

    因此,文中提出了Consistent Hashing算法作为改进方案。该算法通过将Memcached服务器和键值哈希到一个虚拟的环(continuum)上,然后顺时针查找第一个服务器节点,从而最小化了服务器变动对缓存命中率的影响。 在...

Global site tag (gtag.js) - Google Analytics