五分钟了解一致性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算法计算多个值,每个计算结果在环上定位一个服务节点),在定位数据时,就可以根据虚拟节点,定位到实际服务器。
总结
一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。
本文来自千锋教育,转载请注明出处。
五分钟了解一致性hash算法!相关推荐
- 算法:五分钟了解一致性hash算法
五分钟了解一致性hash算法 前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时 ...
- Java教程分享:五分钟了解一致性hash算法
前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用 ...
- 10分钟了解一致性hash算法
应用场景 当我们的数据表超过500万条或更多时,我们就会考虑到采用分库分表:当我们的系统使用了一台缓存服务器还是不能满足的时候,我们会使用多台缓存服务器,那我们如何去访问背后的库表或缓存服务器呢,我们 ...
- 5分钟带你理解一致性Hash算法
转载自 5分钟带你理解一致性Hash算法 一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot s ...
- 一致性hash算法使用
一.概述 1.我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择.与常规的hash算法思路不同,只是对我们要存储数据的k ...
- 一致性 Hash 算法学习(分布式或均衡算法)
简介: 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的 ...
- 什么是一致性Hash算法?
原文链接:https://blog.csdn.net/bntX2jSQfEHy7/article/details/7954936 最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因 ...
- 关于一致性hash算法的几个问题
本文来说下关于一致性hash算法的几个问题 文章目录 分布式系统的基本概念 分布式系统与高并发高可用 集群和分布式的区别与联系 分布式系统的分发 常用负载均衡策略 Hash取模策略 Hash取模的弊端 ...
- 什么是一致性Hash算法? 1
最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大 ...
最新文章
- 剑指offer:构建乘积数组
- mysql无法插入行_在mysql中数据才插入20多行就报错,求救啊!!!
- 继承机制中的构造器和析构器 - C++快速入门17
- vc2005运行库彻底卸载_解决不安装VC运行库(VC2005,VC2008),程序运行出错的方法...
- GT-----FAQ整理
- 移动支付php,银联手机支付服务端PHP端代码
- Joe博客模板Typecho主题
- 7-15 城市间紧急救援 (10 分)
- C代码写的比Codex还溜的AI神器开源
- Eclipse的工作空间与项目
- 暗黑破坏神(DIABLOII 1.11B)BOT 及源代码公开下载
- android源码在线
- 以内部管理员批准模式_UAC 在管理员批准模式下运行所有管理员(Windows 10) - Windows security | Microsoft Docs...
- 打印文件出现xps_什么是XPS文件?Windows为什么要我将其打印到一个文件?
- c语言报告实验反思,c语言实验总结与反思
- 为什么说千万别用微软 IE 下载 Chrome?
- 棠玥寕在剧组被拍,典雅古装照流出!
- 360浏览器的404报错页
- PostgreSQL 插入数据报错:column “xxx“ does not exist 解决方法
- cshop是什么开发语言_Fecshop 多语言
热门文章
- 上海科技大学ACL2018高分论文:混合高斯隐向量文法
- java第五章抽象类与接口5.1-5.3 2020.3.27+31
- 数字图像处理与Python实现笔记之彩色图像处理初步
- Java 图形用户界面(GUI)布局管理器
- 长安大学第三届ACM-ICPC程序设计竞赛 E题
- servlet和action的区别
- 远程连接——Windows远程连接CentOS远程桌面
- 多人互砍游戏的后台服务器的多线程架构
- 给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79) 哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。【MOOC】
- SpringBoot AOP完全讲解一:基础概念