前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >求求你别问我一致性hash了

求求你别问我一致性hash了

作者头像
Leetcode名企之路
发布2018-11-08 18:19:02
5890
发布2018-11-08 18:19:02
举报
文章被收录于专栏:Leetcode名企之路Leetcode名企之路

面临的问题

首先,只有存储型的组件,我们才会使用一致性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环

  1. 存储服务器的ip或主机名作为关键字进行hash。

服务器hash

  1. 将存储/查询对象hash进行hash, 确定此数据在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器!

顺时针hash

扩容、缩容

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

扩容、缩容

应用

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

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

本文分享自 Leetcode名企之路 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面临的问题
  • 一致性HASH算法
  • 扩容、缩容
  • 应用
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档