首页 > 编程语言 >一致性哈希算法

一致性哈希算法

时间:2023-01-11 22:55:06浏览次数:45  
标签:环上 算法 哈希 一致性 服务器 节点 客户端

一个良好的分布式哈希方案,应该具有良好的单调性,即服务节点的增减不会造成大量哈希的重新定位。

首先,一致性哈希算法会将整个哈希值空间理解成一个环,其取值范围是 \(0\sim2^{32}-1\) 共 4G 的整数空间:

然后,将所有的服务器进行哈希,最终落在这个一致性哈希环上。现在假设有 A、B、C 三台服务器,它们经过哈希后,相应的位置如下:

对客户端进行负载时,先通过哈希输入值得到一致性哈希环上的一个哈希值,然后顺着顺时针方向,所遇到的第一台服务器,就是最终所需要负载到的服务器。如下图,现在有 1、2、3、4 四个客户端分别被哈希到该环上的不同位置,可见,最终 Client1 会被分配给 Server C,Client 2 和 Client3 会被分配给 ServerB,Client4 会被分配给 ServerA:

对于在简单哈希算法中所存在的“重新定位”的问题,在一致性哈希算法中会得到相应的解决。

假如此时 ServerC 挂掉了,那么原来在 ServerB 上的 Clinet2 和 Client3 依然会在 ServerB 上,Client4 也是一样,仅仅只有 Client1 改变到了 ServerB 上:

而假如此时新增加了一台服务器 ServerD,如下图所示,那么 Client1、Client2、Client3 都不会收到影响,仅仅只有 Client4 受到了影响:

综上所述,一致性哈希算法的容错性和可扩展性的分析如下:

  • 容错性:当某个服务器挂掉时,仅仅只有分发在所挂掉的服务器上的客户端会受到影响;
  • 可扩展性:当增加一台服务器时,受影响的客户端仅仅只有在新增加的服务器沿着逆时针方向所碰到的上一台服务器之间的客户端;

可见,对于一致性哈希算法而言,服务节点的增减并不会造成大量哈希的重新定位。

但是,如果服务器在哈希到哈希环上时如果过于紧凑,那么服务器的压力就不能做到尽量平均分配,如下图所示,可见,四个客户端都会被分配给 ServerB,而 ServerA 上却并未分配客户端:

为了使得在哈希环上的服务器节点分配更加分散,可以使用【虚拟节点】的方法来进行处理。虚拟节点即将同一个主机在哈希环上设置多个虚拟主机,如下图所示中的服务器 A 和 服务器 B,在每个虚拟节点中存储的是真实的物理主机地址:

虚拟节点的引入就是为了防止物理节点过少,导致哈希处理后,在一致性哈希环上挤在一起,导致某一台服务器负载太多,其它的服务器一直很空闲。

标签:环上,算法,哈希,一致性,服务器,节点,客户端
From: https://www.cnblogs.com/tuilk/p/17045134.html

相关文章

  • 代码随想录算法训练营第一天|704.二分查找、27.移除元素
    一、参考资料数组理论基础文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html二分查找题目链接:https://leetcode.c......
  • 代码随想录算法训练营day01| 704. 二分查找、27. 移除元素
    数组基础知识数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的。数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖。704二分查找......
  • 【java】冒泡Bubble算法
    冒泡Bubble算法 微信公众号:​​程序yuan​​关注可获得更多干货和视频教程哦。问题或建议,请公众号留言;面试中很常被考到的一道题,就是冒泡排序,可以说是非常经典了参考网上......
  • Raft算法
    什么是RaftRAFT协议是一种共识算法(consensusalgorithm)。什么是共识算法,说白了也就是大多数成员达成一致的算法。那对于大多数有定量吗?有,大于等于N/2+1就是大多数,也就是......
  • 代码随想录算法训练营第一天 数组 | 704. 二分查找 | 27. 移除元素
    数组使用连续的内存空间,间隔为储存数据类型的大小,C++中多维数组的内存空间也是连续的。二分查找二分查找多用于有序数组,通过不断缩小查找范围来实现。具体实现一般有......
  • 「笔记」manacher 算法
    目录写在前面简介算法流程复杂度证明写在最后写在前面才发现好久没写知识笔记了……神兵小将真好看,感觉好像年轻了十岁,有一种莫名的沉浸式的体验。还记得当年特别喜欢......
  • 算法学习笔记(53)——排序不等式
    排序不等式题目链接:AcWing913.排队打水让最磨叽的人最后打水。如图所示,第一个同学被等了6次,第二个同学被等了5次,以此类推...\[总时间=t_1\times(n-1)+t_2\t......
  • 算法入门(第二天)---双指针977,189
    977.有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。输入:nums=[-4,-1,0,3,10]输出:[0,1,......
  • laravel使用JWT签名算法,HS256和RS256有什么区别
    JWT签名算法中HS256和RS256有什么区别JWT签名算法中,一般有两个选择,一个采用HS256,另外一个就是采用RS256。签名实际上是一个加密的过程,生成一段标识(也是JWT的一部分)作为接......
  • 算法学习笔记(52)——Huffman树
    Huffman树题目链接:AcWing148.合并果子利用贪心的思想,每次从当前所有堆中,挑出最小的两堆合并即可。#include<iostream>#include<algorithm>#include<queue>usi......