文章目录

  • 一、Redis常用架构模式
    • 1.单机模式
      • 优点
      • 缺点
    • 2.主从模式
      • 常用的主从方式
      • 优点
      • 缺点
    • 3.哨兵模式
      • 关键词解释
      • 哨兵模式工作原理
      • 优点
      • 缺点
    • 4.集群模式
      • 分片
      • 优点
      • 缺点
  • 二、springboot集成
    • 1.单机模式
    • 2.哨兵模式
    • 3.集群模式

一、Redis常用架构模式

1.单机模式


单机模式是最简单的模式,因为不涉及数据同步,所有天然具备一致性。
单机Redis能够承载的 QPS(每秒查询速率)大概在几万左右。如果用户访问量太大,会导致redis直接挂掉。

优点
  1. 部署简单,成本低
  2. 天然具备一致性
缺点
  1. 缺乏高可用性,单机高性能受限于 CPU 的处理能力,Redis 是单线程的。
  2. 缺乏可靠性,单机有宕机的风险
  3. 内存容量有限

2.主从模式

Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。

主从模式主要通用对从数据库的读(read),来减轻主数据库的压力。

常用的主从方式
  1. 主数据库(master)可以读也可以写(read/write),从数据库仅读(read)
  2. 主数据库仅写( write),从数据库仅读(read)(最常用)
优点
  1. 降低主库压力,将读操作转交给从库
  2. 主节点宕机,从节点切换为主节点继续提供服务
缺点
  1. 可靠性不是很好,主节点故障便无法提供写入服务,因为从节点无法自动切换为主节点,需手动操作
  2. 没有解决主节点写操作的压力

3.哨兵模式


在 Redis 2.8 版本开始,引入了哨兵(Sentinel)这个概念。哨兵模式是主从的升级版,因为主从的出现故障后,不会自动恢复,需要人为干预。所以在主从的基础上,出现了哨兵模式。

哨兵模式就是为了监控主从的运行状况,对主从的健壮进行监控,就好像哨兵一样,只要有异常就发出警告,对异常状况进行处理。哨兵模式由两部分组成,哨兵节点和数据节点:

  • 哨兵节点:哨兵节点是特殊的 Redis 节点,不存储数据;
  • 数据节点:主节点和从节点都是数据节点。

Redis Sentinel 是分布式系统中监控 Redis 主从服务器,并提供主服务器下线时自动故障转移功能的模式。其中三个特性为:

  1. 监控:Sentinel 会不断地检查你的主服务器和从服务器是否运作正常;
  2. 提醒:当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知;
  3. 自动故障迁移:当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
关键词解释

定时任务

Sentinel 内部有 3 个定时任务,分别是:

  • 每 1 秒每个 Sentinel 对其他 Sentinel 和 Redis 节点执行 PING 操作(监控),这是一个心跳检测,是失败判定的依据。
  • 每 2 秒每个 Sentinel 通过 Master 节点的 channel 交换信息(Publish/Subscribe);
  • 每 10 秒每个 Sentinel 会对 Master 和 Slave 执行 INFO 命令。这个任务主要达到两个目的:发现 Slave 节点;确认主从关系。

主观下线

主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断,即单个 Sentinel 认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。

主观下线就是说如果服务器在给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 会将这个服务器标记为主观下线(SDOWN)。

客观下线

客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过命令互相交流之后,得出的服务器下线判断,然后开启 failover。

只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(ODOWN)。只有当 Master 被认定为客观下线时,才会发生故障迁移。

仲裁

仲裁指的是配置文件中的 quorum 选项。某个 Sentinel 先将 Master 节点标记为主观下线,然后会将这个判定通过 sentinel is-master-down-by-addr 命令询问其他 Sentinel 节点是否也同样认为该 addr 的 Master 节点要做主观下线。最后当达成这一共识的 Sentinel 个数达到前面说的 quorum 设置的值时,该 Master 节点会被认定为客观下线并进行故障转移。

quorum 的值一般设置为 Sentinel 个数的二分之一加 1,例如 3 个 Sentinel 就设置为 2。

哨兵模式工作原理
  1. 每个 Sentinel 以每秒一次的频率向它所知的 Master,Slave 以及其他 Sentinel 节点发送一个 PING 命令;
  2. 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过配置文件 own-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel 标记为主观下线;
  3. 如果一个 Master 被标记为主观下线,那么正在监视这个 Master 的所有 Sentinel 要以每秒一次的频率确认 Master 是否真的进入主观下线状态;
  4. 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 Master 的确进入了主观下线状态,则 Master 会被标记为客观下线;
  5. 如果 Master 处于 ODOWN 状态,则投票自动选出新的主节点。将剩余的从节点指向新的主节点继续进行数据复制;
  6. 在正常情况下,每个 Sentinel 会以每 10 秒一次的频率向它已知的所有 Master,Slave 发送 INFO 命令;当 Master 被 Sentinel 标记为客观下线时,Sentinel 向已下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次;
  7. 若没有足够数量的 Sentinel 同意 Master 已经下线,Master 的客观下线状态就会被移除。若 Master 重新向 Sentinel 的 PING 命令返回有效回复,Master 的主观下线状态就会被移除。
优点
  1. 心跳检查,Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  2. 可靠性高,实现了主从的自动切换
缺点
  1. 主从切换需要时间,可能丢失数据;
  2. 没有解决主节点写的压力;
  3. 动态扩容困难复杂,对于集群,容量达到上限时在线扩容会变得很复杂。

4.集群模式

哨兵模式在主从模式的基础上实现了自动化故障恢复(主从切换),但并没有解决主节点的写压力问题,存储能力受到单机的限制,动态扩容困难复杂。于是出现了集群模式(Redis Cluster),有效地解决了 Redis 分布式方面的需求。Redis Cluster 集群模式具有高可用、可扩展性、分布式、容错等特性。

集群模式实现了Redis数据的分布式存储,实现数据的分片,每个redis节点存储不同的内容,并且解决了在线的节点收缩(下线)和扩容(上线)问题。

从redis 3.0之后版本支持redis-cluster集群,Redis Cluster 采用无中心结构,每个节点都可以保存数据和整个集群状态,每个节点都和其他所有节点连接。Cluster 一般由多个节点组成,节点数量至少为 6 个才能保证组成完整高可用的集群,其中三个为主节点,三个为从节点。三个主节点会分配槽,处理客户端的命令请求,而从节点可用在主节点故障后,顶替主节点。

如上图所示,该集群中包含 6 个 Redis 节点,3 主 3 从,分别为 M1,M2,M3,S1,S2,S3。除了主从 Redis 节点之间进行数据复制外,所有 Redis 节点之间采用 Gossip 协议进行通信,交换维护节点元数据信息。

总结下来就是:读请求分配给 Slave 节点,写请求分配给 Master,数据同步从 Master 到 Slave 节点。

分片

单机、主从、哨兵的模式数据都是存储在一个节点上,其他节点进行数据的复制。而单个节点存储是存在上限的,集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,还可以分成多个分片。

Redis Cluster 采用虚拟哈希槽分区,所有的键根据哈希函数映射到 0 ~ 16383 整数槽内,计算公式:HASH_SLOT = CRC16(key) % 16384。每一个节点负责维护一部分槽以及槽所映射的键值数据。


Redis Cluster 提供了灵活的节点扩容和缩容方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容。可以说,槽是 Redis Cluster 管理数据的基本单位,集群伸缩就是槽和数据在节点之间的移动。

简单的理解就是:扩容或缩容以后,槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。

下面举例说明

假如,这里有 3 个节点的集群环境如下:

  • 节点 A 哈希槽范围为 0 ~ 5500;
  • 节点 B 哈希槽范围为 5501 ~ 11000;
  • 节点 C 哈希槽范围为 11001 ~ 16383。

此时,我们如果要存储数据,按照 Redis Cluster 哈希槽的算法,假设结果是: CRC16(key) % 16384 = 6782。 那么就会把这个 key 的存储分配到 B 节点。此时连接 A、B、C 任何一个节点获取 key,都会这样计算,最终通过 B 节点获取数据。

此时,我们如果要存储数据,按照 Redis Cluster 哈希槽的算法,假设结果是: CRC16(key) % 16384 = 6782。 那么就会把这个 key 的存储分配到 B 节点。此时连接 A、B、C 任何一个节点获取 key,都会这样计算,最终通过 B 节点获取数据。

扩容,假如这时我们新增一个节点 D,Redis Cluster 会从各个节点中拿取一部分 Slot 到 D 上,比如会变成这样:

  • 节点 A 哈希槽范围为 1266 ~ 5500;
  • 节点 B 哈希槽范围为 6827 ~ 11000;
  • 节点 C 哈希槽范围为 12288 ~ 16383;
  • 节点 D 哈希槽范围为 0 ~ 1265,5501 ~ 6826,11001 ~ 12287

这种特性允许在集群中轻松地添加和删除节点。同样的如果我想删除节点 D,只需要将节点 D 的哈希槽移动到其他节点,当节点是空时,便可完全将它从集群中移除。

优点
  1. 无中心架构(不存在哪个节点影响性能瓶颈)。
  2. 数据存储分布在多个节点,节点间数据共享,可动态调整数据分布。
  3. 可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
  4. 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本
  5. 实现故障自动转移,节点之间通过投票机制完成 Slave到 Master 的角色提升。
缺点
  1. 资源隔离性较差,容易出现相互影响的情况;
  2. 数据通过异步复制,不保证数据的强一致性。

二、springboot集成

1.单机模式

配置

spring:redis:host: 10.0.0.1port: 6379password: 123456

2.哨兵模式

配置

spring:redis:password: 123456sentinel:master: mymasternodes: 10.0.0.1:26379,10.0.0.2:26379,10.0.0.3:26379

3.集群模式

配置

spring:redis:password: 123456cluster:nodes: 10.0.0.1:26379,10.0.0.2:26379,10.0.0.3:26379

参考文章:https://blog.csdn.net/weixin_43995372/article/details/108370857

Redis常用架构模式相关推荐

  1. 软件架构设计之常用架构模式

    1.分层架构:分层架构是使用最多的架构模式,通过分层使各个层的职责更加明确,通过定义的接口使各层之间通讯,上层使用下层提供的服务.分层分为:严格意义上的分层,一般意义的分层.严格意义的分层是n+1层使 ...

  2. Redis的架构模式

    单机版 特点:简单 问题: 1.内存容量有限 2.处理能力有限 3.无法高可用. 主从复制 Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的 ...

  3. 软件架构中的架构模式和最佳实践:探索和实践

    作者:禅与计算机程序设计艺术 "架构"这个词汇一直是软件工程师们谈论的热点话题之一,无论从代码设计.框架选型.需求分析.项目管理.测试策略还是后续的维护.运维等各个方面都离不开架构 ...

  4. 【Redis】Redis主从架构和哨兵模式

    文章目录 主从架构 为什么需要Redis主从架构? 搭建主从架构(一主二从) 主从一致原理 复制积压缓冲区 全量复制 增量复制 在主从架构中出现了宕机的情况 为什么主从库之间的复制不使用 AOF? 哨 ...

  5. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  6. 架构:常用的三种架构模式

    在做架构设计的时候,一般会采用一些架构模式,便于设计和以后需求变更时修改代码.如果设计模式选择得不正确那么很容易造成架构的混乱,代码也会变成怪物. 分层模式 分层模式 分层模式是最常见的模式.我们熟悉 ...

  7. 详解 CQRS 架构模式

    从一开始,软件系统就被用于各种用途,针对它们的需求也随着时间的推移而增长.需求的变更可能与业务逻辑.伸缩性或系统的其他方面有关. 为了满足这些相互矛盾或重叠的需求,工程师必须在设计系统时做出各种各样的 ...

  8. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  9. web前端新手入门教程:Web 框架的架构模式探讨

    在写干货之前,我想先探(qiang)讨(diao)两个问题,模式的局限性?模式有什么用? 最近看到一篇文章对我启发很大,许来西在知乎的回答<哲学和科学有什么关联?>,全篇较长,这里摘录我要 ...

最新文章

  1. 什么是大数据口子_大数据分析师年薪几十万,学什么专业才能从事大数据?
  2. Kotlin 二分法算法游戏--猜价格
  3. 第四节:格式化器如何序列化类型实例
  4. 94 Binary Tree Inorder Traversal
  5. Python查看、修改pip install 默认使用的pip库
  6. js时间格式化通用方法
  7. 读《Node入门》笔记
  8. 给你的站点添加 DNS CAA 保护
  9. 基于ADS软件的Verilog-A建模
  10. 18讲项目实战签证详细页
  11. 谷歌浏览器开启JavaScript
  12. Android使用adb截屏
  13. 【vendor】Go 包依赖管理工具govendor
  14. 区块链笔记 - 1、区块链的来龙去脉
  15. 数学四大思想八大方法_中考数学专题五,四种数学思想方法,第3个比较难掌握...
  16. NRF905无线通讯小车
  17. 【杂耍】记录一次红米Note的救砖经历
  18. 2020初网络营销成功案例
  19. 微信小程序 特殊布局下,页面上拉触底事件onReachBottom无法触发解决方法
  20. 服务器上无法重命名文件夹,linux如何重命名文件和文件夹_网站服务器运行维护...

热门文章

  1. PHP代码审计之基础篇
  2. common-fileupload实现文件上传功能
  3. 一文搞懂Q-Q plot图的含义
  4. 华丽成长为IT高富帅、IT白富美(十三)
  5. 5G谈“风暴”可能为之尚早,芯片厂商之间的拉锯战才是这场变革的热身赛
  6. 多x多y的origin图_一张图了解iPhone 12 mini到底有多小
  7. lisp和python_给 Lisp 程序员的 Python 简介
  8. 批量重命名下载的不规则电视剧文件名
  9. cloudflare免费证书_Cloudflare免费CDN加速和免费SSL证书服务
  10. setInterval:定时器