一致性哈希:让数据分布更均匀的神器
【720】一致性哈希让数据分布更均匀的神器你开了个快递站最初只有3个员工。分配包裹很简单按编号除以3取余0号员工、1号员工、2号员工。后来员工离职了只剩2个员工。你得重新分配所有包裹工作量巨大。再后来招聘新员工你又得重新分配一遍。这就像传统哈希的问题扩容和缩容时所有数据都要重新分配。一致性哈希就是来解决这个痛点的节点变动时只需要移动少量数据。一、一致性哈希的原理环形空间想象一个圆环上面有2^32个位置或者更多0 /\ 2^32/ \0 / \ / 环 \ /________\ 65536 4294967295节点映射把服务器节点映射到环上节点AHash(服务器A) 1000000 节点BHash(服务器B) 4000000 节点CHash(服务器C) 7000000数据映射把数据Key也映射到环上数据XHash(数据X) 3500000 数据YHash(数据Y) 6000000 数据ZHash(数据Z) 9000000顺时针查找数据X顺时针走遇到的第一个节点是节点B所以数据X存在节点B上。二、一致性哈希的优势场景1节点扩容新增节点DHash(“服务器D”) 5500000原来数据Y6000000在节点C数据Z9000000在节点C现在只有落在4000000~5500000之间的数据会移动到节点D其他数据不受影响场景2节点缩容节点B突然宕机只有它上面的数据需要重新分配到节点C。对比传统哈希传统N个数据全部重新分配一致性哈希只有部分数据重新分配三、虚拟节点解决数据倾斜问题来了如果三个节点分布不均匀怎么办节点A1000000 节点B4000000 节点C4000001 ← 几乎在一起大部分数据都会落在节点C上数据严重倾斜。解决方案虚拟节点每个真实节点映射多个虚拟节点节点A-1Hash(服务器A#1) 1000000 节点A-2Hash(服务器A#2) 2000000 节点A-3Hash(服务器A#3) 3000000 节点B-1Hash(服务器B#1) 4000000 节点B-2Hash(服务器B#2) 5000000 节点B-3Hash(服务器B#3) 6000000 ...这样节点在环上分布更均匀数据也会更均衡。四、实战应用Redis集群Redis Cluster使用一致性哈希16384个槽位# 计算key应该落在哪个槽slotcrc16(key)%16384# 槽映射到节点nodeslots[slot]数据库分库分表defget_shard(key):hash_keyhash(key)%(真实节点数*虚拟节点数)foriinrange(虚拟节点数):node_idx(hash_keyi)%(真实节点数*虚拟节点数)if是真实节点(node_idx):return节点[node_idx]CDN内容分发用户请求图片时通过一致性哈希选择最近的缓存节点。五、代码实现importhashlibclassConsistentHash:def__init__(self,nodesNone,virtual_nodes150):self.virtual_nodesvirtual_nodes self.ring{}self.sorted_keys[]ifnodes:fornodeinnodes:self.add_node(node)def_get_hash(self,key):计算哈希值returnint(hashlib.md5(str(key).encode()).hexdigest(),16)defadd_node(self,node):添加节点foriinrange(self.virtual_nodes):keyself._get_hash(f{node}#vn{i})self.ring[key]node self.sorted_keyssorted(self.ring.keys())defremove_node(self,node):移除节点foriinrange(self.virtual_nodes):keyself._get_hash(f{node}#vn{i})delself.ring[key]self.sorted_keyssorted(self.ring.keys())defget_node(self,key):获取key对应的节点ifnotself.ring:returnNonehash_keyself._get_hash(key)forkinself.sorted_keys:ifkhash_key:returnself.ring[k]# 环的起点returnself.ring[self.sorted_keys[0]]六、一句话总结一致性哈希让系统扩缩容时只需要移动少量数据而不是全部重新分配。配合虚拟节点还能解决数据倾斜问题是分布式系统的必备技能。

相关新闻

树莓派与STM32串口通信实战:从硬件连接到协议设计

树莓派与STM32串口通信实战:从硬件连接到协议设计

1. 项目概述:为什么我们要折腾串口通信? 最近在整理工作室的物料,翻出来几块吃灰的树莓派4B和STM32的开发板,看着它们,一个念头就冒出来了:能不能让这两个不同“门派”的硬件核心,用一种最经典、…

2026/7/31 12:44:19 阅读更多 →
AI如何实现论文到PPT的智能转换与设计优化

AI如何实现论文到PPT的智能转换与设计优化

1. 项目概述:论文PPT自动化的痛点突破读研期间最深刻的记忆莫过于答辩前夜对着电脑屏幕改PPT到凌晨三点,眼睛干涩得像是被砂纸摩擦过。这种经历几乎成为学术圈的集体创伤——根据Nature最新调研,87%的研究生将"制作答辩PPT"列为读研…

2026/7/31 12:43:19 阅读更多 →
多模态舞蹈动作分析数据集

多模态舞蹈动作分析数据集

摘要:该数据集专为智能舞蹈编排分析、动作评估、姿态评价以及 AI 辅助表演反馈等应用而设计。数据压缩包共包含 224 个文件,其中包括 223 个 .mp4 格式的舞蹈样例视频文件,以及一个名为 dance_choreography_multimodal_motion_dataset.csv 的…

2026/7/31 12:43:19 阅读更多 →

最新新闻

终极免费数据恢复指南:如何用TestDisk和PhotoRec找回丢失的数据

终极免费数据恢复指南:如何用TestDisk和PhotoRec找回丢失的数据

终极免费数据恢复指南:如何用TestDisk和PhotoRec找回丢失的数据 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 你是否曾经因为误删除分区、硬盘损坏或系统崩溃而丢失重要数据?别担心…

2026/7/31 13:26:33 阅读更多 →
3个核心优势:用indoor3D构建智能室内空间可视化系统

3个核心优势:用indoor3D构建智能室内空间可视化系统

3个核心优势:用indoor3D构建智能室内空间可视化系统 【免费下载链接】indoor3D a js lib based on three.js to show 3D indoor map 项目地址: https://gitcode.com/gh_mirrors/in/indoor3D 在数字化浪潮席卷各行各业的今天,室内空间的可视化管理…

2026/7/31 13:26:33 阅读更多 →
爬虫频繁429封禁?代理IP轮换+请求指纹优化全流程解决方案

爬虫频繁429封禁?代理IP轮换+请求指纹优化全流程解决方案

爬虫开发过程中,429 Too Many Requests 高频限流封禁是最常见的核心问题。其本质是目标服务器基于IP访问频率、客户端指纹、请求行为特征触发的自动化风控拦截。单纯延长请求间隔仅能临时缓解问题,无法解决高频爬取、批量采集场景下的永久性IP封禁与指纹…

2026/7/31 13:26:33 阅读更多 →
Native Overleaf:桌面端LaTeX编辑器的架构革命与原生体验突破

Native Overleaf:桌面端LaTeX编辑器的架构革命与原生体验突破

Native Overleaf:桌面端LaTeX编辑器的架构革命与原生体验突破 【免费下载链接】NativeOverleaf Next-level academia! Repository for the Native Overleaf project, attempting to integrate Overleaf with native OS features for macOS, Linux and Windows. 项…

2026/7/31 13:26:33 阅读更多 →
抖音批量下载终极指南:5分钟学会免费下载无水印视频和音乐

抖音批量下载终极指南:5分钟学会免费下载无水印视频和音乐

抖音批量下载终极指南:5分钟学会免费下载无水印视频和音乐 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…

2026/7/31 13:26:33 阅读更多 →
ComfyUI-Inpaint-CropAndStitch:智能局部修复,让AI图像处理快10倍

ComfyUI-Inpaint-CropAndStitch:智能局部修复,让AI图像处理快10倍

ComfyUI-Inpaint-CropAndStitch:智能局部修复,让AI图像处理快10倍 【免费下载链接】ComfyUI-Inpaint-CropAndStitch ComfyUI nodes to crop before sampling and stitch back after sampling that speed up inpainting 项目地址: https://gitcode.com/…

2026/7/31 13:25:33 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻