`
mowengaobo
  • 浏览: 161353 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

MemCached的分布式算法

 
阅读更多

在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全面剖析–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