海量数据如何“安家”?一文读懂哈希、范围和一致性哈希三大分片策略

简介: 将单机系统扩展为分布式架构时,数据分布是核心。哈希、范围及一致性哈希分片策略各有优劣:哈希均匀但扩缩容代价大;范围利于查询却易热点;一致性哈希平衡了动态伸缩与负载,广泛用于现代分布式系统。

将单机问题转化为分布式解决方案时,首要任务是对问题进行分解,使得集群中的每台机器负责处理原问题的一个子集。无论是计算任务还是存储任务,其操作对象都是数据。因此,如何将海量数据有效地分解并分配到集群的不同节点上,即数据分布(也常称为数据分片,Data Partitioning/Sharding),是构建分布式系统的基础。

哈希分布
哈希分布(Hash-based Partition)是通过哈希函数(如MD5、SHA-1或简单取模)将数据的键(Key)映射到固定范围的哈希值,再根据哈希值将数据分配到不同的节点。
哈希分布(Hash-based Partition)通过一个确定的哈希函数(如MurmurHash、CRC32,或者简单的取模运算;MD5、SHA-1等加密哈希也可用于需要强随机性的场景,但通常计算开销较大)作用于数据的某个键(Key),将键映射到一个固定范围的哈希值。然后,根据哈希值(例如,hash(key) % num_nodes)将数据分配到对应的节点。
良好的哈希函数可以将数据尽可能均匀地散列到各个节点,避免数据倾斜,从而实现负载均衡。然而,当集群中的节点数量发生变化(增减节点)时,如果采用简单的取模方式(% num_nodes),绝大多数数据的哈希映射关系都会改变,导致大规模的数据迁移(如节点从10个扩容到11个,约90%的数据需要迁移)。

image.png

数据范围分布
数据范围分布(Range-based Partition)根据数据的键值(如时间戳、自增ID、字母顺序等具有序关系的属性)将其划分为连续的区间,每个节点负责存储一个或多个这样的数据区间。例如,一个订单表可以按月份范围(2023-01 至 2023-03,2023-04 至 2023-06等)划分,并将不同月份的数据存储在不同节点上。
由于数据在物理上按键顺序存储,范围查询(如查询某个时间段内的所有订单)非常高效,数据局部性好。然而,如果某些键值范围的数据量远大于其他范围,或者访问频率远高于其他范围(例如,当前月份的订单总是被频繁访问),则可能导致对应节点的负载过高,形成热点。

image.png

一致性哈希分布
一致性哈希(Consistent Hashing Partition)是为了解决传统哈希分布在节点数量动态变化时导致大规模数据迁移问题而提出的优化算法。它将所有节点和数据的键都通过同一个哈希函数映射到一个逻辑上的环形哈希空间(例如 0 到 232−1)。数据键被分配给在环上沿顺时针方向寻找到的第一个节点。
Ketama Hash 是经典实现之一。Rendezvous Hashing、Jump Consistent Hash、Maglev Hash 等也是在不同场景下具有特定优势的一致性哈希变种。
Ketama Hash又称割环法。在Ketama Hash中,将节点通过哈希方式,映射到一个范围是[0,2^32]的环上,同理,把数据也通过哈希方式映射到环上,然后按顺时针方向查找第一个哈希值大于等于数据的哈希值的节点,该节点即为数据所分配到的节点。而更好点的做法,可以为每个物理节点分配若干个虚拟节点,然后把虚拟节点映射到哈希环,分配给每个物理节点虚拟节点数量对应每个物理节点的权重。
如下图所示,数据K1映射到了节点2,数据K2映射到节点3。

image.png

1)扩容:对于割环法的扩容,只需在环上增加一组扩容节点生成的虚拟节点;
2)缩容:同样的,缩容时只需拿掉缩容节点对应的所有虚拟节点;
3)故障容灾:割环法的故障容灾与缩容情况一样,节点故障时只需将故障节点对应的所有虚拟节点从环上去掉。

image.png

如上图所示,当节点2故障时,将节点2对应的2个虚拟节点去掉,而原本映射到节点2的对象K1和K2分别映射到了节点1和节点4。

未完待续

很高兴与你相遇!如果你喜欢本文内容,记得关注哦!!!

目录
相关文章
|
机器学习/深度学习 算法 安全
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
密码学系列之五:MD5、SHA1——一文搞懂哈希函数
10673 113
|
存储 缓存 NoSQL
关于数据库分片我们需要知道的
本文探讨了数据库分片的解决方案,强调了数据库分片在数据存储规模增长时的实用性。分片是将数据分布到多台机器上的技术,通过横向扩展和纵向扩展实现。文章还详细介绍了数据库分片的四种主要实现方式:什么都不做、垂直扩展、复制和专用数据库。每种方式都有其优点和限制,例如,垂直扩展可能需要更多的硬件资源,而复制可以提高读取性能,但可能需要更多的存储空间。最终,选择数据库分片方案应根据问题的复杂性和资源可用性来决定。
471 1
关于数据库分片我们需要知道的
|
机器学习/深度学习 安全 网络安全
云安全中心:病毒查杀
云安全中心病毒查杀功能使用阿里云机器学习病毒查杀引擎和实时更新的病毒库,提供丰富的系统扫描项,覆盖持久化启动项、活动进程、内核模块、敏感目录、SSH后门公钥等系统薄弱模块,可有效清理服务器的各类恶意威胁。本文介绍如何使用病毒查杀功能。
2046 2
|
Oracle 关系型数据库 Linux
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
5227 1
|
安全 网络安全 数据安全/隐私保护
FileZilla搭建FTP服务器图解教程
在日常办公当中,经常会需要一个共享文件夹来存放一些大家共享的资料,为了保证文件数据的安全,最佳的方式是公司内部服务器搭建FTP服务器,然后分配多个用户给相应的人员。今天给大家分享FileZilla搭建FTP服务器图解教程,希望对大家有所帮助!
FileZilla搭建FTP服务器图解教程
|
4月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
39938 11
|
6月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
321 2
|
9月前
|
数据采集 消息中间件 人工智能
赛事比分怎么实现实时更新?从采集到推送的“毫秒级“科技揭秘!
实时比分更新背后的技术奥秘,远比你想象的复杂!从数据采集、传输、处理到用户推送,每个环节都充满挑战。情报来源包括官方接口、AI视觉识别和人工录入;传输方式从HTTP轮询到WebSocket,追求毫秒级延迟;数据清洗确保准确性,用户推送注重适配与优先级。开发者还需规避常见坑点,如消息队列、时区转换等。未来,AI预测、边缘计算甚至量子通信将让零延迟成为可能。想了解如何打造像顶级中场般精准、快速且可靠的比分系统吗?本文为你深度拆解!
|
11月前
|
域名解析 网络协议 安全
DNS服务器地址大全
DNS(域名系统)是互联网的“电话簿”,将域名解析为IP地址。选择优质DNS服务器可提升网络速度、降低延迟。以下是全球及中国各运营商的DNS服务器列表,包括公共DNS(如Google DNS、Cloudflare DNS)、中国电信、联通、移动等。根据地理位置、稳定性、安全性与隐私保护等因素选择适合的DNS服务器,优化上网体验。
39124 6
|
敏捷开发 数据可视化 项目管理
燃起图是什么? 敏捷项目管理中不可忽视的高效利器
在现代项目管理中,团队效率至关重要。燃起图(Burn Up Chart)作为一种直观的可视化工具,通过展示完成工作量和总工作量的变化,帮助团队实时跟踪进度、应对需求变更,提高透明度与沟通效率。本文介绍了燃起图的功能、优势及应用方法,并推荐了几款支持燃起图的项目管理工具。
642 13

热门文章

最新文章