一致性哈希

  • 时间:2022-03-15 15:03 作者:我犟不过你 来源: 阅读:441
  • 扫一扫,手机访问
摘要:出现的起因在分布式系统中,我们通常需要对相同服务器做负载均衡,或者者将某些请求打到同一台服务器上,这是我们使用哈希算法,比方通过用户端的ip,对服务器个数进行取模,如下图所示:image.png弊端:上述方案存在显著的弊端,当需要对服务器进行扩容,或者者有服务宕机后,则经过Hash的结果必然会发生问题。

出现的起因

在分布式系统中,我们通常需要对相同服务器做负载均衡,或者者将某些请求打到同一台服务器上,这是我们使用哈希算法,比方通过用户端的ip,对服务器个数进行取模,如下图所示:

image.png

弊端:上述方案存在显著的弊端,当需要对服务器进行扩容,或者者有服务宕机后,则经过Hash的结果必然会发生问题。

一致性哈希

一致性哈希也是使用取模的形式,但是不是对服务器个数进行取模了,而是对2^32 -1取模。即将0 ~ 2^32-1 的无符号整型分布在一个圆形的环上。从正上方的0开始顺时针旋转,一直到2^32-1,哈希环如下图所示:

哈希环

模拟三台服务器在哈希环上的情况:
这时候来了三个用户端经哈希取模分别访问三个服务器,具体如下图所示:

一致性哈希举例

如上图所示,有三个服务器,分别是Server1、Server2、Server3,有三个用户端进行访问,分别是client1,client2,client3。
1)三个用户端经过哈希取模,如图分别落在了哈希环的三个节点上。
2)三个用户端的节点会进行顺时针寻觅,知道发现服务器为止。
client1 -> Server1;
client2 -> Server2;
client3 -> Server3;

模拟一台服务器宕机的情况
如果说Server2这时候宕机了,那么client2的请求经过顺时针寻觅,最终会落在Server3上,如下图所示:

Server2宕机

模拟添加一台服务器的情况
这时候服务器添加了一台ServerN,这个ServerN处于Server2和Server3之间,那么最终可能导致流下Server3的请求落在ServerN上,而Server1和Server2没有影响,如下图所示:

添加ServerN

数据倾斜问题

细心的同学应该发现了,当哈希环节点很少的时候,很难做到像轮一样一人一次的效果,可能会导致大量的请求打在同一个server上,client1、client4、client5、client6的请求一律落在Server1上,如下图所示:

数据倾斜

数据倾斜问题处理方案
一致性哈希为理解决数据倾斜的问题,引入了虚拟哈希的处理方案。即在哈希环上放置很多服务节点的虚拟节点,相当于添加了节点数量,而内部只要要做每个虚拟节点到实际节点的映射就可,以Server1举例,如下图所示:

数据倾斜处理方案

一点结论
当物理节点越多,虚拟节点就越多,服务可用性就越高。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部