• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

求求你别问我一致性hash了

技术杂谈 勤劳的小蚂蚁 3个月前 (02-03) 56次浏览 已收录 0个评论 扫描二维码

面临的问题

首先,只有存储型的组件,我们才会使用一致性hash;计算型的服务增删节点对整个任务一般没影响,所以负载均衡直接用random就可以。那么像redis、memcache怎么实现负载均衡的呢? 和普通的hash对比核心要解决的问题是:增删机子,hash不失效,节点变动尽可能少。
求余hash算法:
hash(object)%N
一个缓存服务器宕机了,这样所有映射到这台服务器的对象都会失效,我们需要把属于该服务器中的缓存移除,这时候缓存服务器是 N-1 台,映射公式变成了 hash(object)%(N-1) ;由于QPS升高,我们需要添加多一台服务器,这时候服务器是 N+1 台,映射公式变成了 hash(object)%(N+1) 。

一致性HASH算法

  1. 一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环.
    hash环
  2. 存储服务器的ip或主机名作为关键字进行hash。
    服务器hash
  3. 将存储/查询对象hash进行hash, 确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器!
    顺时针hash

扩容、缩容

现假设Node C不幸宕机,可以看到此时对象A、B、D不会受到影响,只有C对象被重定位到Node D。在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器。扩容同理。
扩容、缩容

应用

很多存储组件都是用的一致性hash来做Partition,比如Apacha Cassandra(一种nosql数据库), Dynamo, CouchBase.

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:求求你别问我一致性hash了
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00