2022年是疫情防控最复杂的一年,多地健康码系统在全员核酸期间承受着平时数十倍的流量压力。旭日神州作为技术支持方,参与了华北某省会城市健康码系统的应急保障工作。
一、挑战:瞬时洪峰流量
全员核酸检测期间,市民在采样前后会集中查询健康码状态,系统并发量从日常的几千QPS瞬间飙升到十几万。典型特征是:
- 流量高度集中在早7-9点、晚5-7点两个时段
- 单用户请求频率高,反复刷新页面
- 下游对接核酸检测系统、身份认证系统、疫苗接种系统,任一环节抖动都会传导到健康码
二、技术保障方案
1. 多级缓存架构
健康码状态不是每次都需要实时计算。我们在Redis集群中构建了三级缓存:用户健康码结果缓存(有效期5分钟)、用户基础信息缓存、区域码规则缓存。当核酸结果未更新时,直接从缓存返回结果,数据库查询量降低90%以上。
2. 降级开关体系
系统预设了完整的降级预案:当压力超过阈值时,自动关闭非核心功能(如出行记录展示、核酸地图),只保留最核心的"绿码/红码"状态返回。极端情况下甚至启用静态页兜底——即使后端完全不可用,也能返回静态提示页面,避免浏览器白屏。
3. 读写分离与弹性扩容
数据库采用一主多从架构,查询流量全部走从库。K8s集群配置HPA自动扩缩容,当CPU利用率超过70%时自动扩容Pod,5分钟内可从20个实例扩容到200个实例。
三、应急响应机制
保障期间我们建立了"7×24小时三人值班制":
- 一线监控岗:盯着监控大屏,发现异常立即告警
- 二线处置岗:收到告警后5分钟内定位问题,执行降级或扩容操作
- 三线决策岗:负责对外沟通、协调资源、重大变更审批
某次凌晨2点接到告警,核酸检测系统推送接口延迟从200ms上升到3秒,我们在10分钟内切换到备用通道,整个过程用户无感知。
四、经验总结
这次保障任务给我们的最大启示是:高并发系统的稳定性不是靠架构多么先进,而是靠预案是否充分。我们在项目开始前写了12份应急演练脚本,每一份都经过至少两次实战演练。真正故障发生时,团队不需要思考,按预案执行即可。
此外,与上下游系统的SLA约定至关重要。我们与核酸检测系统、身份认证系统都约定了超时熔断机制,任何一方出问题不会拖垮整个链路。