架构

Alauda Cache Service E1 提供两种不同的部署架构,分别用于满足特定的性能、可扩展性和高可用性要求。

  • 哨兵模式:由一个主 Redis 实例和可配置的从节点组成的高可用配置。从节点异步接收更新并可处理读取请求,但读取结果可能包含过时数据。Redis Sentinel 监控实例运行状况,并在必要时协调自动故障转移。

  • 集群模式:通过在多个 Redis 节点之间对数据进行分片来实现水平扩展的分布式架构。此配置可提供更高的读写吞吐量、自动故障转移能力以及智能数据分区,从而在大规模环境中实现最佳性能和可用性。

哨兵模式

哨兵模式基于 Redis 原生的主从复制实现高可用解决方案。Redis Sentinel 监控 Redis 节点,并在主节点发生故障且满足所需的法定人数和多数授权条件时,将从节点提升为主节点。主要特征包括:

  • 运维简单:与分布式集群解决方案相比,该架构更易于实施和管理。
  • 自动故障转移:Sentinel 检测主节点故障,并协调从节点提升为主节点。
  • 垂直扩展:虽然支持垂直资源扩展,但该架构的水平扩展能力有限,因为所有写操作都必须定向到主节点。
  • Sentinel 弹性:为实现完整的高可用性,必须部署多个 Sentinel 实例,以避免 Sentinel 自身成为单点故障。

包含三个 Sentinel、一个主节点、两个从节点以及独立客户端、监控和复制路径的哨兵架构

客户端使用 Sentinel 查找当前主节点,并直接连接 Redis 执行数据操作。事件订阅可帮助客户端响应拓扑变化。图中显示的是节点数量示例;从节点读取是可选的,且读取结果可能包含过时数据。有关发现和重新连接行为,请参阅 Sentinel 客户端规范。

集群模式

集群模式将键分布到 16,384 个哈希槽中。每个主节点拥有其中一部分槽,并将其数据复制到同一分片内的从节点。支持集群的客户端会将命令路由到负责该键所在槽的主节点。Redis Cluster 使用基于哈希槽的分片,而不是一致性哈希;请参阅 Redis Cluster 规范。主要特征包括:

  • 高可用性:该架构实现了自动节点故障检测和恢复机制,确保数据服务持续可访问。
  • 动态扩展:支持在运行时添加或移除节点,并自动重新平衡数据,以适应不断变化的工作负载需求。
  • 客户端路由:支持集群的客户端使用槽到节点的映射,并在拓扑发生变化时处理 MOVED 和 ASK 重定向。工作负载的均衡情况取决于键的分布和访问模式。
  • 数据分布:将数据集分区到多个节点,避免单节点内存限制,并支持大幅增大的总数据集。
  • 运维复杂性:需要了解哈希槽分配、数据迁移策略以及集群拓扑管理。

包含三个覆盖 0 至 16383 槽的主节点以及每个主节点两个从节点的 Redis Cluster 架构

该图展示了三个示例分片,每个主节点配有两个从节点。槽范围覆盖完整键空间且互不重叠。图中省略了节点之间的集群总线连接,以便清晰展示客户端路由以及主节点与从节点之间的数据复制。

架构选择指南

要求哨兵模式集群模式
突破单节点内存限制的水平扩展❌✅
简化部署和管理✅❌
支持大型数据集(>8GB)❌✅
支持自动故障转移的高可用性✅✅
针对使用从节点读取的读密集型工作负载进行优化✅✅
支持跨多个键的事务操作✅❌*

* 当键属于不同的哈希槽时,Redis Cluster 对多键操作存在限制