一致性哈希算法
一致哈希算法 Consistent Hashing 标签(空格分隔): Java基础 1.场景描述(分布式缓存问题) 有三台缓存服务器sever1,server2,server3,如何读写呢?有如下方法 随机访问 哈希计算(取模法) 一致性哈希 随机访问 每次请求随机发送到一台缓存服务器,策略简单但是会导致问题: 同一份数据可能被存在不同的机器上造成数据冗余 数据已有缓存,但是没有命中 所以,随机策略在时间效率、空间效率上都不是很好。 哈希计算(取模法) 解决相同key访问发送到同一服务器的常用方法->计算哈希。如下 server=Hash(key)%3 这样会解决随机访问导致的问题。但是有产生了新的问题: 容错性:系统中有服务器不可用时,整个系统是否可正确高效运行 扩展性:加入新的服务器,整个系统是否可正确高效运行 假设现在有一台机器宕机了,那么之前的算法就要改为 server=Hash(key)%(N-1) 增加一台服务器,则变为 server=Hash(key)%(N+1) 这会导致无论是增加还是减少服务器都会从新计算Hash。从而导致缓存不命中问题。 一致性哈希 分布式系统每个节点都可能失效,在节点失效或者加入新节点后,如何把对数据的影响降到最低?在分布式缓存中,如果没有好的算法,某个节点失效或者加入新节点后,会对当前缓存的命中率产生巨大的影响。 传统Hash也不是最优解