系统设计:一致性哈希的概念

news2024/11/15 21:30:35

目录

一、介绍

二、问题提出

三、朴素实施

四、一致性哈希

4.1 关闭服务器

4.2 添加新服务器

五、分布不均

5.1 虚拟节点

5.2 应用

六、结论

资源


一、介绍

        我们生活在一个每天都会生成大量数据的世界里。在大公司中,几乎不可能将所有数据存储在单个服务器上。这就是为什么我们需要水平扩展,其中每个数据部分都存储在单独的服务器上。

        与垂直扩展相反,我们可以简单地将所有数据存储在一个地方,而使用水平扩展,以能够快速访问不同服务器上的数据的方式组织存储至关重要。通过了解简单系统实现的性能缺点,我们将设计一个弹性系统来缓解上述问题。

        在系统设计中,我们将使用的原则称为一致性哈希

二、问题提出

        假设我们有 n 个数据对象需要存储在 k 个不同的服务器上。服务器的配置可能会随时间而变化:

  • 任何服务器都可以关闭;
  • 可以将新服务器添加到系统中。

        鉴于这些潜在的配置更改,我们必须设计一个系统,该系统可以在配置更改的情况下快速检索所需的数据块并在服务器之间传输数据。

三、朴素实施

        朴素的实现包括基于哈希函数在不同服务器之间分配数据。例如,当我们需要向系统添加新的数据块时,我们将其密钥插入哈希函数中,该函数输出该块将属于的服务器编号。

基于哈希函数的数据分发。数据根据相应的哈希值存储在服务器上。

        当我们需要从给定的密钥中检索信息时,我们会计算其哈希值,以找出与该密钥关联的信息存储在哪个服务器上。在实现这样的系统时,重要的是要确保哈希函数均匀分布数据,以便每个服务器存储的数据量大致相同。

        在我们对其进行更改之前,此系统运行良好。例如,假设在上面的示例中,服务器 S3 已关闭:我们无法再访问其数据,并且不会添加将哈希到其存储桶的新数据。

每当任何服务器关闭时,其数据就无法再访问。

        唯一可能的解决方案是再次将所有数据块重新分配到服务器上。既然我们现在有 k-1 个服务器,我们不应该忘记哈希函数中的余数必须减少 1。如果向系统添加了新服务器,则会出现类似的情况。

如果发生任何系统配置更改,则需要再次重新分发所有数据。

        遗憾的是,数据重新分发是一项消耗资源的操作。在数据量大且配置频繁更改的情况下,此存储系统的效率会非常低。

四、一致性哈希

        一致性哈希是上述系统的绝佳替代方案,在发生任何配置更改时具有更大的弹性。

        一致性哈希不仅包括对数据进行哈希处理,还包括对服务器进行哈希处理。 数据键和服务器被哈希为同一组值 [0, n]。为了更容易理解和可视化,让我们想象所有的哈希值都位于一个环(或时钟)上。每个服务器都有自己的哈希范围

服务器的哈希范围定义为位于哈希环上的所有哈希值的间隔,该哈希值位于服务器的哈希值之前和位于逆时针方向的另一个最近服务器的哈希值之后。

        要确定某个密钥属于哪个服务器,我们需要从密钥的哈希值开始顺时针方向,直到到达与其中一个服务器对应的哈希值。该服务器将存储此密钥的数据。

哈希环示例。服务器 S1 的哈希范围以蓝色表示。

        服务器的哈希值应按升序存储在其他位置,以便可以快速访问它们。使用二进制搜索,这提供了在 O(log S) 时间内查找存储给定密钥的服务器的能力(S 是服务器的数量)。

        使用一致性哈希,可以在 O(log S) 时间内找到与给定密钥关联的服务器编号,其中 S 是服务器总数。

4.1 关闭服务器

        如果任何服务器关闭,那么我们只需要删除该服务器的关联哈希值,并仅按顺时针方向将数据从该服务器传输到下一个服务器。与简单哈希相比,这是一致性哈希的一大优势,因为我们不再需要像以前那样重新分配所有数据。

从上面的示例中关闭服务器 S1 只需要传输以前存储在该服务器上的数据。

关闭 S1 后,服务器 S2 扩展了其哈希范围。

4.2 添加新服务器

        如果需要向系统添加新的服务器,那么我们只需要将位于新服务器的哈希值和最近服务器的哈希值之间的哈希值关联的所有数据按逆时针方向传输即可。

将新服务器 S4 添加到系统。只有部分存储在 S0 上的数据必须传输到 S4。

添加 S4 后,它占用了以前属于 S0 的关联哈希值的一部分。

五、分布不均

        虽然一致性哈希似乎对各种配置更改具有弹性,但可能会出现数据在服务器之间分布不均匀的时刻。

  • 首先,这可能是由于所选的哈希函数而发生的。实际上,我们无法保证它会统一地为数据生成 key。因此,这可能会导致服务器具有非常不成比例的哈希范围长度的情况。

  • 即使数据在给定的时刻均匀分布,随着各种配置的变化,它也可能很快发生急剧变化,再次变得不均匀。

分布不均匀程度越高,平均响应时间也会成比例地变长。

缓解此问题的一种可能方法是,当分布变得偏斜时,定期重新分配系统中的所有数据(可能使用另一个哈希函数)。虽然有时这可能是一种解决方案,但当拥有数百万或数十亿个数据对象时,它仍然不是最佳选择。

5.1 虚拟节点

虚拟节点是组合哈希的扩展,它使系统对不均匀的数据分布更具弹性。这个想法包括对每个服务器进行多次哈希处理(使用不同的哈希函数)。每个服务器的总哈希范围定义为与其所有键关联的哈希范围的联合。

与虚拟节点的一致性哈希。哈希环上的每种唯一颜色都对应于一个服务器。

  • 关闭服务器意味着删除与该服务器关联的所有虚拟节点。来自该服务器的所有数据都将传输到其他多个服务器。
  • 添加新服务器时,其虚拟节点的所有哈希值应通过之前用于其他服务器的哈希函数进行计算。

实际上,虚拟节点的数量通常比上面的例子多得多。

一方面,随着虚拟节点数量的增加,哈希范围平均变得更加一致。另一方面,执行与配置更改相关的标准操作需要更多时间。此外,还需要存储有关虚拟节点的其他元数据。

在大多数情况下,最好根据给定的问题、可用服务器的数量和数据数量来选择虚拟节点的数量。当难以估计一个好的数字时,建议调整此参数以找到完美的权衡。

5.2 应用

        一致性哈希具有广泛的应用。大多数时候,它用于分布式应用程序,尤其是在许多服务器上存储大量数据的数据库。一些最流行的示例是:

  • Apache Cassandra — 分布式 NoSQL 列数据库;
  • Amazon Dynamo DB — 分布式 NoSQL 键值数据库;
  • Discord — 视频和聊天应用程序。

六、结论

随着分布式系统的兴起,一致性哈希开始迅速普及。通过对频繁的配置更改具有弹性,它提供了一种简单而有效的解决方案来跨不同集群对数据进行分区。同时,虚拟数字的数量是一个重要参数,允许一致性哈希更适合大多数系统设置。

资源

  • 一致性哈希 |维基百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区间dp、前缀和】 P1220 关路灯 题解

关路灯 题目描述 某一村庄在一条路线上安装了 n n n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。 为了给村里…

APACHE NIFI—wait、notify组件报拒绝连接访问的报错

报错文字: Wait[idele44704-6fb6-1b60-ffff-ffffdcofbba2]Failed to process session due to Failed to get signal for c84c4aec-1287-4216-b1a2-f5c6fod4a3b7 due to java.net.ConnectException:Connection refused: org.apache.nifi.processor.exception.Proces…

jmeter响应断言、json断言、断言持续时间操作

一、响应断言 Apply to:断言应用的范围,这里默认,通常发出一个请求只触发一个服务器测试字段 响应文本,response响应体内的信息响应代码: 响应码,一般是200响应信息:响应码后面的返回的信息&am…

zdppy+vue3+onlyoffice文档管理系统实战 20240831上课笔记 继续完善登录功能

遗留的问题 1、整合验证码的接口2、渲染验证码3、实现验证码校验的功能4、验证码校验通过之后,再校验登录功能 验证码框架怎么使用 安装: pip install zdppy_captcha使用示例: import zdppy_api as api import zdppy_captcha import zdp…

Docker compose 安装 ELK

1. 简介 方案概述 我们使用 Filebeat 作为日志收集器,接入到 Redis 队列,然后消费队列中的日志数据流转到 Logstash 中进行解析处理,最后输出到 Elasticsearch 中,再由 Kibana 展示到页面上。我们采用 Elasticsearch 3 节点集群…

hello树先生——AVL树

AVL树 一.什么是AVL树二.AVL树的结构1.AVL树的节点结构2.插入函数3.旋转调整 三.平衡测试 一.什么是AVL树 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。…

【计组 | Cache原理】讲透Cache的所有概念与题型方法

Cache 写在前面:高速缓存Cache一直408中的重点以及绝对的难点,前几天我在复习计组第三章的知识,Cache这一节把我困住了,我发现很多概念我都不记得了,一些综合性强的计算题根本无从下手,我深知Cache对于每个…

1分钟把高质量AI知识库站点嵌入小程序

许多企业都有把 AI 知识库装进小程序、网站、企业微信、钉钉等的需求,让用户能够在小程序上访问到高品质的内容。奈何有太多限制,往往会遇到IP地址不被信任或技术对接接口配置等困难。HelpLook能帮你节省这些繁琐的程序,0代码快速将AI知识库站…

工程师们都爱看的Docker容器技术,一看就会!保姆级教程(上)

文章目录 Docker简介Docker在企业中的应用场景Docker与虚拟化的对比Docker的优势 部署Docker部署DockerDocker的基本操作Docker镜像管理容器的常用操作 Docker镜像构建Docker镜像结构镜像运行的基本原理镜像获得方式镜像构建Docker镜像构建企业实例 镜像优化方案镜像优化策略镜…

一款免费强大的快速启动工具,快速打开程序,软件,网站,工具等

Lucy是一款由个人开发者针对个人需求开发的快速启动工具,其最大的特点在于简洁和快速。它允许用户通过简单的拖拽操作将文件、文件夹、网址等添加到启动列表中,实现快速访问常用程序和文件的目的。Lucy不依赖于网络连接,避免了隐私泄露的风险…

Xcode插件开发

Xcode插件开发 文章目录 Xcode插件开发一、插件开发流程创建插件Extension文件介绍文件说明 二、插件使用安装说明 一、插件开发流程 创建插件的过程并不复杂,只是官方教程,过于简单,所以这里补充下创建细节 创建插件 环境:Xco…

公安智慧大楼信息化整体建设设计方案

1. 项目背景与需求分析 《公安智慧大楼信息化整体建设设计方案》针对一个用地面积和建筑面积均具规模的建设项目,提出了信息化建设的全方位设计方案,以满足现代公安业务的需求。 2. 信息化设计理念 方案强调了信息化设计的顶层设计方法论,…

【Qt】窗口概述

Qt 窗口概述 Qt窗口是由QMianWindow类来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝&a…

基于Swagger自动生成离线API文档(Word、Markdown文档)

在做项目时通常需要给客户提供离线Word的API文档归档,不要跟客户说有Swagger在线API文档,客户不会用也不会去看。只要你有Swagger,TableGo就能自动生成一份漂亮的Word离线API文档给客户,大大提高了写文档的效率,客户看…

【0-1背包】3180. 执行操作可获得的最大总奖励 I

给你一个整数数组 rewardValues,长度为 n,代表奖励的值。 最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 : 从区间 [0, n - 1] 中选择一个 未标记 的下标 i。 如果 rewardValues[i] 大…

openwrt结合智能家居(相关搜索:路由器)

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

如何在华为平板上开发一个web网页

首先进入华为应用市场下载Qpython 下载完成后打开,在主页里面进入pip,然后下载flask 下载完成后创建一个Python文件,输入 然后运行,进入了Qpython终端后输入pyth,然后就可以开始开发web网页了。 请各位老手们多多指点

10:USB模块布局

1.先处理差分线 先开上方飞线: 发现有个晶体: ①晶体有随身电容,随身电阻 ②晶体布局思路: –电容和电阻放在ic和晶体之间 –整个晶体的部分靠近IC – 信号走向:IC—>电阻—>电容(左右两边摆)—>晶体 开右…

基于Pytorch框架的深度学习HRnet网络人像语义分割系统源码

第一步:准备数据 头发分割数据,总共有5711张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用 第二步:搭建模型 计算机视觉领域有很多任务是位置敏感的,比如目标检测、语义分割、实例…

做影像组学+深度学习技术研究如何发表高分论文,案例解析

论文简介 标题:Longitudinal MRI-based fusion novel model predicts pathological complete response in breast cancer treated with neoadjuvant chemotherapy: a multicenter, retrospective study(纵向MRI结合新模型预测新辅助化疗乳腺癌的病理完全…