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宕机也仅仅影响一小段数据。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值