Memcached分布式缓存集群
- 最简单的方法是通过路由算法可以实现余输Hash:用服务器是数目除与缓存数据Key的hash值,如key为7,有3台服务器,那么余数就是1,由此可见访问编号为1的服务器(编号从0开始)。
由于key是随机产生的,这样对于整个服务器集群来说访问压力是相对平均的
上述方法有一个问题:如果新加了2台缓冲服务器,那么7除于5就等于2,本来在缓存服务器一中有缓存数据,可是由于新加缓存服务器导致没有命中(需要到数据库中查找)。
命中率为(1-(n/n+m)):n为原有数目,m为新增数目。这样命中率在明显不合适 - 分布式缓存的一致性hash算法
实现原理:先构建一个长度为0-2^32的整数环(这个环被称为一致hash环),更加节点名称的hash值将缓存服务器节点放置在这个hash环上,然后更加需要查找数据key计算hash值,在顺序查找服务器的hash,匹配与需要查找数据的hash值最近的服务器hash值
产生问题:当一部分原来需要访问缓存服务器1的,现在访问缓存服务器3,但是缓存0与缓存2的数据负载压力不变,不符合负载一致性原则 - 增加一个虚拟层(计算机的任何问题都可以通过增加一个虚拟层来解决)。
将每台物理缓存服务器虚拟为一组虚拟缓存服务器,将虚拟服务器的hash值放置在hash环上,key在环上先找到虚拟服务器节点,在得到物理服务器的信息
这三种方法现在只是看懂了第一种,望如果看了这书的人不吝赐教