Memcached笔记之分布式算法(idv2.com)
1.根据余数进行分散:离散度高,但是增加或者移除服务器的时候,缓存充足的代价非常大。添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而音像缓存的命中率。
2.Consistent Hashing:求出memcached服务器节点的哈希值,然后将其配置到0~2^32的圆上,然后用同样的方法求出存储数据的键的哈希,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过2^32仍然找不到服务器,就会保存到第一胎memcached服务器上。
这样在添加一台服务器,只有在continuum上增加服务器的地点逆时针方向的第一胎服务器的键会受到影响,最大程度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum上分配100~200个点。这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。
由服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式:(1 n/(n+m)) * 100