一、缓存键的构成与常见污染源
缓存键决定了边缘节点如何判断两个请求是否指向同一份内容。默认情况下,键由协议、域名、路径与全部查询参数拼成,任何一个维度多余,都会让缓存条目成倍增长。最典型的污染源是营销追踪参数,这类参数不影响响应内容,却让每一次分享链接都产生新的缓存条目。
治理手段是建立参数白名单。只把真正影响响应的参数纳入键,例如分页页码、排序方式、图片规格,其余一律忽略。若业务参数难以穷举,退而求其次可以使用黑名单剔除已知追踪参数,并对参数做排序归一,让顺序不同但内容相同的请求命中同一条目。
设备与协议维度要按需细分。若响应内容对移动端与桌面端确有差异,则设备类型进入缓存键是合理的;若只是页面样式在客户端自适应,就不该细分。某内容站点把参数白名单收敛到四个、取消设备维度细分后,边缘命中率从百分之六十七提升到百分之八十九,回源带宽下降超过一半,源站的处理器占用也随之回落到安全区间。请求头也可能进入缓存键。语言协商、压缩方式、客户端标识这些头字段若全部纳入,同样会造成碎片。压缩方式通常需要保留,因为压缩与未压缩内容确实不同,但可以归一为三类而非按原始取值细分。客户端标识几乎不该进入键,若业务确有差异化需求,应改为在源站按标识返回不同路径,让缓存维度显式化而非隐式膨胀。
二、回源收敛:合并请求与源站保护
命中率再高,未命中的部分也需要控制。缓存失效瞬间,大量并发请求同时穿透到源,是源站压力的主要来源。合并回源机制让同一缓存键的并发请求在节点侧排队,只放行一个请求到上层,其余等待结果复用。开启后,热点内容的回源请求数通常能下降一到两个数量级。
多层架构进一步收敛回源。边缘节点未命中时先访问区域父层节点,父层未命中再回源站。父层节点数量远少于边缘节点,天然起到汇聚作用。对于跨地域分发的内容,还可以按区域设置不同的父层,减少长距离回源带来的时延。
源站保护要有硬性阈值。为每个域名设置回源并发上限与每秒请求上限,超出部分返回稍旧的缓存内容而不是继续穿透。配合陈旧内容可用策略,即便源站短时不可用,边缘仍能用过期副本继续服务,等源站恢复后再异步更新。某电商在秒杀期间依靠该组合,源站峰值请求量被压在预期的百分之三十以内,用户侧没有出现明显异常,业务方也不需要为峰值单独扩容源站集群。缓存时间的设定同样影响回源量。很多团队沿用源站返回的默认时间,结果静态资源只缓存几分钟,命中率自然上不去。正确做法是按内容类型分别设定:图片与脚本可设为七天以上,接口数据按业务容忍度设为数十秒到数分钟,页面则区分是否含个性化内容。对确实需要实时的接口,直接标记为不缓存,比设置极短时间更清晰。
三、分片请求与大文件分发
大文件分发的关键在切片。若不做分片,一个数百兆的安装包在未命中时需要完整回源才能开始响应,用户等待时间很长,且中途断开会浪费全部已传输流量。分片机制把文件按固定尺寸切成若干块,边缘按需回源单块,命中的块直接返回。
切片尺寸要权衡。过小会让请求数暴涨,元数据开销与建连成本上升;过大则首块回源时间长,实际效果退化为不分片。常用取值在两兆到八兆之间,视频类内容偏小以加快起播,软件包偏大以减少请求数。配合顺序预取,在返回当前块的同时预取后续两到三块,可以让持续下载体验接近本机缓存。
断点续传要与分片对齐。客户端携带范围请求头时,节点应能直接定位对应块,而不是重新计算整文件偏移。某下载业务将切片设为四兆并开启预取后,首字节时延从八百七十毫秒降到二百三十毫秒,稳定下载速率提升约四成,源站出流量下降六成以上,带宽费用随之明显降低。分片场景下的命中率统计要单独看。按请求数统计会因为分片而失真,应改为按字节命中率衡量,才能反映真实的回源节省。此外,冷门大文件不适合长期占用节点存储,建议对访问频次低的大文件设置更短的缓存时间或单独的存储配额,把节点空间留给真正的热点内容,整体命中率反而会因此提升。
四、预热与刷新调度的时效保障
预热是发布时效的保障。新版本资源上线前,通过接口把资源清单提交预热任务,边缘节点提前拉取,用户首次访问即命中。预热要控制节奏,一次性推送数万条会造成节点集中回源,反而冲击源站。建议按优先级分批,每批间隔数十秒,并优先预热流量集中的区域。
刷新则用于内容变更。目录级刷新方便但影响面大,会让整个目录的缓存失效,随后引发回源洪峰;文件级刷新精准但需要准确的变更清单。折衷方案是发布系统自动比对产物摘要,只对真正变化的文件提交刷新,其余保持不动。
更进一步的做法是版本化路径。给静态资源路径带上内容摘要,内容变化即路径变化,天然规避刷新需求,缓存时间也可以设得很长,仅对入口页面保留较短的缓存时间与主动刷新。某应用改造后,日均刷新请求从一万二千条降到不足三百条,发布后的资源生效时延从分钟级降到秒级,同时长效缓存让整体命中率再提升四个百分点,发布流程也变得更容易预测。监控要覆盖到节点粒度。整体命中率看着正常,个别区域可能因为节点故障或配置未同步而明显偏低,用户侧的体验差异会很大。建议按区域与运营商分组统计命中率、回源时延与错误率,出现单组异常时自动告警。某次故障正是通过区域维度的命中率突降被提前发现,规避了演变成大范围访问缓慢的后果。
结语:内容分发优化的顺序应该是先理缓存键,再做回源收敛,最后调分片与刷新策略。键的问题不解决,加再多节点也只是把碎片分散得更开。把参数白名单、合并回源、分片预取与版本化路径这几件事落到位,命中率与源站压力通常会同时得到明显改善。