MST

星途 面试题库

面试题:缓存设计:如何基于Redis Sentinel与Cluster模式设计高并发缓存系统

假设你要设计一个应对高并发读写的后端缓存系统,在使用Redis时,从读写性能、数据分片、故障转移等方面分析,何时选择Sentinel模式,何时选择Cluster模式,说明理由并给出简单架构设计思路。
39.8万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

Sentinel模式

  1. 适用场景
    • 读写性能:适用于读操作占比较高,写操作相对较少的场景。Sentinel模式下,主从架构能很好地满足读请求的负载均衡,从节点可以分担读压力,而写操作主要在主节点进行,对于写操作频率不高的场景能满足性能需求。
    • 数据分片:当数据量相对较小,不需要进行复杂的数据分片时适用。因为Sentinel模式主要基于主从复制,并没有内置数据分片机制,数据是完整地在主从节点间复制。
    • 故障转移:当对故障转移的及时性要求较高,且系统规模不是特别大时适合。Sentinel能自动检测主节点故障并进行故障转移,快速将从节点提升为主节点,保证服务可用性。
  2. 理由:Sentinel模式架构相对简单,部署和维护成本较低。在读多写少且数据量不大的情况下,能有效利用主从架构优势,并且Sentinel强大的故障检测和转移能力可以保证系统的高可用性。
  3. 架构设计思路
    • 主从节点配置:配置一个主节点和多个从节点,从节点通过复制主节点数据来提供读服务。例如,在Redis配置文件中,从节点通过 slaveof <masterip> <masterport> 命令来设置主节点信息。
    • Sentinel配置:部署多个Sentinel节点,这些节点相互通信,共同监控主从节点状态。Sentinel节点通过配置文件指定要监控的主节点信息,如 sentinel monitor <master - name> <masterip> <masterport> <quorum>,其中 <quorum> 表示判断主节点下线需要的Sentinel节点数。

Cluster模式

  1. 适用场景
    • 读写性能:适合读写操作都非常频繁且并发量极高的场景。Cluster模式采用数据分片机制,将数据分布在多个节点上,每个节点负责一部分数据的读写,能充分利用多个节点的资源,提升整体读写性能。
    • 数据分片:当数据量巨大,需要对数据进行分布式存储和管理时适用。Cluster模式通过哈希槽(hash slot)机制实现数据自动分片,每个节点负责一定范围的哈希槽,数据根据哈希值分布在不同节点。
    • 故障转移:适用于大规模系统,对故障转移的自动化和可靠性要求极高的场景。Cluster模式下,当某个节点出现故障时,集群能够自动将其负责的哈希槽迁移到其他正常节点,保证服务的连续性。
  2. 理由:Cluster模式具备强大的数据分片和分布式处理能力,能应对大规模数据和高并发读写的挑战,同时其自动化的故障转移机制在大规模集群环境下能有效保障系统可用性。
  3. 架构设计思路
    • 节点部署:部署多个Redis节点组成集群,每个节点都可以是主节点或从节点(从节点用于故障转移时提升为主节点)。
    • 哈希槽分配:Redis Cluster有16384个哈希槽,每个主节点负责一部分哈希槽。例如,节点A负责0 - 5460号哈希槽,节点B负责5461 - 10922号哈希槽,节点C负责10923 - 16383号哈希槽。数据通过CRC16算法计算哈希值并对16384取模,决定该数据属于哪个哈希槽,进而确定存储在哪个节点上。
    • 配置文件:每个节点都有自己的配置文件,配置文件中指定节点的角色、端口等信息,并且节点之间通过 cluster meet <ip> <port> 命令进行握手,加入集群。