什么是一致性hash?
一致性hash
前言
说出来大家可能不相信,我昨天做梦梦到自己在面试,然后面试官问了我这个问题哈哈~然后我就打算按照自己的理解写一写。如果有写的不对的欢迎大家指正!
直接开始
普通hash算法
普通hash算法就是把存储的key取hash然后再对节点数取模之后判断key所在节点的位置,
如上图所示,假设现在有key1,key2,key3,key4四个key,通过上面说的方法均匀分布在了这4个节点上面。看上去非常nice~
但是如果现在我们集群需要扩容,增加一台机器会发生啥?
可以看到,由于现在增加了一台机器,所以现在我们取模的对象由3变成了4。
导致什么现象呢?假设我们的数据现在没有迁移,那原来的key3和key4本来是分别在node0和node1上的,现在通过hash取模运算之后却是在node0和node3上,所以在数据不做迁移的情况下会导致原有的缓存会大量失效。然后这种大面积的数据迁移是非常麻烦的!
这是扩容导致的问题,如果集群中的节点宕机呢?
现在node2挂了,集群节点数量变成了2,对应的key通过hash取模之后所在的节点也会变化。导致node2上面原有的key查询不到,会直接查库。其余的key,除了key1能正常查询外,其他key全都失效了。这时不仅涉及到数据迁移还会导致缓存穿透。
一致性hash
一致性hash其实是普通取模hash算法的改良版,其hash计算方法没有变化,但是hash空间发生了变化,由原来的线性的变成了环。缓存节点通过hash计算之后得到在hash环中的位置;key通过hash计算之后得到所在环的位置,然后顺时针方向找到第一个节点,这个节点就是存放key的节点。
来看看一致性hash是如何解决普通取模hash中扩容和宕机的问题的。
假设现在我们增加了一个节点node3,原来的key1现在顺时针找到了新增加node3,对其余的节点没有任何影响。只需要将node0到node3之间的key迁移到新的节点即可。
如果node2现在宕机了,那么原来的key2顺时针找到的节点会变成node0,其余节点也没有任何影响,只需要把node2上的key迁移到node0上即可。
那这个一致性hash难道就没有啥毛病了嘛?
想一下,如果我们的节点数量很少,并且节点偏向一侧会发生什么事情?
可以看到很大一部分的key都会落在node0上,从而导致node0的压力过大挂掉,node0挂掉之后数据同时又会向node1上转移,node1又会挂掉,最终导致整个集群不可用!这就是数据倾斜的问题,会引起节点雪崩。可想而知这个问题会很严重。
一致性hash优化
数据倾斜的问题是通过虚拟节点来解决的。
就是在节点稀疏的hash环上对物理节点虚拟出一部分虚拟节点,key会打到虚拟节点上面,而虚拟节点上的key实际也是映射到物理节点上的,这样就避免了数据倾斜导致单节点压力过大导致节点雪崩的问题。
结语
做梦引起的一片博文。
介绍了普通取模hash的弊端,一致性hash如何解决,以及一致性hash优化的问题。
上面的介绍如果有什么不对的地方希望各位能指正~我也会虚心接受。
什么是一致性hash?的更多相关文章
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 转载自lanceyan: 一致性hash和solr千万级数据分布式搜索引擎中的应用
一致性hash和solr千万级数据分布式搜索引擎中的应用 互联网创业中大部分人都是草根创业,这个时候没有强劲的服务器,也没有钱去买很昂贵的海量数据库.在这样严峻的条件下,一批又一批的创业者从创业中获得 ...
- 一致性hash算法详解
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- 探索c#之一致性Hash详解
阅读目录: 使用场景 算法原理 虚拟节点 代码示例 使用场景 以Redis为例,当系统需要缓存的内容超过单机内存大小时,例如要缓存100G数据,单机内存仅有16G时.这时候就需要考虑进行缓存数据分片, ...
- 一致性hash算法简介
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...
- 分布式缓存技术memcached学习(四)—— 一致性hash算法原理
分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...
- 关于Memcached一致性hash的探究
参考文章 http://blog.chinaunix.net/uid-20498361-id-4303232.html http://blog.csdn.net/kongqz/article/deta ...
- 一致性 hash 算法( consistent hashing )a
一致性 hash 算法( consistent hashing ) 张亮 consistent hashing 算法早在 1997 年就在论文 Consistent hashing and rando ...
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
作者:吴香伟 发表于 2014/09/05 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个 ...
- 一致性Hash算法
from wikipedia 一致哈希 历史 1997年由MIT的Karger等在一篇学术论文中提出如何将“一致性Hash”应用于用户易变的分布式Web服务中.也可用于实现健壮缓存来减少大型Web应用 ...
随机推荐
- algorithm & bitwise operation & the best leetcode solutions
algorithm & bitwise operation & the best leetcode solutions leetcode 136 single-number the b ...
- GitHub Packages
GitHub Packages https://github.com/xgqfrms?tab=packages // Step 1: Use `publishConfig` option in you ...
- 同城速递 & 同城跑腿 & 竞品分析
同城速递 & 同城跑腿 & 竞品分析 toC / toB 闪送 https://www.ishansong.com/ https://www.tianyancha.com/compan ...
- c++ 遍历当前程序的线程
#include <iostream> #include <Windows.h> #include <Psapi.h> #include <TlHelp32. ...
- macOS & wifi & ip
macOS & wifi & ip mac show wifi ip # wireless ipconfig getifaddr en1 # ethernet ipconfig get ...
- Masterboxan INC发布《2019年可持续发展报告》
近日,Masterboxan INC万事达资产管理有限公司(公司编号:20151264097)发布<2019年可持续发展报告>,全面回顾了在过去一年Masterboxan INC开展的可持 ...
- Python数据结构与算法_搜索插入位置(07)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5输出 ...
- Mybites逆向工程的搭建
这个链接写的很全:https://www.cnblogs.com/whgk/p/7140638.html 这段时间太忙,等周末写上自己尝试的步骤.暂时仅作记录.
- 代码小知识之UUID
1.生成UUID(UUID保证对在同一时空中的所有机器都是唯一的,UUID的唯一缺陷在于生成的结果串会比较长.UUID 来作为数据库数据表主键是非常不错的选择,保证每次生成的UUID 是唯一的) UU ...
- .NET gRPC 核心功能初体验,附Demo源码
gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心). 由Google开源,目前是一个Cloud Native Computing Foundation(CNCF)孵 ...