redis的原理(三)

简介: redis的原理(三)
Redis如何能支撑高并发的架构:

1、主从架构:这也就是支撑10万,20万,50万的并发量,redis属于企业级的毫秒级的nosql数据库。只要涉及到企业级相关的一定要安装到linux系统上,因为linux系统上有epoll模型,多路复用,来提高整个的高并发的性能。因为Linux是天生的服务器。

2、redis在什么情况下出现性能急速下降

①、value的值过大

②、逻辑处理比较复杂, lpush:像队列上推进去,不像set一样。

3、如何设计Redis缓存架构能够处理20W+QPS.

主从:MasterNode    SlaveNode

Master节点不能处理20万的请求量,然后可以把其下的请求量分发到slave节点上。

我们用到缓存就用到它的读,这里就涉及到并发,读请求能够达到20万的QPS。

4、如果是写的操作每一秒的操作要达到20wQPS的话需要多创建几个主从节点。多主多从的结构上面的主从架构是在生产环境下的。如果是同一台的主从的话有可能出现单机 故障,一旦这台机器出现故障,整个的主从架构就死掉了。

5、如果这里有5台服务器,那么Master节点的服务器挂掉的话没有关系,因为在master和slave的架构下面可以用哨兵机制对其故障的转移。哨兵机制实现主备切换,这时就可以实现高可用。

6、如果还想要做更大量的QPS的话可以从主从架构变为读写分离的主从架构,这时性能会更高。利用2,8原则把所有的读的请求放到slave,写的请求放到master,写入到master中的数据通过异步的发送到全部的slave节点上面去,让所有的slave节点同步。

7、一旦搭建了主从的架构的话,虽然达到了20W甚至上百万的QPS的请求,持久化 的机制还需要注意:

①、因为主节点要将所有的数据同步到所有的slave节点上,而且要与slave节点保持心跳的过程。最好将master节点的持久化开启,不要关,一旦master出现问题,如果继续还有数据往master节点上去写的话,master还没有来的及同步到slave节点上的时候,如果master节点宕机后,这时数据不完整,在没有加哨兵的情况下一旦Master宕机掉,如果没有做持久化,这时数据就完全丢失了。

②、因为当master节点启动好以后,这时slave节点会继续与master节点保持联系,还没有做主从切换的时候保持联系在重新启动的时候会在Master节点下有一个runId,如果run-id和原先的run-id保持不一致的话,这时会做全量的复制,明明master节点的数据已经丢失了,做全量复制的话,这时会把空 的数据集rdb文件发送到所有的slave端。这时所有的slave端会同步的空的数据集的rdb文件中的数据,这时slave上的数据也会丢失。

主从的架构做一个深入的刨析:

1、主从架构的核心原理

①、当启动一个slave node的时候,它会发送一个PSYNC9(会将当前机器的ip地址+slave节点的run-id,如果发现和master节点的run-id不一致会做全量的复制)命令给master node,第一次与master建网络连接的时候也会做一次全量的复制。

②、如果这时slave node重新连接master node,那么master node仅仅会复制给slave部分缺少的数据(增量复制); 否则如果是slave node第一次连接master node,那么会触发一次full resynchronization(把整个的这个时刻的redis中的rdb文件及其内存中的数据进行一个同步到自己的slave节点上去)。

③、开始full resynchronization的时候,master会启动一个后台线程,开始生成一份RDB快照文件,同时还会将从客户端收到的所有写命令缓存在内存中。RDB文件生成完毕之后,master会将这个RDB发送给slave(master和slave之间是建立网络连接的,其实就是socket连接),slave会先写入本地磁盘,然后再从本地磁盘加载到内存中。


④、slave node如果跟master node有网络故障,断开了连接,会自动重连。master如果发现有多个slave node都来重新连接,仅仅会启动一个rdb save操作(重新生成一个rdb文件,然后分发给所有的slave),用一份数据服务所有slave node。在这里连接的时候会有一个延迟,延迟大概5秒左右,然后把rdb文件分发给其下的所有的slave节点。等待的原因是想要等待更多的连接过来,不想来一个就发一个,这很浪费时间。

2、主从复制的断点续传

①、rdb文件是几小时,几天才生成一个rdb文件,不会一直在变的,从redis 3.8开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份(增量复制)当offset相等的时候会进行一个增量的复制。


②、如果发现offset不一样的话,这时不会断点续传,而是全量复制,这时将原先的offset重置为0,然后再一次进行全量复制,默认的复制:先与slave建立网络连接,然后将master下的数据生成一份快照,这就是所谓的rdb,一般情况下都是rdb文件,它会使用一个异步的线程将这个rdb文件发送给slave,然后slave拿到这个rdb文件并不是直接去使用了,而是持久化到slvae这台机器的磁盘上,然后slave进行同步的时候,然后slave将磁盘中的数据加载到slave的内存里面去。虚线代表异步。

③、master一直在接收数据,所以没有转成rdb文件,这时slave中的数据和mster的数据就不一样,那么如何去保证数据是一样的呢:他会将master中的写的指令统统的发送给slave,然后slave去执行这些写的指令,这时master和slave就同步了。

3、无磁盘化复制:这时就不会生成一个具体的文件

master在内存中直接创建流文件rdb,然后发送给slave,不会在自己本地落地磁盘了,不用持久化了。

repl-diskless-sync      repl-diskless-sync-delay

等待一定时长再开始复制,因为要等更多slave重新连接过来, 无计可施了情况下需要再次优化性能,可以配置上面参数了。想要快速操作,不想在传输rdb文件中的过程中io操作导致性能降低,因为持久化就会有io的操作。

缺点:因为是在内存中,一旦机器宕机,就完蛋了。

相关文章
|
7天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
3天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2436 13
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1480 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19268 29
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18816 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17513 13
Apache Paimon V0.9最新进展
|
1月前
|
存储 人工智能 前端开发
AI 网关零代码解决 AI 幻觉问题
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。
18695 16
|
5天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
321 11
|
2天前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
2天前
|
SQL 监控 druid
Druid连接池学习
Druid学习笔记,使用Druid进行密码加密。参考文档:https://github.com/alibaba/druid
184 80