Memcache 分布式高可用集群介绍

分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。 
一、常用分布式算法 
Memcached在实现分布集群部署时,Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached 服务端。 
1.取模 
currServer = serverList[ hash(key) % sizeof(serverList) ] 
余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。那就是当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中。 
2.一致性hash 
原理,首先求出memcached 服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232 仍然找不到服务器,就会保存到第一台memcached 。 
关于一致性hash算法详解,请参考: http://www.tuicool.com/articles/jeae6j

余数分布式算法由于保存键的服务器会发生巨大变化,而影响缓存的命中率,但Consistent Hashing中,只有在continuum上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响,最大限度地抑制了键的重新分布。 

二、多副本、故障转移 
memcached对容错不做处理的,也就是说当Memcached 服务端挂掉或者 Memcached 重启复活,由于Memcached重启后无数据,对高并发的大型系统中,是没办法接受的,我们在集群的情况下,要做到负载均衡和容错 ,这种情况下, 服务器端挂掉,负载就不那么均衡,缓存数据也会丢失 ,重新对数据库进行操作,加大的系统的性能, 数据丢失容错也没做得那么好。 Memcache自身并没有实现集群功能,如果想用Memcahce实现集群需要借助第三方软件或者自己设计编程实现,如repcached、memagent、 memcached-ha等。

注:Memcached集群中节点机需要实现时间同步。

参考文章: 
memcache集群 
http://www.open-open.com/lib/view/open1340337319596.html
分布式缓存系统 Memcached 
http://www.tuicool.com/articles/6FbuQv
Redis/Memcache代理服务Twemproxy简介 
http://www.tuicool.com/articles/bIFJjia
构建高可用的缓存集群的开源解决方案 
http://www.tuicool.com/articles/NNJ7bq
为什么不能用memcached存储Session 
http://www.tuicool.com/articles/ENJzyuv

你可能感兴趣的:(Memcached,Memcache学习与应用)