Memcached的分布式

Posted 低调的洋仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Memcached的分布式相关的知识,希望对你有一定的参考价值。

Memcached分布式缓存系统如何实现的缓存功能,其服务器之间不存在相互的通信,其分布式主要是依靠于客户端的对于key的映射,映射到不同的服务器上以此来实现分布式的存储和查询,当然了这个映射较为固定,且一般情况下,映射到某一台主机后基本不会变化主机地址,除非发生宕机等事故时,可以通过重新计算映射到其他服务器上去。

Memcached客户端通过配置SockIOPool的servers参数保存服务器地址列表,通过weight参数配置每一台服务器的权重,SockIOPool提供了连接池的服务,可以通过SockIOPool来配置memcached服务器的相关信息。

一个key只能放在一个Memcached服务器上面,是不会在多个服务器上有多份拷贝的,防止出现一个数据多个版本而不知道该采用哪个版本才好的情况的发生,也可以避免磁盘空间的浪费。

其特点主要有:

1. 服务端不关心分布式

2.依靠客户端实现分布式

3.客户端存储可以访问到的Memcached服务器的列表

4.在客户端通过算法保证同样的key值的数据读写操作同一个服务器

 

 

映射的方法

 

1. 根据取余数的计算方式

这种方式简单而且分散性好,但是当添加或者删除服务器的时候,缓存重组的代价非常大。

 

2.一致性Hash算法

首先求出Memcached服务器的hash值,并将其配置到0-2的32次方的圆上。然后利用同样的方法,将key也映射到这个圆上,从数据映射的点处开始顺时针查看离他最近的服务器是哪个,找到后将该key存储到该服务器上面即可。

不过这种方式可能会造成一段区域内的key都映射到同一个服务器上面去,那么,一旦这个服务器宕机,这一段的key的数据将丢失对整个系统影响比较大。

为了解决这个缺陷,再次引入虚拟hash,就是说将一个服务器在圆上虚拟产生多个点,然后均匀的分布在圆上,比如服务器A和服务器B之间就会分布有多个其他的服务器的虚拟节点,那么这段区域的部分数据也就不仅仅是映射到B了,而是A、B、C.....等等的服务器都可能会存在,那么即便B宕机也仅仅影响一小段数据。

 

 

以上是关于Memcached的分布式的主要内容,如果未能解决你的问题,请参考以下文章

为什么不能用memcached存储Session?

Memcached的特点和使用

Memcached的分布式

Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

分布式memcached学习—— 一致性hash算法原理