在MemCached的基础里面,我们讲到MemCached是一个重要特征是它是利用客户端的计算来达到分布式效果的。
1.Cache的分类
根据缓存与应用的耦合程度将其划分为local cache和remote cache(来自于ahuaxuan的分类方式)。
local cache表示缓存的数据和应用程序在同一个JVM内,remote cache表示缓存数据在远程server上,由于local cache与应用程序的实例绑定在一起,因此,当cache更新时,涉及到Cache的同步问题,也就是说,Cache的数据在用户访问不同的应用程序实例时,应该得到同样的结果,一般的Cache server之间的Cache同步采用的是多播的方式广播给集群中的每个节点,或者只是选择其中的某些节点进行Cache的同步,但是当集群中的应用程序实例或者节点较多时,这种Cache的数据同步方案代价是巨大了,在大并发的情况下,很容易成为性能上的瓶颈。
remote Cache,表示Cache的数据在远程的server,应用程序实例通过tcp或者udp协议通过socket到远程server上获取。MemCached是属于remote cache,MemCached本身并没有分布式的能力,但是可以通过客户端的分布式算法,达到分布式的能力。
2.MemCached的客户端分布式算法
我们知道,MemCached 提供了以key,value存储的方式,以存储key=1,value=user1和key=2,value=user2两个数据的cache存储和获取为例,来看看MemCached是如何达到分布式效果的:
由上图可以看到,两个不同的key,存储的时候,存储在不同的MemCached Server上,当在任意一个application server分别获取这个key对应的value时,总是能正确在定位在key对象的cache server上,由此可见,通过客户端某种分布式方法,可以让数据分布在不同的cache server上,而且这种机制,只要key相同,client总是在同一个server上进行各种如put ,get,replace等操作,这种方式显然Memcached server之间的数据不需要同步。
那么客户端,如何做到把数据分散存储到不同的MemCached Server上的呢?
目前有两种非常流行的算法:
2.1求余分散(或者求余Hash)
此算法讲Key的hash值除以MemCached server的数量所得到的余数,而决定讲Cache的数据存储到哪一个MemCached Server上,仍然以刚才key=1,value=user1和key=2,value=user2两个数据为例:
对于key=1, hash值%MemCached server数量=(1%2)=1,存储到MemCached Server2上
对于key=2, hash值%MemCached server数量=(2%2)=0,存储到MemCached Server1上
显然通过这种方式,Cache的数据就会分布在不同的MemCached Server上了
对于获取Cache时,采用的是同样的算法可以定位同样的server上去获取数据
2.2 Consistent Hashing
首先求出memcached服务器(节点)的哈希值,并将其配置到0~232 的圆(continuum)上。然后用同样的方法求出 存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232 仍 然找不到服务器,就会保存到第一台memcached服务器上。
2.3 两种分布式算法的优缺点
当增加MemCache server时:
求余Hash分布式算法 回导致Cache命中率降低,例如对key=8,和9的数据,计算过程如下:
当群中只有两台MemCached server时:
8%2=0
9%2=1
三台:
8%3=2
9%3=0
由上面的计算可以看出,当cache群中加入新的server时,key对应的server几乎完全变了,这样无疑大大影响了它的缓存命中率。
使用consistent hash 的方法,影响的只是新加入server逆时针方向的server节点的命中率。
分享到:
相关推荐
《深入理解memcached分布式缓存数据库部署》 memcached,作为一款高性能的分布式缓存服务器,它的主要任务是缓存数据库查询结果,从而减少对数据库的访问,进而提升动态Web应用的响应速度。这一技术的广泛应用,...
2. 客户端需要实现分布式算法:客户端需要实现分布式算法,以便将数据缓存到不同的 Memcached 服务器上。 Memcached 是一个高性能的分布式缓存系统,能够提高网站的速度和性能,减轻数据库的负载。但是,Memcached ...
总的来说,memcached分布式工具是应对大数据量和高并发场景的有效手段,通过合理的集群部署和管理,能够提升系统响应速度,降低数据库压力,从而提高整体应用性能。在实际应用中,我们需要充分理解其工作原理,结合...
memcached全面剖析–4. memcached的分布式算法.txt
**Memcached分布式缓存入门** Memcached是一款高性能、分布式内存对象缓存系统,它被广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。这个“Memcached分布式缓存入门”资料将引导初学者深入理解...
客户端使用特定的分布式算法(例如一致性哈希)来决定数据应存储在哪个服务器上。这种设计允许Memcached在多台服务器上分散大量数据,减轻单一服务器的压力,并且能实现缓存的扩展性。 Memcached的设计特征包括: 1...
.NET Memcached 分布式缓存应用类库是用于在.NET环境...通过正确使用.NET Memcached分布式缓存应用类库,开发者能够构建出高效、可扩展的应用,显著提升服务响应速度,降低数据库压力,提高整体系统的性能和用户体验。
总结来说,Memcached的分布式缓存实现主要依赖于客户端的哈希算法,包括余数计算分散法和一致性哈希。这些策略确保了数据在多台服务器间的有效分布,减少了数据库的压力,提高了系统的响应速度和可扩展性。在实际...
3. **分布式**:通过哈希算法将键分发到集群中的不同节点,实现数据的分布式存储,提供扩展性和高可用性。 4. **LRU(Least Recently Used)策略**:当内存满时,memcached 采用 LRU 策略淘汰最近最少使用的数据。 ...
### Memcached分布式缓存技术特点 Memcached作为一个开源的高性能内存对象缓存系统,具有以下特点: 1. **协议简单**:Memcached服务器与客户端之间采用基于文本行的协议进行通信,支持多种方式获取数据。协议的...
7. **故障转移与分布式一致性**:如何处理节点故障,以及Memcached的分布式一致性哈希算法。 8. **性能优化**:缓存命中率提升技巧,避免缓存击穿、雪崩等问题的方法。 9. **源码分析**:如果包含源码,可能涉及具体...
### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...
4. **分布式机制**:尽管各个memcached实例之间并不直接通信,但它们可以通过客户端的哈希算法实现数据的分布式存储。 分布式原理: Memcached 的分布式实现主要依赖于客户端的哈希策略。当客户端需要存储或检索...
- **分布式**: 通过哈希算法,Memcached 可以将数据分发到多台服务器上,实现数据的分布式存储,提高了服务的可扩展性。 2. **优势** - **高性能**: 由于数据存储在内存中,读取速度极快,极大地提升了服务响应...
正如第1次中介绍的那样,memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括第2次、第3次前坂介绍的内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端...
目前为止我找到的关于memcached(分布式缓存)最详细的中文资料。
3. **分布式哈希**:为了实现分布式存储,Memcached使用一致性哈希算法,将键映射到不同的服务器节点上。这样,即使在服务器动态增减的情况下,大部分键的映射关系也能保持不变,降低了数据迁移的复杂性。 4. **预...
### 缓存应用--Memcached分布式缓存简介(二) #### 1. 命令行查看状态 在日常运维和开发过程中,了解Memcached的实时状态是非常重要的。通过简单的命令行工具,我们可以轻松地获取到Memcached服务的运行状态。 - *...
4. **非通信的分布式架构**:各个Memcached服务器之间不进行通信,分布式特性主要由客户端实现,通过算法决定数据存储在哪个服务器上。 在内存管理方面,Memcached采用了一种名为**Slab Allocation**的机制。这个...