当前位置: 首页 > article >正文

一致性哈希介绍及原理

文章目录

  • 1. 基本概念
  • 2. 如何实现?
  • 3. 可视化
  • 总结

1. 基本概念

一致性哈希是一种方法,用于在分布式系统中分配数据(比如用户请求或文件)到多个服务器上。它的主要目的是在服务器增加或减少时,尽量减少需要重新分配的数据。解决了一般哈希算法存在的问题(随着服务器的增加或减少,导致哈希值落在了不同的服务器上),也是负载均衡的常用算法。

2. 如何实现?

  • 哈希环:
    想象一个圆环(哈希环),环上有很多位置,从0到360度(或者0到某个最大值)。用哈希函数(比如 MD5 或 SHA)将服务器和数据项映射到这个环上。
  • 服务器的加入:
    每增加一个服务器(比如 S1、S2、S3),计算它的哈希值,并把它放到环上。
    比如:
    S1 的哈希值是 100。
    S2 的哈希值是 200。
    S3 的哈希值是 300。
  • 数据的分配:
    当有数据(比如 D1、D2、D3)需要存储时,同样计算它们的哈希值,并找到顺时针方向上第一个遇到的服务器。
    比如:
    D1 的哈希值是 150,顺时针找到第一个服务器是 S2(200),所以 D1 存储在 S2。
    D2 的哈希值是 250,顺时针找到 S3(300),所以 D2 存储在 S3。
    D3 的哈希值是 50,顺时针找到 S1(100),所以 D3 存储在 S1。
  • 服务器的动态变化:
    • 添加服务器:假设我们新增一个服务器 S4,哈希值是 180。
      只有 D1(原本在 S2)会被迁移到 S4,因为 S4 是 D1 顺时针的下一个服务器。
    • 删除服务器:如果删除 S2,那么 S2 下的数据(如 D1)会转移到它顺时针的下一个服务器 S3。

3. 可视化

想象一下,哈希环就像一个时钟:

      0
   11   1
 10       2
  9     3
   8   4
      5

服务器和数据项会对应到这个时钟上的位置。数据项总是存储到下一个顺时针的点。

总结

  • 减少数据迁移:只在服务器变化时,少量数据需要迁移,而不是所有数据都要重新分配。
  • 均匀分配:通过哈希函数,数据和服务器均匀分布在环上,避免某些服务器负载过重。

以上为个人学习分享,如有问题,欢迎指出:)


http://www.kler.cn/a/389529.html

相关文章:

  • Bugku CTF_Web——文件上传
  • C获取程序名称的方法
  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • 记录学习react的一些内容
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • ODOO学习笔记(8):模块化架构的优势
  • 科技革命前沿:救援机器人!
  • 论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告
  • Unity3D学习日记#2
  • 明日周刊-第27期
  • Qt坐标类时间类-->day03
  • SNH48 GROUP燃动杭州 第五届偶像运动会落下帷幕
  • Jquery向指定HTML标签追加新元素教程
  • 如何产看SQL 查询的执行时间
  • 【AI学习】Mamba学习(十五):关于S4模型计算优化的再学习
  • 【刷题列表-更新中】蓝桥杯和洛谷平台刷题列表
  • PyTorch 2.0: 新特性与升级指南
  • SwiftUI开发教程系列 - 第2章:基础布局与视图
  • 微服务之多机部署,负载均衡-LoadBalance
  • 卷积神经网络基础
  • 前缀和 so easy! 力扣.128 最长连续序列 leetcode longest-consecutive-sequence
  • 【动手学电机驱动】 STM32-FOC(2)STM32 导入和创建项目
  • 中兴光猫修改SN,MAC,修改地区,异地注册,改桥接,路由拨号
  • 今日 AI 简报|苹果推出的新框架,智源开源千万级多模态数据集,字节推出图像编辑模型,开源大语言模型和实时对话系统等
  • 24/11/7 算法笔记 PCA主成分分析
  • 【前端】JavaScript 方法速查大全-函数、正则、格式化、转换、进制、 XSS 转义(四)