分布式的memcache理解要点
本文整理分布式的memcache的几个关键要点:
- 1、分布式体现;
- 2、集群架构;
- 3、雪崩效应及应对策略;
- 4、应用场景。
分布式体现
memcache本身并非是一种分布式的缓存系统,它的分布式是由访问它的客户端来实现的。
一种比较简单的实现方式是依据缓存的key进行hash,当后端有N个memcache服务器时,访问的服务器为hash(key)%N。
集群架构
雪崩效应及应对策略
仔细观察上述的memcache定位算法-hash(key)%N,发现会存在一个严重的漏洞,即若一台缓存服务器down机,其N值将会发生变化,导致原来的key值定位的缓存服务器将会产生变化,大部分key将会重新分布。在高并发场景下可能会带来灾难,因为缓存中均不能命中key,流量洪峰将会转移至后端数据库服务器,而数据库服务器的不可用,将会导致整个应用不可用,形成所谓的“雪崩效应”。
为了解决这个问题,首先需要明确短板在哪里,很明显在定位算法-hash(key)%N这个上面,只要N一变,定位缓存服务器都将会变化。为了使得分布式的缓存系统更加可靠,就需要尽可能降低N的变化带来的路由变化。因此1997年consistent hash算法被提出来了,其核心就是将hash函数的值域空间组成一个圆环,整个空间按照顺时针组织,缓存服务器是这个圆环上的节点,相邻的两个节点间的值域区间都将命中到下一个节点。示意图如下:
consistent hash算法的微妙之处在于,不论缓存服务新增或下线,其影响的范围都控制在变更Node与它之前的Node间的那段区域,不会影响全局。
应用场景
典型的应用场景即基于缓存的分布式session构架。
备注
文中的图片是通过OmniGraffle软件绘制,如果需要文中原图的话,留言即可。
OmniGraffle是Mac平台上的一款绘图工具,请移步Mac流程图工具OmniGraffle介绍-https://blog.****.net/loongshawn/article/details/52282547了解,早些时候可以以优惠价购买授权,目前渠道已经被封了,因此不想花钱的话,只能使用**版本。