一致性hash算法

数据库84

背景

当我们的业务系统大到一定程度时,一台缓存服务器显然不能满足需求,因此需要使用多台缓存服务器。然后针对缓存服务器具体的用户粘性属性,如何设计缓存服务器来提高其命中率,并具有可扩展性。

[En]

When our business system is large to a certain extent, one cache server obviously can not meet the demand, so we need to use multiple cache servers. Then the cache server specific user stickiness attributes, how to design the cache server to improve its hit rate, and has scalability.

普通余数hash

根据某个字段进行取模运算,根据余数值来选择缓存服务器

一致性hash算法

该方式在扩展时存在问题,从5台服务器增加到6台,mod变成6,运算可以得出,之前的余数值全部失效,这样设计就不具有用户粘性了,在缓存大量失效的情况下,数据库的压力就会激增,可能导致数据库宕机或业务中断。

一致性hash

一致性hash算法通过一致性hash环来实现,先构造一个长度为0~2的32次方的整数环,再根据hash算法将缓存服务器映射到这个hash环上。当用户来查询时,将用户特征同样通过hash算法映射到hash环上,然后顺时针查询离这个key最近的缓存服务器节点。

当需要增加缓存服务器的时候,只需要将新的缓存服务器映射到hash环上,影响范围很小,如下图所示,新加入NODE3节点,NODE0节点和NODE2节点不受影响,理论上NODE3节点只分担了NODE1节点50%的流量。

一致性hash算法

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长