外链失效?90%人忽视的3大技术权重杠杆
|
凌晨告警。三点零七分,监控平台弹窗叠了十七层,DBA老周在钉钉语音里喘得像刚跑完三千米——其实他根本没醒,是手机贴着枕头震醒了人,声音还带着被子捂出来的闷:“你等等,我查下从库延迟……”话没说完,空调嗡的一声,停了三秒,又重启,冷风突然变大,吹得我手边那张十一期间手写的拓扑图翻了个面,背面是我用红笔圈的“外链缓存穿透阈值”,圈得太大,油墨晕开,糊了半行字。 我原以为是CDN回源策略崩了,结果SSH进边缘节点,curl -I 三个域名,前两个返回302,第三个直接503。不是超时,是503。我盯着那个状态码看了十八秒,手指悬在键盘上没动——这个我敢打包票:503不是服务不可用,是上游显式拒绝,连重试逻辑都懒得走。后端小杨十一点半发过一条消息:“nginx upstream config reload 失败”,我没回,因为那会儿正蹲在机房门口等UPS检修单,门禁卡刷了四次才开,卡槽里沾着点干掉的咖啡渍,是我上个月洒的,工牌正面还留着淡褐色印子,洗不掉。 90%人忽视的三件事?第一件就是 HTTP Cache-Control 的 max-age 和 stale-while-revalidate 被当成同义词混用。不是同义词。上周我翻了七十二个生产环境的响应头,四十九个把 stale-while-revalidate 写成 300,但 origin 实际压根没做 stale 处理——它根本不知道自己该“stale”多久。所以当外链失效,浏览器还在用本地缓存,CDN却早已判定过期并触发回源,结果回源撞上 upstream 的 503,整个链路就断在那儿,不报错、不重试、不告警,只默默返回空响应体。这玩意儿不写进SLA,但天天啃权重,像蟑螂吃电线,无声无息,咬断的是技术债的绝缘层。 老周后来在凌晨四点十五分发来一张截图:redis cluster 中一个分片 CPU 利用率始终卡在87.4%,不动,不高不低,像被人掐着脖子呼吸。他问是不是缓存击穿。我说不是。是上游某服务在每次心跳上报时,强行 setex 一个 key,ttl 设的是随机 12–37 秒,但它的上报频率是每五秒一次。所以 cache 层每天要处理三百七十二条告警对应的冗余写入——不是业务写入,是心跳噪音。而外链解析模块,刚好复用这个缓存实例。你说巧不巧。 第二件?DNS 解析里的 edns-client-subnet 配置和实际 CDN 地理覆盖完全脱钩。我十一那会儿在西安机房做灰度,发现杭州用户请求打到北京 POP,北京 POP 又把请求甩给广州源站,源站再跳转回深圳的 OOS 桶。路径长了三跳,TLS 握手失败率上升 18%。运维说“运营商劫持”。我查了路由,不是劫持,是 CDN 自己把 edns subnet 当摆设,geoip 库三个月没更新,深圳的 IP 段还被标在“待验证”名单里,白名单都没加。这个我说不准——可能真没人管,也可能管的人早调去搞 AIGC 平台了。隔壁工位的前端工程师换了双拖鞋,左脚蓝右脚灰,趿拉在地板上发出啪嗒啪嗒声,一直响到六点十分。 值班表下周起改双休轮岗,我排在周四。本来申请调休,理由写“十一返程高铁晚点六小时”,被驳回,系统回复:“非不可抗力”。可什么叫不可抗力?去年十一我在西安,临时接到电话说某省厅网关突发 DNS 报文截断,要求现场支援。我去之前顺手在酒店 Wi-Fi 下测了五个外链,四个正常,第五个在 chrome DevTools Network 面板里显示 status (failed)。我截图发群里,没人理。直到第二天早上九点,监控告警炸了——那条链路,正是所有下游系统里权重最高的健康检查探针。我们信它比信自己心跳还准。
文章配图,仅供参考 第三件最绝:HTTP Referer 策略和反爬 JS 注入的双重校验,现在全堆在网关层做。不是不好,是错了粒度。外链失效后,网关既要做 referer 白名单匹配,又要执行一段 inline 的 checkReferer() JS 函数来绕过部分伪造,而这段 JS 还依赖一个动态加载的 /js/anti-ref.js,它本身又托管在另一个 S3 bucket 上——bucket 权限配置漏了一行,导致 21% 的 referer 校验永远 fallback 到“放行”,等于锁了门却把钥匙焊在门框上。优胜劣汰?对。淘汰的不是坏链接,是认真配 header 的人。淘汰的是写测试用例时把 referer 场景列全的 QA。淘汰的是当年写 Nginx map 指令时反复测过 302 循环边界的那个后端——他上月离职了,走之前在交接文档里写了句:“别信 map 指令的注释,注释是两年前的,代码不是。” 手机响了一声没接。是老板。我知道他想问为什么 SLA 还没跌,但其实跌了——只是指标取的是 HTTP 2xx/3xx 比例,没算 time-to-first-byte > 5s 的请求。而这类请求,在十一后两周里,日均增长 6.3%,但告警规则还是按老逻辑写的。我懒得改。昨天下午我删掉了告警群里的三条重复通知模板,没说原因,就留了个撤回。反正也没人问。 我现在要干的事,是把 redis 里那个心跳 key 的 setex 改成 getset,加上 CAS 逻辑;顺便给 CDN 同步组提个需求,让他们今晚之前把 geoip 库版本号写进 X-Cache-Debug 响应头。别的?别的先放着。这事儿没完,但我得先去趟茶水间——咖啡机今天不出蒸汽,滋滋响半天,喷出来一串湿哒哒的棕色泡沫,黏在杯沿上,像某种失败的胶水试验。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


传媒站长破局三招:AI流量增长的隐形杠杆