先来一张图,memcached分布式集群的访问模型图:

上图中,api访先问memchached集群时,先通过路由算法获取key所对应的物理机器IP,然后再到相应的服务器上获取缓存数据。
下面通过路由算法来解释hash一致性算法:
传统hsah算法
最简单的计算方法是对key的hash取模,然后获取所在机器。如下图所示,假如有3台机器作为集群,当要访问一个key的value时,先对key取hash值然后除以3,即可得出在第几台机器。然后去相应的机器访问取值。

上述算法是最简单最直接的的办法。但是会有很大的缺陷。
如下图,当业务访问量增加,需要在集群中增加一台缓存服务器解决所面临的的访问压力。由于这台机器的加入,需要修改原来的路由算法,改成hash值取4。这样经过计算后的hash值最终才会落到4台机器上。

但是,经过计算,这样做会导致原来 75%的数据命不中缓存。如果原来有100台服务器,在加入一台后,将会导致99%的缓存无法命中。而此时,大量的访问最终会压到数据库,从而导致数据库宕机。显然是得不偿失的。
另一种极端情况是,当有一台服务器突然失效的时候,同样会造成大量的缓存无法命中。
其中有一种解决办法:半夜的时候加入(网站的访问低谷通常在半夜),然后通过模拟请求,慢慢给缓存预热。
一致性hash算法
上面的

本文介绍了在分布式缓存系统中如何使用一致性Hash算法解决传统Hash算法存在的问题,包括系统扩展困难和容错能力弱等。文章详细阐述了一致性Hash算法的工作原理,并进一步介绍了通过引入虚拟节点来提高负载均衡的方法。

389

被折叠的 条评论
为什么被折叠?



