技术分享 | Redis 集群架构解析

news2024/11/26 19:27:10

作者:贲绍华

爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


一、集群架构的一些基本概念

当我们只使用一台 Redis 实例也就是 Single 架构时,需要考虑一些非常实际的问题,如:单节点一但宕机则业务停摆、单节点的容量不可能是无限制的、性能同样存在瓶颈等…

集群架构模式最主要的三个目的就是:高可用、提升资源限制瓶颈、提升网络吞吐:

1.1 高可用 - Sentinel

Redis Sentinel 是一个分布式系统, 可以在一个架构中运行多个 Sentinel 进程(progress)

这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,
以及选择哪个从服务器作为新的主服务器。

1.2 提升资源限制瓶颈 - 数据分区存储(Partitioning)

将数据通过对应的算法规则,自动分割数据到不同的节点上,每一个节点都是主,都承担一部分数据。

在整个集群的部分节点失败或者不可达的情况下依然能够继续处理命令。

数据的拆分可以依据AKF原则根据不同维度进行灵活拆分:

1.3 提高网络吞吐

Redis使用的是epoll IO模型,单机吞吐量也足够优秀,但当业务流量单一入口不能兜住时则需要考虑分流策略了。

如:增加 slave 节点、使用 proxy 作为流量入口、Redis cluster、LVS等

灵活的架构能使业务侧不需要太关心具体到哪个节点,节点资源瓶颈如何。均使用统一流量入口即可。

二、客户端分区

此处的客户端指的就是业务侧,根据业务类型分类存取,自行维护一个 client to redis node 的映射关系或服务发现机制。

简单场景下这么做并不会有什么问题,但是也存在一些缺点,如:

  • 存取规则需要统一,需要考虑扩缩容时业务逻辑调整的影响面
  • 业务其实并不清楚 Redis 节点机器的瓶颈
  • 每个客户端都需要连接所有的 Redis 节点

三、代理分区

Redis 也有一些优秀的 proxy ,它们在作为统一流量入口的同时也提供了一些非常实用的功能,如数据 sharding 。

根据一定规则使对应的key落到集群的不同节点上,下边简单介绍一下常见的redis proxy与分片的算法逻辑:

3.1 Modula [ 根据算法 + 取模存取 ]

通过算法对key进行取模,决定最终需要在哪个节点上进行存取。

  • 缺点:可能会出现数据分布节点不均匀的情况,机器扩缩容时需要调整取模策略
    3.2 Random [ 随机存取 ]

3.2 Random [ 随机存取 ]

作为消息队列使用时候,可以将多个Redis实例组成Topic,生产者存入(lpush)数据,消费者消费(rpop)

  • 缺点:可能会出现数据分布节点不均匀的情况

3.3 Ketama [ 一致性哈希 ]

一致哈希算法是对一组数进行取模运算的结果值组织成一个圆环,就像钟表一样,它可以被想象成带有60个刻度的圆,这个圆环被称为哈希环。
在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。

一致性哈希解决了简单哈希算法在分布式哈希表中存在的动态伸缩等问题。

  • 优点:增加节点可以分担其他节点存储压力,因为没有取模过程不会影响其他节点的存储策略
  • 缺点:新增节点会造成一小部分数据不能命中(此时应再取附近的2个节点查看数据是否存在)

操作步骤:

  1. 规划一个哈希环,环上node hash后的槽位为物理节点,其余为虚拟节点
  2. 将所有物理节点标记起来
  3. 数据(key)加进来时通过hash过后查询该槽位是否为物理节点,如果是虚拟节点,则找寻离它最近的物理节点后存入

四、Redis Cluster(无中心架构)

Redis Cluster没有使用一致性hash, 而是引入了哈希槽的概念。每一台实例都会分配对应的槽位,自带了算法与集群内所有槽位的记录,所以每一台都是主。
客户端随机地请求任意一个redis实例,然后由Redis将请求转发给正确的Redis节点。简单的说就是每一个节点的组成都是:数据+路由

  • 优点:扩缩容方便,Redis自带了工具与脚本对于Redis cluster架构也有很好的支持
  • 缺点:客户端连接直接压在了实例自身(可以在上层增加 proxy),删除重定向也会造成过多的请求转发与处理流程

为了方便理解,下边通过图解进行说明:


五、其他

当使用Redis cluster架构时候:

  • 涉及多个key的操作通常不会被支持。例如不能对两个集合求交集,因为他们可能被存储到不同的Redis实例(KEYS *、WATCH、MULTI…)
  • 同时操作多个key,则不能使用Redis事务

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

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

相关文章

决策树算法中处理噪音点

目录 如何解决?——采用剪枝的方法。 预剪枝 后剪枝 如果训练集中存在噪音点,模型在学习的过程总会将噪音与标签的关系也学习进去,这样就会造成模型的过拟合化,也就是模型在训练集的分类效果很好,在未知数据上处理效…

python快速实现2048小游戏

《2048》是一款比较流行的数字游戏,最早于2014年3月20日发行。原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台。这款游戏是基于《1024》和《小3传奇》的玩法开发而成的新型数字游戏。 操作指南: 每次…

景区票务系统毕业设计,景区售票系统设计与实现,旅游售票系统毕业设计源码分析

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于java的景区景点预约购票系统,整体使用javaMySql的B/S架构,技术上采用了springboot框架;通过后台添加景区资讯、景点介绍,管理用户订单;用户通过…

Vue怎么通过JSX动态渲染组件

一、明确需求 有一组数组结构如下: const arr [ { tag: van-field }, // 输入框{ tag: van-cell }, // 弹出层{ tag: van-stepper } // 步进器 ] 想通过循环arr,拿到tag渲染对应的组件。 下面我们分析如何写才是最优。 二、进行分析 2.1 v-if走天…

JavaScript期末大作业:基于HTML+CSS+JavaScript黑色的bootstrap响应式企业博客介绍模板

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

JTable详细介绍

目录 一、基本表格 二、修改列宽并显示列的名称 三、使用AbstractTableModel抽象类存储数据 一、基本表格 显示一个Table需要两组数据 1. 一维数组: String[]columnNames 表示表格的标题 2. 二维数组: String[][] heros 表格中的内容 默认情况下&…

使用openssl工具生成CSR文件

使用OpenSSL工具生成CSR文件 登录服务器。 安装OpenSSL工具。 执行以下命令,生成CSR文件。 openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout [$Key_File] -out [$OpenSSL_CSR] 说明 -new:指定生成一个新的CSR文件。 -nodes:指定…

WindowsNT下的OpenGL

三、WindowsNT下的OpenGL 3.1、Windows NT下的OpenGL函数   如前面的章节所述,Windows NT下的OpenGL同样包含100多个库函数,这些函数都按一定的格式来命名,即每个函数都以gl开头。Windows NT下的OpenGL除了具有基本的OpenGL函数外&#xf…

威马汽车欲曲线上市:沈晖已提前持股并任职,销量垫底、员工降薪

12月5日,港交所上市公司Apollo出行(HK:00860)发布公告称,该公司拟收购一家从事智能电动车的公司,目标公司的业务涵盖一系列配备先进技术的智能电动车,目标客户为中国年轻且精通技术的用户(特别是…

小迪-day14(注入类型之提交注入)

1、参数提交注入 1.1 明确参数类型 数字,字符,搜索,JSON等1.2 明确提交方式 GET, POST,COOKIE,REQUEST,HTTP头等可能有些网站是以Request的方式接受参数,所以GET和POST都行 注入的地方可能在User-Agent、cookie上&a…

辽宁熤星传媒文化:抖音原创特效怎么做?

现在很多小伙伴在家都基本上会去找一些副业来做,或者是一些赚钱的方法,要知道,抖音其实还是有很多赚钱的机遇在里面的,那么大家拍抖音都是需要去使用特效的,那么抖音特效应该怎么做呢?跟着辽宁熤星传媒小编…

探索可观测性:AIOps中的时序数据应用

01. 背景 随着科技的发展,时序数据在我们的认知中占据越来越多的位置,小到电子元件在每个时刻的状态,大到世界每天的新冠治愈人数,一切可观测,可度量,可统计的数据只要带上了时间这个重要的因素就会成为时…

Antlr4 快速入门 - 编写语法解析器

Antlr全称(ANother Tool for Language Recognition),Antlr4是一款强大的语法分析器生成工具,推特,Haddop,Oracle等各大知名公司在用到了Antlr来构建自己的语言处理类项目。 一门语言的正式描述称为语法(grammar),Antl…

计算机考研报名人数下降一半!211北京科技大学计算机报考人数公布!

北京科技大学是一所211大学,计算机学科评估B,计算机实力在211大学中还算不错。前段时间,北京科技大学公布了23考研的报考人数,而且详细到了各个专业的人数:北京科技大学2023年硕士研究生各招生专业准考人数统计表https…

PyQt5页面跳转问题及解决方式

问题1:如何实现页面间跳转 主要定义MainWindow类和Actions.py class MainWindow: Actions.py: 问题2:实现定义函数传参功能 大胆修改,将定义函数的参数值改为a;使用函数处将参数加上: 运行&…

腾讯云动态公网IP绑定域名实现内网服务器公网穿透

公众号推广: 目前CSDN进行VIP可见,文章可在微信公众号进行免费的阅读。 文章内容经过认证实践,比较的清晰易懂,适合初次接触的人员。 目录 公众号推广: 需求场景: 解决方案: 实现方案:

1.5.4 HDFS 客户端操作-hadoop-最全最完整的保姆级的java大数据学习资料

文章目录1.5.4 HDFS 客户端操作1.5.4.1 Shell 命令行操作HDFS1.5.4.2 JAVA客户端1.5.4.2.1 客户端环境准备1.5.4.2.2 HDFS的API操作1.5.4.2.2.1 上传文件1.5.4.2.2.2 下载文件1.5.4.2.2.3 删除文件/文件夹1.5.4.2.2.4 查看文件名称、权限、长度、块信息1.5.4.2.2.5 文件夹判断1…

Letbook Cookbook题单——数组2

Letbook Cookbook题单——数组2 39. 组合总和 难度中等 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。…

Qgis加载arcgis的gdb格式数据

方式1:文件浏览器打开可直接看到图层,拖到可视区域即可。 方式2:gdb文件夹拖到可视区域即可。 方式3:图层-矢量-目录 该gdb可能没有坐标信息,需要跟甲方询问或者自己尝试