面试题答案
一键面试不同点分析
- 影响范围
- 单机Redis:rehash只在单机实例内进行,影响范围局限于该单机,对其他系统组件无直接影响。
- Redis Cluster:由于是分布式系统,rehash涉及多个节点,可能影响整个集群的稳定性,一个节点的rehash可能导致数据迁移,影响其他节点的数据分布和负载。
- 数据一致性
- 单机Redis:单机环境下,数据一致性较易维护,rehash过程不涉及多节点间数据同步问题。
- Redis Cluster:在rehash数据迁移过程中,可能出现短暂的数据不一致情况,尤其是在部分数据已迁移,而客户端还在从原节点读取数据时。
- 负载均衡
- 单机Redis:不存在节点间负载均衡问题,rehash主要影响单机的CPU和内存使用。
- Redis Cluster:rehash可能打破原有的负载均衡状态,新的节点数据分布可能导致部分节点负载过高,影响系统整体性能。
应对策略
- 平滑rehash
- 在Redis Cluster中启用平滑rehash功能,使数据迁移过程更渐进,避免大量数据在短时间内迁移,减少对系统性能的冲击。
- 负载监控与动态调整
- 部署监控系统实时监测每个节点的负载情况,如CPU使用率、内存占用、网络流量等。
- 根据监控数据,当发现某个节点负载过高时,手动或通过自动化脚本调整数据分布,如使用
CLUSTER MOVED
命令将部分槽迁移到负载较低的节点。
- 数据一致性保障
- 采用读写分离策略,在rehash期间,读请求优先从旧节点读取数据,写请求则同时更新新旧节点,待数据迁移完成后,再将读请求切换到新节点,确保数据一致性。
- 利用Redis Cluster的异步复制机制,在数据迁移后尽快使副本节点同步数据,减少数据不一致窗口。
- 故障容错处理
- 在rehash前对节点进行健康检查,确保参与rehash的节点处于良好运行状态。
- 为每个节点设置多个副本,当某个节点在rehash过程中出现故障时,副本节点能迅速接管,保障系统可用性。
- 流量控制
- 在客户端或负载均衡器处设置流量控制机制,限制并发请求数量,避免在rehash期间系统因请求过多而崩溃。
- 对关键业务请求设置优先级,优先处理重要业务,保障核心功能的稳定运行。