前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分方式缓存常用的一致性hash是什么原理

分方式缓存常用的一致性hash是什么原理

作者头像
dys
发布2018-04-03 13:50:22
9220
发布2018-04-03 13:50:22
举报
文章被收录于专栏:性能与架构性能与架构

一致性hash是用来解决什么问题的? 先看一个场景 有n个cache服务器,一个对象object映射到哪个cache上呢? 可以采用通用方法计算object的hash值,然后均匀的映射到到n个cache hash(object) % n 初始阶段运行正常,但当cache服务器发生变动后就会出现问题 例如 (1)一个cache服务器down掉了,这样所有映射到此cache的对象都会失效,需要把此cache移除,这时候映射公式变成了 hash(object) % (n-1) (2)由于访问加重,需要添加cache ,这时候映射公式变成了 hash(object) % (n+1) 这两种情况几乎会使所有的cache都失效,大量的访问都会直接访问后台服务器,造成极大的压力 一致性hash算法就是为了解决普通hash的不足,把损失降到最低 一致性hash的原理 一致性hash将整个哈希值空间组织成一个虚拟的圆环 假设某哈希函数H的值空间为0-2^32-1(2^32为2的32次方) 整个空间按顺时针方向组织,0和232-1在零点中方向重合

把各个cache服务器通过hash计算,根据hash值顺时针排列到圆环上,可以根据服务器的IP或者主机名进行计算 例如有 A B C 三台服务器

现在可以映射object了,映射规则为: 将key使用相同的hash计算出值,并确定此数据在环上的位置,从此位置顺时针行走,第一台遇到的cache服务器就是其应该定位到的服务器 例如有4个object需要映射到cache服务器

根据映射规则 object 1 -> A object 2、3 -> B object 4 -> C 下面看cache服务器的增减情况 (1)移除 例如A出现异常,需要移除

object 1 失效,需要映射到B 受影响的只有object 1 (2)添加 cache压力增加,需要添加服务器,新增cache服务器D

object 2 需要重新映射到D 受影响的只有object 2 可以看到一致性hash比普通hash高效了很多

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档