1.
缓存策略总体设计
- 明确缓存目标:减少DB读请求、降低渲染延迟、保护后端并发;
- 分类缓存对象:静态资源(视频封面、海报)、半静态数据(影片元数据、排片表)、实时数据(在线人数、排队状态);
- 确定失效策略:静态长期缓存+CDN,半静态使用TTL+主动更新,实时数据短TTL或不缓存并用订阅机制。
2.
Redis实现与键设计步骤
- 步骤1:部署Redis集群(主从+哨兵或Cluster),配置 maxmemory-policy 为 volatile-lru;
- 步骤2:键名规范:prefix:entity:id:field 例如 movie:123:metadata,便于分区与查找;
- 步骤3:缓存填充与预热:发布前批量写入热点电影元数据和海报索引;
- 步骤4:缓存失效策略实现:更新电影信息时先写DB再del对应Redis,或使用版本号+乐观并发。
3.
前端与CDN协同优化
- 前端实现:合理设置Cache-Control、ETag;对封面使用 immutable,max-age=31536000;
- CDN配置:边缘缓存规则按路径划分,视频流使用分段缓存(HLS/HTTP Range);
- 缓存刷新策略:基于版本号的URL强制刷新,或通过CDN API在发布时主动清理特定路径。
4.
数据库与后端性能调优
- 索引优化:分析慢查询,添加覆盖索引,避免SELECT *;
- 读写分离:业务允许下使用只读副本承载大量查询,请求按类型路由;
- 连接池与限流:设置DB连接池上限,应用端使用令牌桶限制并发写入,防止雪崩。
5.
监控指标与告警实践
- 指标采集:接入Prometheus采集应用吞吐(TPS)、延迟(P95,P99)、错误率、Redis命中率、DB慢查询数;
- 仪表盘:Grafana按服务/房间分面板展示CPU、内存、网络、QPS、热键分布;
- 告警规则:分级设置(P0-P2),示例P0:整机房平均延迟>1s且错误率>5%持续5min;阈值、持续时间、抑制策略明确。
6.
告警响应与演练(Runbook)
- 编写Runbook:按告警类型列出检查步骤(确认范围→查看日志→回滚/切换流量→发起通讯);
- 自动化脚本:常见操作(切换到只读、回滚配置、CDN回源)封装为一键脚本并加入权限控制;
- 演练频率:每季度演练一次故障场景(Redis失效、DB主机故障、CDN大面积回源),记录RTO/RPO并改进。
7.
问:缓存更新延迟会导致用户看到过期数据,如何避免?
- 答:采用先写DB后删除缓存的“删除模式”或“写入双写+版本号”策略;对关键数据使用短TTL并做主动预热;关键页面可用Stale-while-revalidate模式:先返回过期缓存并在后台刷新。
8.
问:监控告警如何避免告警风暴?
- 答:使用告警抑制与分组:对同一根因只触发一个主告警,设置静默期与抑制规则;并在Grafana/Alertmanager中加入告警抑制、抖动与恢复条件,且按服务影响面分级推送到对应值班组。
9.
问:高峰期如何水平扩缩容保证体验?
- 答:预估峰值并提前启动实例;使用自动扩缩容策略(基于CPU、请求延迟或队列长度),并结合流量分片和灰度发布;同时保证状态迷你化(无状态服务或把会话放到Redis),快捷切换节点。
来源:运营优化韩国电影游戏机房解析 从缓存策略到监控告警实践