五分钟了解一致性hash算法

前言

一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中。

比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用一致性hash算法,就能较好的解决该问题。

Hash值取模算法存在的问题

比如,我们有海量的图片存储在服务器上,假如,现在有4台服务器,我们可以根据图片名称,采用hash算法,决定图片存储在哪台服务器

如果现在需要增加服务器,那么存取图片的服务器的算法就会发生改变,比如增加一台服务器后,算法变为hash(a.jpg)/5,这时候计算结果不一定还是2,那么图片的位置就要发生改变。同理,减少服务器的话,也会存在相同问题。而且,所有的服务器都会受到影响。

一致性Hash算法

一致性Hash算法将哈希值映射的空间表示成一个虚拟圆环,一般可以设置映射值的范围是0----232-1,也就是说,我们得到的hash值要对232取模。该hash环可表示如下:

假如我们有四台服务器,我们可以选择服务器的ip或主机名作为关键字进行哈希,然后取模,每台机器就能在hash环上确定固定位置。如下图所示:

例如有Object A、Object B、Object C、Object D四个数据,经过哈希运算及取模后,在环空间上的位置如下图所示:

  

从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。也就是说Object A定位到Node A,Object B定位到Node B,Object C定位到Node C,Object D定位到Node D。

如果Node C这台服务器出现问题宕机,那么Objcet C定位到Node D这台服务器,所以当某台服务器出问题时,只会对顺时针方向的前一台机器产生影响,本例中,只会对Node D有影响。

同理,如果增加一台服务器Node X,计算后,定位到如下图所示位置:

那么Object C就会定位到Node X,这种情况,只会对顺时针方向的Node C产生影响,不会影响其他服务器。

一致性Hash的缺点

当服务器节点比较少的时候会出现一致性hash算法倾斜的问题(大部分数据存在一台服务器上)。在不改变服务器节点个数的前提下,一般解决方案是增加虚拟节点(即对每一个服务器根据一致性hash算法计算多个值,每个计算结果在环上定位一个服务节点),在定位数据时,就可以根据虚拟节点,定位到实际服务器。

总结

一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。

转载于:https://juejin.im/post/5cf78073e51d454d565357a6

算法:五分钟了解一致性hash算法相关推荐

  1. 五分钟了解一致性hash算法!

    前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用 ...

  2. Java教程分享:五分钟了解一致性hash算法

    前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用 ...

  3. 10分钟了解一致性hash算法

    应用场景 当我们的数据表超过500万条或更多时,我们就会考虑到采用分库分表:当我们的系统使用了一台缓存服务器还是不能满足的时候,我们会使用多台缓存服务器,那我们如何去访问背后的库表或缓存服务器呢,我们 ...

  4. 一致性hash算法虚拟节点_一致性Hash算法原理详解

    数据分片 先让我们看一个例子吧: 我们经常会用 Redis 做缓存,把一些数据放在上面,以减少数据的压力. 当数据量少,访问压力不大的时候,通常一台Redis就能搞定,为了高可用,弄个主从也就足够了: ...

  5. 一致性hash算法虚拟节点_一致性 Hash 算法

    一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P ...

  6. 什么是一致性Hash算法?

    原文链接:https://blog.csdn.net/bntX2jSQfEHy7/article/details/7954936 最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因 ...

  7. 关于一致性hash算法的几个问题

    本文来说下关于一致性hash算法的几个问题 文章目录 分布式系统的基本概念 分布式系统与高并发高可用 集群和分布式的区别与联系 分布式系统的分发 常用负载均衡策略 Hash取模策略 Hash取模的弊端 ...

  8. 什么是一致性Hash算法? 1

    最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大 ...

  9. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

最新文章

  1. fastjson总结
  2. 简述php中文件上传过程,简单php文件上传详细说明
  3. 嘉宾PPT分享|泛娱乐领域音视频技术探索与实践
  4. markdown 语法_Markdown 基本语法
  5. 设计模式学习(三)——装饰器模式
  6. Mybatis-puls打印sql语句
  7. python 图像宽度_正确的方法和Python包可以找到图像的宽度
  8. 微信小程序 16 登录界面
  9. java 课件_java ppt课件
  10. 毕业论文格式(图片题注引用,表格,公式格式)
  11. 中国全电动注塑机行业发展趋势及未来需求前景预测报告(2022-2027年)
  12. react加水印_图片添加水印
  13. python中scale啥意思_scale什么意思
  14. 《绮梦朦胧,一眼浮生醉流年》
  15. Webpack 中 CSS 压缩插件
  16. React.createElement的理解使用
  17. k8s介绍及与docker搭建集群
  18. Map集合中的entry是什么?
  19. android 微信6.2.0 AndroidManifest.xml
  20. C语言400行实现文本编辑器

热门文章

  1. easymock 图片_easy-mock的使用
  2. 截屏悬浮软件_【第295期】FV悬浮球,一款全能悬浮球
  3. php json_encode 后直接复制给js怎么调用,如何将数组从php(使用json_encode)传递给javascript...
  4. 一切都是问题,一切都着落在自身
  5. mysql 时差查了13小时_Mysql 时间差了 14 或 13 小时 com.mysql.cj.jdbc.Driver
  6. 2021物理大事汇:μ子磁性异常,时间晶体现身,天体物理大丰收
  7. 「无糖快乐水」就安全了?不不,心血管疾病的风险照样增加
  8. B站up主硬核打造「螃蟹火星车」,遥控、拍照、测距,还能做人脸检测;网友:赛博螃克...
  9. BERT小学生级上手教程,从原理到上手全有图示,还能直接在线运行
  10. 开工快乐!AI内参邀你继续学习,并送上50元优惠券!