Redis集群模式之Redis Cluster(3)

        上篇文章我们讲解了Redis Cluster的状态监测与恢复过程,这篇文章我们来进行Redis Cluster内容的收尾,将其扩容和缩容的过程进行讲解,并分析RedisCluster的优缺点。

扩容和缩容

        当集群中出现容量限制或者其他一些原因需要扩容时,Reids Cluster提供了比较优雅的集群扩容方案:

        (1)首先将新节点加入到集群中,可以通过在集群中热河一个客户端执行Cluster meet新节点ip:端口,或者通过redis-trib add node添加,新添加的节点默认在集群中都是主节点。

        (2)数据的迁移。迁移数据的大致流程是,首先需要确定哪些槽需要被迁移到目标节点,然后获取槽中key,将槽中的key全部迁移到目标节点,然后向集群所有主节点广播槽(数据)全部迁移到了目标节点。

        缩容的大致过程与扩容一致,需要判断下线的节点是否是主节点,以及主节点上是否有槽。若主节点上有槽,需要将槽迁移到集群中的其他主节点,槽迁移完成之后,需要向其他节点广播该节点准备下线。最后需要将该下线主节点的从节点指向其他主节点(最好是先将从节点下线)。

为什么Redis Cluster的Hash Slot是16384?

        在Redis节点发送心跳包时需要把所有的槽放到这个心跳包里,以便让节点知道当前集群信息,16384 = 16K,在发送心跳包时使用char进行bitmap压缩后是2K,也就是说用2K的空间创建了16K的槽数。

        虽然说用CRC16算法最多可以分配65535个槽位,65535 = 65K,压缩后就是8K,也就是说需要8K的心跳包,作者认为这样不太值的;并且一般情况下一个Redis集群不会有超过1000个Master节点,所以16K的槽位是比较合适的选择。

为什么Redis Cluster中不建议使用发布订阅呢?

        在集群模式下,所有的publish命令都会向所有节点(包括从节点)进行广播,造成每条publish数据都会在集群内所有节点传播一次,加重了带宽负担,对于在有大量节点的集群中频繁使用pub,会严重消耗带宽,不建议使用。(虽然官网上说有时候可以使用布隆过滤器或其他算法进行优化)。

Redis Cluster的优缺点总结:

        优点:

        (1)无中心架构。

        (2)数据按照Slot存储分布在多个节点,节点间数据共享,可动态调整数据分布。

        (3)可扩展性。可以线性扩展到1000多个节点,节点可动态添加或删除。

        (4)高可用性。部分节点不可用时,集群仍然可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升。

        (5)降低运维成本,提高系统的扩展性和可用性。

        缺点:

        (1)Client实现复杂,驱动要求实现Smart Client,缓存Slots mapping信息并及时更新,提高了开发难度,客户端的不成熟影响业务的稳定性。目前仅有JedisCluster相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。

        (2)节点会因为某些原因发生阻塞(阻塞时间大于cluster-node-timeout),被判断下线,这种failover是没有必要的。

        (3)数据通过异步复制,不保证数据的强一致性。

        (4)多个业务使用同一套集群时,无法根据统计区分冷热数据,资源隔离性较差,容易出现相互影响的情况。

        (5)Slave在集群中充当“冷备”,不能缓解读压力,当然可以通过SDK的合理设计来提高Slave 的资源利用率。

        (6)避免产生hot-key,导致主库节点成为系统的短板。

        (7)避免产生big-key,导致网卡撑爆、慢查询等。

        这篇文章我们对Redis Cluster的讲解进行了收尾和总结。大家有什么问题或勘误可以在评论区留言,笔者看到都会回复的。
        

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

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

相关文章

Cursor ReAct Agent技术架构

一、架构核心思想 “零熵操作交给AI”理念 Cursor通过ReAct模式实现编程中重复性工作的自动化: 零熵操作:机械性任务(代码补全/格式化/重构/语法修复/导入管理) Tab-away机制:一键接受AI建议,保持思维连续…

国学IP行业实战洞察:聚焦创客匠人,解锁创始人IP与知识变现新路径

国学行业正经历“文化价值”与“商业变现”的深度融合,2023年市场规模突破千亿大关,年增速超 10%。在“IP化数字化”浪潮中,创客匠人作为垂直领域技术服务商,以全链路工具矩阵为支点,撬动国学创始人IP从内容生产到商业…

R语言开发入门完整指南

R语言开发入门完整指南 目录 R语言简介环境配置包管理基本语法数据类型和结构数据操作统计分析数据可视化编程结构实用技巧学习资源 R语言简介 R是一种专为统计计算和图形设计的编程语言,广泛应用于数据分析、统计建模、机器学习和数据可视化。R语言具有以下特点…

ObservedV2装饰器和Trace装饰器

为了对嵌套类对象属性变化直接观测,华为提供了ObservedV2和Trace装饰器。这两个装饰器必须搭配使用,单独使用任何一个都不会起任何作用;在继承类中也可监测;ObservedV2的类实例目前不支持使用JSON.stringify进行序列化&#xff0c…

6月计算机新书:深度学习、大模型、DeepSeek

六月,这个充满活力与希望的季节,三本重磅新书《深度学习:基础与概念》、《MCP极简开发:轻松打造高效智能体》与《大模型应用开发:RAG实战课》翩然而至,为我们开启了一场探索科技前沿的奇妙之旅。一起来看详…

扁平风格职场商务通用PPT模版分享

扁平风格PPT模版,创意卡通扁平化通用PPT模版,创意扁平化励志论文答辩PPT模版,卡通职场商务PPT模版,职场培训,项目策划,工作总结类PPT模版,互联网电子商务PPT模版 扁平风格职场商务通用PPT模版分…

jupyter内核崩溃

最近在做用k-mer评估基因组规模的任务,其中一个局部程序,想偷懒,直接在jupyter中跑了下结果,想看看这一小步处理如何,结果没想到内核崩溃了! 这一步我的草稿代码如下: import pandas as pd imp…

Java企业技术趋势分析:AI应用的落地实践与未来展望

Java企业技术趋势分析:AI应用的落地实践与未来展望 开篇:技术趋势与市场需求 在当前快速发展的数字化时代,人工智能(AI)已经成为推动企业创新和效率提升的关键力量。Java作为企业级应用开发的主流语言,正…

每日Prompt:Steve Winter风格插画

提示词 世界摄影大师杰作,极简主义,Steve Winter风格,6只不同颜色的布偶猫围成一圈,看向镜头中心,仰天视角,天空背景,高品质细节,超精细CG,高分辨率,最佳品质…

Vue3 + Element Plus 获取表格列信息

在 Vue 3 和 Element Plus 中,可以通过以下步骤获取表格的列信息: 实现步骤: 使用 ref 绑定表格实例 通过表格实例的 store.states.columns 获取列数据 处理列信息(过滤隐藏列、处理嵌套表头等) 示例代码&#xf…

logger2js - JavaScript日志与调试工具库

logger2js - JavaScript日志与调试工具库 logger2js是一个功能强大的前端JavaScript日志与调试工具库,提供了丰富的日志输出、性能测试和代码调试功能。该库支持配置化引入,包含5种皮肤风格和丰富的API接口,如 a l e r t 增强方法、 alert增…

Stone 3D使用RemoteMesh组件极大的缩小工程文件尺寸

Stone 3D的工程文件tsp默认包含了场景中所有的对象和数据,这样的好处是tsp可以单独离线保存,但坏处是tsp文件通常偏大。 解决这个问题的方法是把外部glb模型文件通过RemoteMesh组件来加载。 首先创建一个空实体,然后给该空实体添加RemoteMe…

【深入剖析】攻克 Java 并发的基石:Java 内存模型 (JMM) 原理与实践指南

0.引言 理解 JMM (Java Memory Model - JMM) 是掌握 Java 并发编程的关键,它定义了多线程环境下,线程如何与主内存以及彼此之间交互内存数据。 核心目标: JMM 旨在解决多线程编程中的三个核心问题: 原子性 (Atomicity)&#xf…

【Three.js】初识 Three.js

Threejs介绍 我们开发 webgl 主要是使用 threejs 这个库,因为 webGL太难用,太复杂!但是现代浏览器都支持WebGL,这样我们就不必使用Flash、Java等插件就能在浏览器中创建三维图形。 threejs 它提供-一个很简单的关于WebGL特性的J…

【经验总结】ECU休眠后连续发送NM报文3S后ECU网络才被唤醒问题分析

目录 前言 正文 1.问题描述 2.问题分析 3.验证猜想 4.总结 前言 ECU的上下电/休眠唤醒在ECU开发设计过程中最容易出问题且都为严重问题,最近在项目开发过程中遇到ECU休眠状态下连续发送NM报文3S后才能唤醒CAN网络的问题,解决问题比较顺利,但分析过程中涉及到的网络休…

企业架构框架深入解析:TOGAF、Zachman Framework、FEAF与Gartner EA Framework

执行摘要 企业架构(EA)是一项至关重要的实践,它使组织能够协调其业务战略、运营流程和技术基础设施,以实现整体战略目标。企业架构框架作为结构化的方法论和综合性工具,旨在管理企业级系统的固有复杂性,提…

数字化动态ID随机水印和ID跑马灯实现教育视频防录屏

摘要:数字化动态ID随机水印和ID跑马灯技术可以有效保护数字教育资源。动态水印将用户信息随机显示在视频上且不可去除,能追踪录屏者并震慑盗版行为。ID跑马灯则自定义显示观看者信息,便于追踪盗版源头并提供法律证据。这些技术大幅增加盗版成…

< 自用文儿 腾讯云 VPS > Ubuntu 24 系统,基本设置

前言: 3 月份买的腾讯云的这台 VPS,刚发现现在退款,只能返回 0 元。测试应用已经迁移到JD,清除内容太麻烦,重装更简单。 因为配合政策,国内的云主机都有两个 IP 地址,一个内网,一个…

React ajax中的跨域以及代理服务器

Axios的诞生 为什么会诞生Axios?说到Axios我们就不得不说下Ajax。最初的旧浏览器页面在向服务器请求数据时,由于返回的是整个页面的数据,所以整个页面都会强制刷新一下,这对于用户来讲并不是很友好。因为当我们只需要请求部分数据…

HOT 100 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像

一、73. 矩阵置零 73. 矩阵置零 - 力扣(LeetCode) 1. 解题思路 1. 使用两个数组分别标记每行每列是否有0,初始化全为False,遇到0就变成True。 2. 遍历矩阵,遇到0就将False改成True。 3. 再次遍历矩阵,更…