分布式Memcached缓存服务架构
由于单台Memcached服务器的内存容量是有限的,并且单台也存在单点故障,因此,就需要将多个Memcached服务器组合起来提供服务,那么怎么组合效率才更高呢?
1. cache服务使用常规负载均衡模式的问题
2. 分布式缓存集群
a) Memcache支持分布式集群,其中方法之一就是在客户端应用程序上进行改造。例如:可以根据key适当进行有规律的封装,比如以用户为主的网站来说,每个用户都有 UserID,那么可以按照固定的id来进行提取和存取,如果1开头的用户保存在第一台memcache服务器上,以2开头的用户的数据保存在第二台 mecache服务器上,存取数据都按照UserID来进行相应的转换和存取。
但是这个有缺点,就是需要对UserID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据在iji的实际业务来进行考虑,或者去想更合适的方法
b) 在应用服务器上通过程序及URL_HASH,一致性哈希算法驱访问Memcached服务,所有Memcached服务器的地址池可以简单的配在每个程序的配置文件里。
c) 可以用Nginx的分支tengine实现对Mc的负载均衡,和普通web应用服务相比,这里的重点是调度算法,Mc服务一般会选择hash或一致性hash算法
i. 完整缓存,如果是多台就直接负载均衡。特点所有缓存数据都一样。百度的memcached TB 级别。一台机器的内存没那么大。就必须分布式。
ii. 热点缓存、分布式缓存
分布式缓存集群设计思想
1) 每一台MC服务器的内容都是不一样的,这些服务器内容加起来接近整个数据库的容量。
2) 通过在客户端程序或者MC的负载均衡器上用HASH算法,让同一内容都分配到一个MC服务器、
3) 普通的HASH算法对于节点宕机会带来大量的数据流动(失效),可能会引起雪崩效应
4) 一致性哈希算法(还可以带虚拟节点)可以让节点宕机对节点的数据流动(失效)降到最低。
分布式Memcached缓存集群调度算法
取模计算Hash
优点:简单、分散性优秀
缺点:添加/移除服务器时,缓存重组代价巨大,影响命中率
例:26个字母有三个节点增加一个节点,命中率下降了23%