凌晨10点,秒杀商品缓存统一设置为30秒。流量放大后,数万请求同时发现键不存在,CDN命中率从98%跌到20%,回源线程挤向数据库,重试又复制失效。失控根因不是“有没有缓存”,而是缓存键、过期时间与回源并发没有闭环。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:okkproxy(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
一、穿透、击穿与雪崩:看请求落在哪类键上
缓存穿透指请求持续访问不存在的键,如脚本遍历商品ID。负缓存缺失时,流量直达源站。其特征是键基数高、参数离散、缓存与源站流量同步上升,而非热键瞬间过期。
缓存击穿发生在少量热点键同时失效或被淘汰时,大量请求争抢同一键回源。键基数不大、访问集中、单键并发陡增,源站收到相同查询;删热点键、预热失误、节点淘汰都可能触发。

缓存雪崩是失效扩散到大批键,或缓存层整体不可用:共享TTL、批量更新、连接故障会让请求同时转向源站。击穿聚焦热键,雪崩覆盖失效面,穿透聚焦不存在的键;三者也可叠加,如假键洪流恰逢热点过期。
二、从请求轨迹判断根因,组合四道闸门
判断时对齐CDN命中率、键基数、单键QPS、回源并发、源站延迟和错误率,再抽查缓存策略与版本。命中率骤降而键基数稳定,查击穿;键基数与回源量齐升,查穿透或批量失效;缓存异常伴大面积未命中,查雪崩。
先做缓存键规范化:统一协议、主机、路径、参数排序、编码、租户命名空间和资源版本,避免重复键,也不能抹掉个性化维度。确认热点后,用热点键锁定合并同键回源,首请求加载,其余复用;锁按完整键建立,并设超时、失败释放和队列上限。

陈旧内容回源用于降级:热点键过期后先返回宽限期旧内容,再由单个后台任务刷新;强一致或鉴权敏感数据慎用旧值。再用源站并发保护限制接口、租户和全局回源量,超额请求排队或降级。TTL抖动给共享的30秒TTL加入随机窗口,将失效分散到不同时间桶,但不能替代限流。
规则可在 ServLlama 中编排键规则、热点阈值、宽限期和并发额度。常见坑是“未命中就重试三次”:重试放大并发,不同查询串还会绕过合并。治理顺序是规范键、识别热点、开启合并与陈旧响应、设置源站配额,最后用TTL抖动分散失效;单点措施会把故障推向下一层。
回源链路要有“单飞”与降级边界
缓存键规范化不是简单拼接 URL,而要统一大小写、路径尾斜杠、默认端口、参数排序和编码规则。否则同一资源会被拆成多个缓存键,回源量可能随查询参数成倍增加。版本号、地域和用户权限等会改变响应体的字段,也应明确区分,避免把个性化内容误放入公共缓存。
热点键失效时,多个请求可能同时访问数据库、对象存储和下游服务。热点键锁定应以待刷新资源为粒度,让后续请求等待并复用首个回源结果,而不是各自重试。锁必须设置超时、续租和失败后的短退避,防止持锁进程异常导致请求长期悬挂。
如果业务允许短暂旧数据,可启用陈旧内容回源:先返回宽限期内仍可用的旧对象,再由后台单飞刷新。旧对象必须带有清晰的过期标记和刷新状态,不能把过期响应无限期当作正常结果。源站并发保护则要同时设置全局上限和单资源上限,过载时快速返回旧内容或可控错误,阻断回源流量向数据库和下游服务传导。

用 TTL 抖动配合发布流程
TTL抖动的作用是打散同一批资源的失效时间,避免缓存同时过期。可先确定基础 TTL,再叠加受控随机区间,并设置最大值;预热、刷新和回源响应应遵循同一套时间规则。对明确不可缓存的请求要设置绕过标记,否则请求指纹或查询参数变化会让抖动策略失效。
发布新版本时,先确认旧键与新键的映射关系,再逐步放量。常见坑包括:只更新缓存节点却遗留旧版本键、把用户相关响应放进共享缓存、刷新接口缺乏幂等性、锁等待时间超过网关超时,以及监控只看命中率,不看回源并发、源站延迟和错误率。命中率很高但源站压力持续上升,往往说明失效策略正在制造隐形流量。
上线前可按这份清单执行:核对缓存键规范和参数归一化规则;验证热点键锁定是否做到单飞、超时可控;确认陈旧内容回源有宽限期和状态标记;压测源站并发保护、熔断及降级返回;检查 TTL 抖动范围、缓存最大存活时间和预热顺序;用相同请求并发验证刷新幂等性;最后同时观察命中率、回源 QPS、锁等待、源站连接数、P95 延迟与错误率,并准备一键关闭刷新或切回旧版本的回滚方案。


喜欢
顶
难过
囧
围观
无聊





