哈希扩展——一致性哈希

目录

一、什么是一致性哈希

二、一致性哈希原理

2.1 hash 环

三、服务器扩容场景 

3.1 服务器增加

3.2 服务器减少

3.3 使用虚拟节点

四、 一致性哈希的使用场景 


一、什么是一致性哈希

一致性哈希是一种哈希算法,用于将数据分布到不同的节点或存储区域,而保持数据的一致性和均衡性。在分布式系统中,一致性哈希通常用于解决负载均衡和数据分布的问题。

一致性哈希的基本原理是将数据的键通过哈希函数映射到一个固定的哈希空间中。然后,将这个哈希空间分布到环形的哈希环上。每个节点或存储区域在哈希环上占据一个位置,称为虚拟节点或者物理节点。

当需要存储或查找数据时,通过哈希函数计算数据的哈希值,并沿着哈希环顺时针寻找距离最近的节点。这样可以实现数据的高效分布和查找,同时也能够避免节点动态增减时数据重新分布的开销。

一致性哈希算法的优势在于其简单、高效,并且能够保持数据的均衡性和一致性。在分布式存储系统、负载均衡器等场景中被广泛应用。

一致性哈希算法的优点在于:当新增或删除节点时,只会影响到环上的一小部分节点,因此不会像传统的哈希算法那样造成大量的数据迁移和重新分片。同时,由于节点数较多,请求可以被更好地平均分配,从而实现了负载均衡的效果。

另外,一致性哈希算法还可以通过增加虚拟节点来解决节点不均衡的问题,从而进一步提高负载均衡的效果。

例如:有三台服务器编号node1,node2,node3;有3000万个key,需要将这3000万个key均匀的缓存到三台机器上。

解决方案:取模算法 hash(key)% N,即:对 key 进行 hash 运算后取模,N 是机器的数量;

这样对 key 进行 hash 后的结果对 3 取模,得到的结果一定是 0、1 或 2,正好对应服务器node0node1node2,存取数据直接找对应的服务器即可。

取模算法虽然使用简单,而服务器数量 N 发生变化后 hash(key)% N计算的结果也会随之变化!

二、一致性哈希原理

一致性哈希算法也是取模算法,与上面的对服务器取模不同的是它是对 2^32 取模。

即:key % (2^32)

2.1 hash 环

这时,通过计算 key%(2^32),看它落到了圆上的哪一点,然后顺时针向后走,遇到的第一台服务器就是它存放的服务器。

A->B弧线上的点都对应->B服务器
B->C弧线上的点都对应->C服务器
C->A弧线上的点都对应 ->A服务器

三、服务器扩容场景 

3.1 服务器增加

受到影响的数据范围只有 A到D 这条弧线上的数据

3.2 服务器减少

受到影响的数据范围只有A->B 

3.3 使用虚拟节点

实际应用中,服务器绑定的点可能长这个样子:

这样的话容易出现数据偏斜:A服务器承担压力太大,B和C服务器性能浪费了。

这时候就要用到虚拟节点技术:我们就给A服务器,设置三个虚拟的分身,B/C也一样
A->A1 A2 A3
B->B1 B2 B3
C->C1 C2 C3

 

这里只有ABC三台服务器是真正存在的,所以数据如果顺时针遇到的是A的分身服务器,则直接存储到A上。
同理,B的分身,存储到B服务器上
同理,C的分身,存储到C服务器上

四、 一致性哈希的使用场景 

一致性哈希是一种在分布式系统中常用的技术,其使用场景包括但不限于以下几个方面:

  1. 负载均衡:一致性哈希可以用于负载均衡,将请求均匀地分布到多个服务器上,避免出现某些服务器负载过重的情况。

  2. 缓存分布:在分布式缓存系统中,一致性哈希可以用来确定将数据存储在哪个节点上,从而提高缓存命中率和整体性能。

  3. 分布式存储:一致性哈希可用于分布式存储系统中,确定数据存储在哪个节点上,提高数据的访问速度和可靠性。

  4. 容错性:当系统中的节点出现故障或新增节点时,一致性哈希可以帮助系统快速地重新分配数据,提高系统的容错性和可扩展性。

  5. P2P 网络:在对等网络(P2P)中,一致性哈希可以帮助节点发现其他节点的位置并快速建立连接。

总的来说,一致性哈希在分布式系统中起到了路由和数据分布的作用,能够提高系统的性能和可靠性。

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

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

相关文章

arcgis几何与游标(1)

本节我们对几何进行展开学习 ArcPy 的几何对象 在 ArcPy 中,几何对象是表示地理空间数据的核心。它包括点(Point)、多点(Multipoint)、线(Polyline)和面(Polygon)等类型…

分布式热点网络

核心设计理念: 在自然灾害(地震、洪水、台风)、极端环境(无人区)及网络管制(欠费停机)等场景下,传统中心化网络易因核心节点失效导致全局瘫痪。本方案提出构建去中心化设备网络&…

【5G学习】基本概念之多频资源以及子载波和信道

在5G通信中,子载波、信道以及时域、频域、码域、空域是构建无线传输系统的核心概念。它们共同定义了信号的传输方式、资源分配和多维复用技术。以下是详细解释及其相互关系: 一、核心概念定义 1. 子载波(Subcarrier) 定义&#…

Coze 和 n8n 的详细介绍及多维度对比分析,涵盖功能、架构、适用场景、成本等关键指标

以下是 Coze 和 n8n 的详细介绍及多维度对比分析,涵盖功能、架构、适用场景、成本等关键指标: 一、Coze 详细介绍 1. 基础信息 类型:低代码自动化平台(SaaS)。开源性:闭源(企业版需付费&…

分发饼干问题——用贪心算法解决

目录 一:问题描述 二:解决思路 贪心策略(C语言)算法复习总结3——贪心算法-CSDN博客 三:代码实现 四:复杂度分析 一:问题描述 分发饼干问题是一个经典的可以使用贪心算法解决的问题&#xf…

【Python爬虫】简单案例介绍4

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍3-CSDN博客 目录 3.4 完整代码 3.4 完整代码 此小节给出上述案例的完整代码, # encodingutf-8 import re, json, requests, xlwt, csv import pandas as pd from lxml import etree from bs4 import Beauti…

使用ADB工具分析Android应用崩溃原因:以闪动校园为例

使用adb工具分析模拟器或手机里app出错原因以闪动校园为例 使用ADB工具分析Android应用崩溃原因:以闪动校园为例 前言 应用崩溃是移动开发中常见的问题,尤其在复杂的Android生态系统中,找出崩溃原因可能十分棘手。本文将以流行的校园应用&q…

【蓝桥云课】男女搭配 python

题目 题目 题解 import mathT int(input()) for _ in range(T):N, M, K map(int, input().split())people_num N M# 目前为止可以组成的队数group_num min(N // 2, M)if people_num - group_num * 3 < K:group_num-math.ceil((K-(people_num - group_num * 3))/3)pr…

edge 更新到135后,Clash 打开后,正常网页也会自动跳转

发现了一个有意思的问题&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出现了打开deepseek也会自动跳转&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的网站打不开了&#xff0c;需要的一直正…

MCP协议实战指南:在VS Code中实现PostgreSQL到Excel的自动化迁移

作者&#xff1a;后端小肥肠 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 从PDF到精准答案&#xff1a;Coze助力RAGFlow框架提升数据召回率_提升ragflow-CSDN博客 CozeTreeMind实测&#xff1a;秒出ISO标准流程图…

大模型微调(PEFT)

大模型微调&#xff08;PEFT&#xff09; PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;一、PEFT 核心方法1. LoRA&#xff08;Low-Rank Adaptation&#xff09;2. Adapter3. Prefix Tuning4. Prompt Tuning5. QLoRA&#xff08;Quantized LoRA&#xff09; 二…

flutter 打包mac程序 dmg教程

✅ 前提条件 ✅ 你已经在 macOS 上安装了 Android Studio Flutter SDK。 ✅ Flutter 支持 macOS 构建。 运行下面命令确认是否支持&#xff1a; Plain Text bash 复制编辑 flutter doctor ---## &#x1f9f1; 第一步&#xff1a;启用 macOS 支持如果是新项目&#xff0c;…

鸿蒙开发-动画

1. 动画-动画特效 // 定义接口 (每个列表项的数据结构) interface ImageCount {url: stringcount: number }// 需求1: 遮罩层显隐 透明度opacity 0-1 层级zIndex -1~99 // 需求2: 图片缩放 缩放scale 0-1Entry Component struct Index {// 基于接口, 准备数据State images…

js:循环查询数组对象中的某一项的值是否为空

循环检查 selinfo 数组中的每一个对象&#xff0c;判断其中的 po_qty 和 price 是否为空&#xff08;null、undefined 或空字符串 ""&#xff09;&#xff0c;可以使用以下几种方法&#xff1a; 方法1&#xff1a;使用 forEach 循环检查每一项 const selinfo this.…

x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!

目录 核心功能与特点安装优势亮点适用场景 还在为命令行下处理 JSON 数据烦恼吗&#xff1f;jellex 来了&#xff01;它是一款基于终端的交互式 JSON 和 JSON Lines 数据处理工具&#xff0c;让你用熟悉的 Python 语法&#xff0c;轻松过滤、转换和探索 JSON 数据。 核心功能与…

4月份到9月份看6本书第二天【ERP与企业管理】

ERP与企业管理 1-11章全面介绍了ERP的基本原理、物料管理功能、计划功能、生产和采购管理功能、效益以及实施和应用ERP为企业带来的深层次的变化。 第12章讨论了软件系统的选型。 第13章介绍了ERP实施和运行管理的方法 第14章介绍了国际上广泛使用的ERP实施应用的评估方法。…

Opencv计算机视觉编程攻略-第十三节 跟踪视频中的物品

这是opencv系列的最后一节&#xff0c;主要学习视频序列&#xff0c;上一节介绍了读取、处理和存储视频的工具&#xff0c;本文将介绍几种跟踪图像序列中运动物体的算法。可见运动或表观运动&#xff0c;是物体以不同的速度在不同的方向上移动&#xff0c;或者是因为相机在移动…

001 蓝桥杯嵌入式赛道备赛——基础

个人笔记&#xff0c;不扭扭捏捏&#xff0c;一口气到位。方便自己也方便大家 00 时钟线 cubeMX已经完成了大多数工作 01 LED&#xff08;GPIO输出&#xff09; 在使用LED的时候先把SN74HC573锁存器PD2置高电平&#xff0c;然后写入LED所要的高低电平&#xff0c;然后置PD2低…

案例-索引对于并发Insert性能优化测试

前言 最近因业务并发量上升,开发反馈对订单表Insert性能降低。应开发要求对涉及Insert的表进行分析并提供优化方案。   一般对Insert 影响基本都在索引,涉及表已按创建日期做了分区表,索引全部为普通索引未做分区索引。 优化建议: 1、将UNIQUE改为HASH(64) GLOBAL IND…

【技术文章的标准结构与内容指南】

技术文章的标准结构与内容指南 技术文章是传递专业知识、分享实践经验的重要媒介。一篇高质量的技术文章不仅能够帮助读者解决问题&#xff0c;还能促进技术交流与创新。以下是技术文章通常包含的核心内容与结构指南。 1. 标题 一个好的技术文章标题应当&#xff1a; 简洁明…