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

软件工程(六):一致性哈希算法

哈希算法

定义

哈希算法是一种将任意长度的输入(如字符串、文件等)转换为固定长度输出的算法,这个输出称为“哈希值”或“摘要”。

常见的哈希算法

哈希算法哈希位数特点
MD5128位快速,但已不安全
SHA-1160位安全性提高,但已逐渐淘汰
SHA-256256位高安全性,广泛使用
CRC3232位校验常用,速度快但安全性差

应用场景

  • 加密与签名(如MD5/SHA用于密码)
  • 数据去重(快速比较两个文件是否相同)
  • 哈希表中的键查找(如散列存储)
  • 快速分片或定位资源

一致性哈希算法(Consistent Hashing)

背景与问题

分布式系统中,如缓存(Redis/Memcached)、分布式数据库、CDN 中,经常面临这样的问题:

如果我们有 N 台节点,使用普通哈希对 key 取模分配数据:hash(key) % N
当增加或减少节点时,几乎所有 key 的映射都会变化,导致大量缓存失效或数据迁移

核心思想

一致性哈希解决了节点动态增删带来的大规模数据重映射问题。

一致性哈希的原理:

  • 将整个哈希值空间组织成一个圆环(hash ring),如 0 ~ 2³²-1。
  • 把每个节点映射到环上的一个位置(hash(node_id))。
  • 每个数据 key 也通过 hash 映射到环上的某个点(hash(key))。
  • key 被存储在顺时针方向上第一个遇到的节点中。

举例图示

环形空间(哈希环):0↗     ↘节点A    100↑        ↓节点D ←──── key1250

加入/删除节点的影响小

  • 只需迁移与该节点相关的一小部分数据,而不是全部重分布。
  • 极大提高分布式系统的可扩展性与稳定性

虚拟节点(Virtual Node)

为了解决节点分布不均衡的问题,引入虚拟节点机制:

  • 每个真实节点对应多个虚拟节点(如A节点有A#1, A#2, A#3…),均匀分布在环上。
  • key 映射到虚拟节点,再找到对应真实节点。
  • 可以实现更好的负载均衡

对比总结

对比项哈希算法一致性哈希算法
应用目的散列数据,加密、索引、查重等数据分布在分布式节点间
输入输出任意输入 → 固定长度输出key → 节点映射(保持稳定)
可扩展性差(增删节点需重新映射大部分key)高(只影响局部key分布)
是否使用环结构是(哈希值空间形成一个圆环)
是否使用虚拟节点是(提高负载均衡能力)

典型应用场景

应用系统使用场景
分布式缓存(如Redis集群)key 到节点映射,避免大量迁移
CDNURL 映射到缓存服务器
分布式数据库表或记录按 key 分布到多个分片
消息队列系统Topic、Partition 映射

相关文章:

  • labview——控制继电器模块
  • UML基本概念:构造块、公共机制与规则
  • 解决C#泛型类参数无法带参数实例化的问题
  • UML 图的细分类别及其应用
  • python训练营打卡第30天
  • Qwen 3技术报告详细解读
  • junit单元测试
  • RT_Thread——内存管理
  • 融云 uni-app IMKit 上线,1 天集成,多端畅行
  • 什么是国密、密评、商密
  • 离线服务器算法部署环境配置
  • sqlsugar查看表结构并导出word文档
  • 深入理解用于中断控制的 NVIC 寄存器
  • STM32之串口通信WIFI上云
  • PyTorch中cdist和sum函数使用详解
  • 25、工业防火墙 - 工控网络保护 (模拟) - /安全与维护组件/industrial-firewall-dcs-protection
  • 免费的DDOS防护对网站业务有用吗?
  • PEFT库PromptTuningConfig 配置
  • Google I/O 2025:Gemini 2.5 Pro、Project Astra 与 AI Ultra 全面解析
  • Gartner研究报告《Generative AI 赋能Digital Commerce的三种路径》学习心得
  • 营销型网站设计文章/seo课程培训机构
  • wordpress rds/南京网络优化公司有哪些