一致性哈希原理

news/2025/10/13 0:43:04/文章来源:https://www.cnblogs.com/chucz/p/19137558

数据服务器如何组织:设计时候保证高频中低频都有数量。否则就是忙的忙死闲的闲死

逻辑层服务器:增加和减少机器的时候代价很小

数据层服务器:增加和减少机器的时候代价是全量的

取模服务器个数的问题--缓存雪崩

取模 也可以 实现数据底层均匀分布,hash(图片名称)% N

当服务器数量发生改变时,所有缓存在一定时间内是失效的,当应用无法从缓存中获取数据时,则会向后端服务器请求数据,同理,假设3台缓存中突然有一台缓存服务器出现了故障,无法进行缓存,那么我们则需要将故障机器移除,但是如果移除了一台缓存服务器,那么缓存服务器数量从3台变为2台,如果想要访问一张图片,这张图片的缓存位置必定会发生改变,以前缓存的图片也会失去缓存的作用与意义,由于大量缓存在同一时间失效,造成了缓存的雪崩,此时前端缓存已经无法起到承担部分压力的作用,后端服务器将会承受巨大的压力,整个系统很有可能被压垮,所以,我们应该想办法不让这种情况发生,但是由于上述HASH算法本身的缘故,使用取模法进行缓存时,这种情况是无法避免的,为了解决这些问题,一致性哈希算法诞生了。

简单的对服务器数量进行取模,当缓存服务器数量发生变化时,会引起缓存的雪崩,可能会引起整体系统压力过大而崩溃(大量缓存同一时间失效)。

当缓存服务器数量发生变化时,几乎所有缓存的位置都会发生改变,怎样才能尽量减少受影响的缓存呢?

取模2^32组成环--缓存部分失效

取模法是对服务器的数量进行取模,而一致性哈希算法是对232取模。想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由232个点组成的圆。

圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到232-1,也就是说0点左侧的第一个点代表232-1。我们把这个由2的32次方个点组成的圆环称为hash环。

hash(服务器的IP地址) % 2^32,算出的结果一定是一个0到2^32-1之间的一个整数,我们就用算出的这个整数,代表服务器A

**hash(图片名称) % 2^32,****算出的结果是一个整数, **从所在位置开始,沿顺时针方向遇到的第一个服务器就是A服务器,所以,将会被缓存到服务器A上

1623726720920-4783b2fd-a641-4ff5-be9e-72ed3aa0f16a.png

B故障时候:原来在C的还在C不会数据迁移,原来在B的数据会迁移到C,新来的原本应该到B的也会去C,原来在A的还是在A不会数据迁移,影响的只有原来在B的数据要迁移到顺时针下一个节点上面去。

所以只有部分缓存会失效

hash环的偏斜

所有的服务器集中在某一段,所有的文件都会放在第一台,第一台失效的时候还是会雪崩。

由于我们只有3台服务器,当我们把服务器映射到hash环上的时候,很有可能出现hash环偏斜的情况

虚拟节点--解决偏斜

没有多余的真正的物理服务器节点,我们就只能将现有的物理节点通过虚拟的方法复制出来,这些由实际节点虚拟复制而来的节点被称为”虚拟节点”。

“虚拟节点”是”实际节点”(实际的物理服务器)在hash环上的复制品,一个实际节点可以对应多个虚拟节点。

虚拟节点越多,hash环上的节点就越多,缓存被均匀分布的概率就越大。

虚拟节点技术:按照比例来抢。

https://segmentfault.com/a/1190000021199728

https://www.zsythink.net/archives/1182

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

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

相关文章

缓存和数据库数据的一致性

缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的 问题 Redis 的 qps 可以达到 10 万每秒,对于一般体量的互联网公司,一台机器就够了。但不论是什么业务,都不得不面对一个棘手的问题:那就是 Redis 和…

Redis不同数据类型代码场景实践

string 博客不好的实现 jedis.set("key1", "value1"); jedis.get("key1"); jedis.del("lock_test"); jedis.incr("blog_id_counter"); Long key = jedis.incrBy(&q…

上下文与this指向

var name = window​​ const person1 = { ​ name: person1,​foo1: function() {​console.log(this.name) ​ }, ​ foo2: () => {console.log(this.name) ​ },​foo3: function() { ​ return function…

[数据库] Microsoft SQL Server 数据库

1 概述: Microsoft SQL Server SQL Server 数据库SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的【主要功能】就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,…

02 | 在环境中使用Airsim插件

02 | 在环境中使用Airsim插件参考 https://zhuanlan.zhihu.com/p/619214564 中 我们只需要随意下载一个小一点的场景工程就可以然后按照文章中的内容进行。注意需要用到我们上一个文章中介绍的 plugins 文件夹

01 | UE5.3+Airsim+VS2022+Windows10(无人机仿真环境)

01 | UE5.3+Airsim+VS2022+Windows10(无人机仿真环境)配置步骤 vs2022 的安装和配置可以多装;少装也没事后面打开 vs2022 配置项目会进行提示桌面开发套件NET 桌面开发游戏开发单个组件安装 UE5.3不要下载在 C 盘,…

对于使用ant design组件库的疑问

用ant design 的tag来制作组件封装然后实现应该筛选功能的话,我得考虑什么,具体筛选是点击tag之后会得到对应的筛选后的信息,我的后端接口应该是放在主页面没问题,然后传类别和该类别的tag,但是tag是能选择了,那…

阅读《构建之法》提出的5个问题

问题1:科技公司应如何应对“颠覆式”的创新 书中上下文:16.1.2迷思之⼆:⼤家都喜欢创新 第348页“如果这位年轻⼈提的想法是改进电报技术,⼀定会受到欢迎,这⼀类创新是改良式的(Incremental Innovation),但是,…

提示工程介绍

什么是提示工程? 提示工程(Prompt Engineering)是“设计、优化输入给大语言模型的提示词,使其生成准确、有用且符合预期的输出”的技术与方法集合。它不改变模型本身,只通过调整“问法”来引导 AI 的表现。 定义看…

DshanPI-A1 RK3576 gstreamer播放16路视频与硬件加速

演示视频 一、实验环境类别 具体配置板卡 DshanPI-A1主控芯片 RK3576操作系统 Armbian桌面系统 GNOME窗口系统 WaylandGPU 驱动 Panfrost核心硬件加速单元说明 RK3576 芯片集成三类关键硬件加速单元,分别负责不同环节…

全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布

全面适配iOS 26液态玻璃,基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v10.2发布,全面适配iOS 26 Liquid Glass(液态玻璃)。1、MobileIMS…

freertos的调度过程

一.Preface 理解Freertos的任务调度对理解整个实时操作系统是非常有帮助的,最近抽空又复习了一遍源码,所以在此记录一下。二.freertos的3各任务链表 2.1ready list(array) a.这是一个链表组,定义了最高优先级为10,…

「2025 高一上学期笔记 / 日记」

「2025 高一上学期笔记 / 日记」 9.1 上午 P10449 费解的开关25 盏灯排成一个 55 的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反…

「2025 暑假日记 / 笔记」

「2025 暑假日记 / 笔记」 7.1 - 7.2目前鸽了一部分题没时间写/太难的,后期补出来并查集简单并查集 并查集是一种用于管理元素所属集合的数据结构,支持查询和合并的操作。查询int find(int x){return (f[x] == x) ?…

2025羊城杯初赛Misc-writeup

别笑,你试你也过不了第二关 构造变量 hilogo 使其值等于指定的 ASCII 艺术图案,代码长度必须小于 285 字符 第一关通过尝试,发现题目存在沙箱,禁了import,print,base64等,同时禁用使用字符串格式化 我们采用Code…

将 GPU 级性能带到企业级 Java:CUDA 集成实用指南

引言 在企业软件世界中,Java 依靠其可靠性、可移植性与丰富生态持续占据主导地位。 然而,一旦涉及高性能计算(HPC)或数据密集型作业,Java 的托管运行时与垃圾回收开销会在满足现代应用的低延迟与高吞吐需求上带来…

我的个人空间

Hero BannerMCPAPPMovie H5浏览器插件微信

2025.10.12总结

今天继续学习软考相关知识,目前过完数据结构和算法相关知识,在看操作系统,看的课程讲的云里雾里的听不懂。 目前任务 1.软考 2.继续学苍穹外卖 软考下个月就开始考试很紧急 苍穹外卖对找工作有帮助,而这仅仅是一个…

Windows 文件管理器中重复的 OneDrive 图标原因与解决方案

最近发现 Windows 文件管理器左侧出现了两个 OneDrive 图标。 检查注册表后发现,它们分别对应两个不同的命名空间(CLSID): {018D5C66-4533-4307-9B53-224DE2ED1FE6} → 系统版 OneDrive(个人) {04271989-C4D2-F…

10.12总结

1.今天啥都没干 2.明天学习组建模板