MST

星途 面试题库

面试题:缓存设计:Redis Sentinel与Cluster模式下复杂业务场景的优化策略

在一个涉及电商商品库存、订单缓存以及用户信息缓存的复杂业务场景中,既要保证高可用,又要兼顾读写性能和数据一致性。请详细阐述如何在Redis Sentinel与Cluster模式之间做出选择,以及针对选定模式,如何通过配置优化、数据结构设计、集群拓扑规划等手段来满足业务需求。
20.4万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

Redis Sentinel与Cluster模式选择

  1. 业务规模与数据量
    • Sentinel模式:适用于中小型电商业务场景,数据量相对较小,例如商品库存、订单缓存和用户信息缓存总量在GB级别,节点数量较少(一般建议不超过10个主节点)。因为Sentinel主要用于主从架构的高可用,在扩展性上相对Cluster模式较弱。
    • Cluster模式:适合大型电商业务,数据量较大且预计有持续增长趋势,如数据量达到TB级别甚至更高。Cluster模式能够通过将数据分布在多个节点上,实现水平扩展,满足大规模数据存储和读写需求。
  2. 读写性能需求
    • Sentinel模式:读性能方面,由于有多个从节点可以分担读请求,在合理配置下能提供不错的读性能。但写操作只能在主节点进行,若写操作频繁,主节点可能成为性能瓶颈。对于读写比例适中,写操作不太密集的业务场景较适用。
    • Cluster模式:通过数据分片,写操作可以分散到不同节点,在大规模数据读写场景下,读写性能优势明显。适合高并发读写的电商业务,如大量用户同时下单(写操作),同时又有众多用户查询商品库存和订单状态(读操作)的场景。
  3. 数据一致性要求
    • Sentinel模式:主从复制存在一定的数据同步延迟,在主从切换时可能会丢失少量数据。对于数据一致性要求不是极其严格,允许短时间内数据有一定程度不一致的业务场景,如电商的商品浏览量统计等场景较为适用。
    • Cluster模式:提供了更严格的数据一致性保证,通过配置可以选择同步写操作到多个节点,减少数据丢失风险。对于订单缓存和用户信息缓存这种对数据一致性要求较高的场景,Cluster模式更为合适。

选定Cluster模式的优化手段

  1. 配置优化
    • 节点配置:合理设置每个节点的内存限制,根据业务预估的数据量和增长趋势,为每个节点分配足够但不过量的内存,避免因内存不足导致数据丢失或性能下降。例如,对于商品库存数据量较大的节点,可以适当增加内存配置。
    • 网络配置:优化节点间的网络连接,确保节点之间的通信带宽足够,降低网络延迟。可以采用高速网络设备,如10Gbps甚至更高带宽的网卡,减少数据传输时间。
    • 持久化配置:根据业务需求选择合适的持久化策略,如RDB和AOF。对于电商业务,建议采用AOF持久化,因为它能提供更高的数据安全性,在故障恢复时可以尽可能减少数据丢失。同时,可以适当调整AOF重写频率,避免频繁重写影响性能。
  2. 数据结构设计
    • 商品库存:可以使用Hash数据结构,将商品ID作为Hash的key,库存数量、锁定数量等信息作为Hash的field - value对。这样可以方便地对单个商品的库存进行查询、更新操作,并且Hash结构在内存占用上相对紧凑。
    • 订单缓存:采用List数据结构,按照订单创建时间顺序将订单信息存储在List中。这样可以方便地实现订单的分页查询,并且List结构在追加元素时性能较高,适合订单不断生成的场景。
    • 用户信息缓存:同样使用Hash数据结构,以用户ID为key,用户的基本信息、登录状态等作为field - value对。方便对用户信息进行整体查询和部分字段更新。
  3. 集群拓扑规划
    • 节点数量与分布:根据预估的数据量和业务并发量确定节点数量。一般建议在初期规划时预留一定的扩展空间,如预估业务量需要10个节点,可先部署12 - 15个节点。节点分布要考虑物理位置,尽量避免将所有节点部署在同一机房或同一机架,以降低因机房故障等导致整个集群不可用的风险。例如,可以将节点分布在多个不同地理位置的数据中心。
    • 分片规则:采用合理的分片规则,确保数据均匀分布在各个节点上。对于电商业务,可以根据商品类别、用户ID哈希等方式进行分片。例如,将热门商品类别分布在不同节点,避免热点数据集中在少数节点上,导致这些节点负载过高。同时,在进行订单缓存分片时,可以按照订单创建时间的哈希值进行分片,使得不同时间段的订单均匀分布在各个节点。