当前位置: 首页 > news >正文

Redis 的集群 --- 数据分开扛

序言

 上一章内容中我们介绍到了 哨兵 来保证我们主机在发生故障时能够及时地选出一个新的主机,但是哨兵地加入只是提供了 高可用性故障转移,并没有真正的提升架构的性能。如果不断地加入新的数据的话,主机的压力会很大,一方面是内存占用,一方面是同步数据到从机。
 现有的架构可能不是很好解决现在的问题,集群 来咯,数据分开存,大大减轻每一个主机的压力。具体怎么实现的呢?让我们开始吧。


一、集群的架构

 集群会存在多个主机,每一个主机存储整体数据的一部分,每一个主机都会存在从机以防主机故障替换,整体的结构如下:
在这里插入图片描述
现在问题来了,怎么确定每一台主机存储了哪一些键呢?新加入的键加入到哪一个主机呢?咋们马上说到。


二、集群的工作原理

1. 集群的分片

 现在笔者所知道的分片方式有三种:哈希取余,一致性哈希,哈希槽,相较最为全面的,也是现在所使用的是 哈希槽,我们来看看各自的优劣吧:

哈希取余法

 首先获取一个键所对应的分区非常简单,就需要使用公式:

SLOT = hash(key) % N

在这里的 N 是我们的分区个数,非常简单吧,这是他最大的优势😙。但是当我们的分区个数发生变化时,需要将我们的整体数据重新映射到对应的分区,这个时候就涉及到大量的数据迁移的过程,代价非常高。

一致性哈希法

 这个算法的提出就是解决了 哈希取余法 在增删分区时会涉及到大量的数据移动的问题。首先我们需要知道问题的起因是因为 N (分区个数)发生了变化,所以为了解决这个问题,直接将 N 的大小固定为 2^32,这样我们的 hash(key) % 2^32 的范围一定在 [0, 2^32 - 1] ,形成一个哈希环:
在这里插入图片描述
然后我们将分区提供某种方式也映射到哈希环上,现在我们插入或者是查找一个键的时候,我们先通过计算获知在哈希环上的位置,然后 顺时针 查找到第一个分区。
 现在我们尝试加入一个新的分区,判断带来的影响:
在这里插入图片描述
我们在 A B 之间新加入了一个分区 C,可以得到如下结论:

  • 原来属于 B 的部分数据(A->C) 需要迁移到 C
  • 其他位置的数据不受影响,不需要迁移

这大大降低了我们的开销,因为只需要迁移整体的部分数据,但是这个方法会存在 数据倾斜 的问题,谁占有的弧长越长就代表着我们的数据越有可能分配到该分区上。

哈希槽法

 这个方法其实和 一致性哈希法 非常类似,每一个分区管理一个区间。但是它解决了数据倾斜的问题,当加入新的分区的时候,每个分区的大小都会得到相应的调整,保证平衡负载。
 哈希槽共有 16384 个,每个节点负责一部分槽:
在这里插入图片描述
如上图,比如需要新加入一个分区,我们只需要每一个分区各自迁移约 1365 槽到新的分区中管理即可。既兼顾了数据迁移带来的开销,又兼顾了数据倾斜带来的问题。

2. 加入新的结点

 现在需要在现有的集群当中加入一个新的结点,首先我需要一个介绍人,这个介绍人是现在集群当中的任意一个结点,之后通过 CLUSTER MEET 协议和这个中间人握手。握手成功之后,介绍人需要通告其他主机点我的存在。

可能这个集群中存在较多的主机点,如果介绍人挨个介绍我的话肯定成本非常大。所以使用了一个较为灵活的协议 Gossip(翻译过来是流言蜚语,还挺贴切的),具体思想是每个节点定期与集群中的其他节点交换状态信息。当一个节点知道了某些新的信息(如集群中某个节点的故障信息,新的结点加入),它会将这些信息传播给它所连接的其他节点,这些节点再继续将信息传播给它们各自的邻居。这样,集群中所有节点最终都能知道每个节点的状态。

 现在大家都知道新节点的存在了,但是新的结点具有以下特征:

  • 由于没有分配哈希槽,因此它不保存任何数据
  • 因为它是一个没有分配槽的主服务器,所以当副本想要成为主服务器时,它不会参与选举过程

所以我们需要手动的给新的哈希槽,也就是管理数据的权限:

CLUSTER SETSLOT [<node_id>]


三、总结

 感觉现在查到的资料都没有很详细的介绍一个结点故障转移的过程,容我再看看。

相关文章:

Redis 的集群 --- 数据分开扛

序言 上一章内容中我们介绍到了 哨兵 来保证我们主机在发生故障时能够及时地选出一个新的主机&#xff0c;但是哨兵地加入只是提供了 高可用性 和 故障转移&#xff0c;并没有真正的提升架构的性能。如果不断地加入新的数据的话&#xff0c;主机的压力会很大&#xff0c;一方面…...

微信小程序中缓存数据全方位解惑

微信小程序中缓存数据全方位解惑 微信小程序中的数据缓存是提升用户体验和优化性能的重要手段&#xff0c;跟电脑浏览器中的Local Storage的性质一样。以下是关于微信小程序数据缓存的相关知识点和示例的详细介绍&#xff1a; 1. 数据缓存的类型 微信小程序提供了两种数据缓…...

LeetCode 每日一题 2025/2/10-2025/2/16

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/10 913. 猫和老鼠2/11 1728. 猫和老鼠 II2/12 1760. 袋子里最少数目的球2/13 1742. 盒子中小球的最大数量2/14 1552. 两球之间的磁力2/15 1706. 球会落何处2/16 1299. 将…...

使用 Shiro 和 JPA 结合 MySQL 实现一个简易权限管理系统

1. 项目设置 首先&#xff0c;确保你的项目已经配置好 Maven 或 Gradle 依赖管理工具&#xff0c;并添加以下依赖&#xff1a; Maven 依赖 <dependencies><!-- Shiro 核心库 --><dependency><groupId>org.apache.shiro</groupId><artifactI…...

DeepSeek与医院电子病历的深度融合路径:本地化和上云差异化分析

一、引言 1.1 研究背景与意义 在医疗信息化快速发展的当下,电子病历系统已成为医院信息管理的核心构成。电子病历(EMR)系统,是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图标、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的…...

设计模式:代理模式

代理模式是很常见的设计模式&#xff0c;即使没有专门学习过这种设计模式&#xff0c;在工作中也一定用过这种设计模式。在实际生活中&#xff0c;代理模式也是常见的&#xff0c;比如内阁首辅相对于皇帝&#xff0c;前者是后者的代理&#xff0c;内阁首辅收到奏折时&#xff0…...

141,【1】buuctf web [SUCTF 2019]EasyWeb

进入靶场 代码审计 <?php // 定义函数get_the_flag&#xff0c;功能是处理文件上传相关操作 function get_the_flag() {// 注释说明&#xff1a;webadmin会每隔20分钟删除用户上传的文件$userdir "upload/tmp_" . md5($_SERVER[REMOTE_ADDR]);// 检查用户目录…...

破解微服务疑难杂症:2025年全解决方案

微服务架构已经成为现代软件开发的主流选择&#xff0c;其优势在于能够将复杂的系统拆分为独立的服务模块&#xff0c;方便开发和维护。然而&#xff0c;在微服务的实施过程中&#xff0c;开发者往往会面临许多挑战&#xff0c;如服务间通信、数据一致性、性能优化和故障处理等…...

Node.js 中的 Event 模块详解

Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式&#xff0c;允许对象&#xff08;称为“事件发射器”&#xff09;发布事件&#xff0c;而其他对象&#xff08;称为“事件监听器”&#xff09;可以订阅并响应这些事件。这种模式非常适合处理异步操作和…...

EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS

随着互联网技术的飞速发展&#xff0c;实时通信&#xff08;RTC&#xff09;已经成为现代应用中不可或缺的一部分。无论是视频会议、在线教育、远程医疗&#xff0c;还是社交娱乐&#xff0c;实时通信技术都在其中扮演着重要角色。 然而&#xff0c;WebRTC技术在PC和移动端的支…...

pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网

首先pycharm官网是这一个。我是在2025年2月16日9:57进入的网站。如果网站还没有更新的话&#xff0c;那么就往下滑一下找到 community Edition,这个就是社区版了免费的。PyCharm&#xff1a;适用于数据科学和 Web 开发的 Python IDE 适用于数据科学和 Web 开发的 Python IDE&am…...

【玩转全栈】----Django模板语法、请求与响应

目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言 像之前那个页面&#xff0c;太过简陋&#xff0c;而且一个完整…...

网络安全:挑战、技术与未来发展

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在数字化时代&#xff0c;网络安全&#xff08;Cybersecurity&#xff09;已成为全球关注的焦点。随着云计算、大数据、…...

DeepSeek 服务器繁忙的全面解决方案

目录 引文 正文 一、 服务器繁忙的原因分析 二、 解决方案 2.1切换网络 2.2使用网络加速工具 2.3错峰使用DeepSeek 2.4本地部署 2.5调用API 三、官方动态 一、技术研发与产品升级 二、市场合作与商业化进展 三、区域化布局与产业赋能 四、未来规划与社会责任 结语…...

将OpenWrt部署在x86服务器上

正文共&#xff1a;1234 字 40 图&#xff0c;预估阅读时间&#xff1a;2 分钟 如果你问ChatGPT有哪些开源的SD-WAN方案&#xff0c;他会这样答复你&#xff1a; 我们看到&#xff0c;OpenWrt也属于比较知名的开源SD-WAN解决方案。当然&#xff0c;在很久之前&#xff0c;我就发…...

计算机视觉:卷积神经网络(CNN)基本概念(一)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络 一、引言 卷积神经网络&…...

企业文件共享中的权限管理与安全风险防范

在企业的日常运营中&#xff0c;文件共享是必不可少的一项工作。然而&#xff0c;文件共享过程中如果权限管理不当&#xff0c;极易引发安全风险&#xff0c;导致企业敏感信息泄露。因此&#xff0c;加强文件共享中的权限管理与安全风险防范&#xff0c;对于保障企业信息安全至…...

使用DeepSeek建立一个智能聊天机器人0.12

为了确保这段代码能够在Windows和Linux系统上都能正常运行,我考虑以下几个方面: 路径分隔符:在Windows和Linux中,文件路径的分隔符不同。Windows使用反斜杠(\),而Linux使用正斜杠(/)。我们可以使用 os.path.join 来处理路径,以确保跨平台兼容性。 消息框:tkinter.…...

国家队出手!DeepSeek上线国家超算互联网平台!

目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…...

Deep seek学习日记1

Deepseek最强大的就是它的深度思考&#xff0c;并且展现了它的思考过程。 五种可使用Deep seek的方式&#xff08;应该不限于这五种&#xff0c;后续嵌入deepseek的应该更多&#xff0c;多了解一点因为官网容易崩~~&#xff09;&#xff1a; 1.deep seek官网 2.硅基流动silicon…...

HTML怎么标注拖拽区域可访问说明_HTML dropzone提示文本【介绍】

...

GeoBench:基于GeoGuessr的大语言模型地理定位能力评测框架实践

1. 项目概述&#xff1a;GeoBench——大语言模型的地理定位能力评测场 如果你玩过GeoGuessr&#xff0c;一定体验过那种仅凭一张街景图片&#xff0c;就要在全球范围内猜出具体位置的烧脑乐趣。现在&#xff0c;把这个挑战交给ChatGPT、Claude、Gemini这些大语言模型会怎样&…...

别再踩坑了!Windows下用Conda安装PyTorch GPU版,保姆级版本对照表与避坑指南

Windows下Conda安装PyTorch GPU版终极避坑手册 刚接触深度学习的开发者&#xff0c;十有八九会在PyTorch GPU版本安装上栽跟头。明明按照教程一步步操作&#xff0c;最后torch.cuda.is_available()却返回False&#xff0c;这种挫败感我深有体会。本文将带你直击问题核心——版…...

构建企业级.NET代码编辑器:ScintillaNET终极架构解析

构建企业级.NET代码编辑器&#xff1a;ScintillaNET终极架构解析 【免费下载链接】ScintillaNET A Windows Forms control, wrapper, and bindings for the Scintilla text editor. 项目地址: https://gitcode.com/gh_mirrors/sc/ScintillaNET 在.NET桌面应用开发领域&a…...

VSCode 2026农业插件开发,从Node.js 20.12到Rust WASM桥接——跨平台低功耗灌溉控制插件落地全链路

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026农业物联网插件开发背景与架构概览 随着精准农业与边缘智能的加速融合&#xff0c;面向田间部署的轻量级开发工具需求激增。VSCode 2026 版本正式将农业物联网&#xff08;Agri-IoT&#xf…...

在线调试、Mock 和 SDK 生成怎么设计?一次讲清开放平台的开发者体验能力

在线调试、Mock、SDK 生成为什么是开放平台的关键体验能力&#xff1f; 这篇直接按在线调试、Mock、SDK 生成来拆&#xff0c;不只讲“方便开发”&#xff0c;而是把开发者体验为什么会影响平台接入效率讲具体。 目标是你看完后&#xff0c;能把开放平台的开发者体验&#xff0…...

KaTeX安全考量:XSS防护和内容安全策略终极指南

KaTeX安全考量&#xff1a;XSS防护和内容安全策略终极指南 【免费下载链接】KaTeX Fast math typesetting for the web. 项目地址: https://gitcode.com/GitHub_Trending/ka/KaTeX KaTeX作为一款Fast math typesetting for the web的工具&#xff0c;在处理数学公式渲染…...

千问 LeetCode 2127.参加会议的最多员工数 public int maximumInvitations(int[] favorite)

这道题是图论中的经典问题&#xff0c;考察的是基环树的处理。&#x1f9e0; 题目分析1. 建模&#xff1a;将员工看作图的节点&#xff0c;favorite[i] 表示从节点 i 指向节点 favorite[i] 的一条有向边。 2. 图的结构&#xff1a;由于每个节点出度为 1&#xff0c;这个图由若…...

告别SAP RFC调用迷茫:用C# .NET Core 6封装一个自己的SAPHelper(附完整源码)

告别SAP RFC调用迷茫&#xff1a;用C# .NET Core 6封装一个自己的SAPHelper&#xff08;附完整源码&#xff09; 在企业级应用开发中&#xff0c;SAP系统集成往往是绕不开的话题。许多.NET开发者虽然掌握了基础的RFC调用技术&#xff0c;却在面对重复代码、类型安全缺失和连接管…...

ColabFold:免费在线蛋白质结构预测,让科研门槛归零

ColabFold&#xff1a;免费在线蛋白质结构预测&#xff0c;让科研门槛归零 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold ColabFold是一个革命性的蛋白质结构预测工具&#xff0c;它通…...