网关扩容失效?90%存储浪费藏这3个盲区
|
去年双十一,我们网关扩容完那会儿,机房空调坏了,冷凝水滴在机柜顶上,嗒、嗒、嗒——像在倒计时。运维老周蹲在U32槽位前拧螺丝,汗顺着安全帽带子往下淌,没擦,就那么挂着。我盯着监控大屏,TPS冲到四万八,CPU稳在63%,内存……等等,这堆内存曲线怎么长得跟山楂片似的?一高一低,还带回勾。 我原以为是Redis连接池抖动,结果抓包发现上游服务压根没发过来请求——它连重试逻辑都懒得走,直接504甩给前端。可日志里清清楚楚写着“已转发”,查链路追踪,TraceID断在网关入口后十八秒。那个时间点,我正往嘴里塞最后一口凉透的韭菜盒子,外卖盒底还沾着两粒芝麻。我咽下去才反应过来:这压根不是转发失败,是压根没进路由表。 第一个盲区——你扩的是Pod数,但网关的路由热加载用的是本地map,每扩一个实例,它自己reload一次全量规则。三千条路由,reload耗时二百一十七毫秒,三十二个Pod轮着reload,就等于有近七秒的窗口期,所有新进来的请求全部命中default fallback,存进MongoDB里的那个叫“unmatched_request”的collection。你说巧不巧,运营上周刚催过数据埋点要支持“未匹配路径归因”,结果这个collection现在占了集群存储的百分之八十九。不是日志太多,是垃圾路由缓存写得太欢。 第二个盲区更绝。配置中心推变更,我们用etcd做watch,但监听路径写的是 /gateway/rules/,而真正生效的是 /gateway/rules/v2/ ——就差个版本号。半年前切v2的时候没人改客户端代码,只改了部署yaml里的ENV。所以每次配置更新,etcd返回空响应,网关就继续用上一次成功的缓存。缓存不老化,不超时,不校验MD5。我翻commit记录,找到那天下午三点零七分,小李在GitLab里提交了一行注释:“先灰度v2,旧路径留着兼容”。他按了回车,顺手把桌上半罐红牛推远了点。没人删那行兼容逻辑。 第三个……算了,先说个别的。前两天碰见被兼容性折磨了6年前端的老杨,在茶水间煮挂耳。他边倒水边说:“我们组现在用webpack5做构建,但得同时输出ES5和ES2019双包,因为财务那边报销系统还在IE11里跑着。”我点头,然后听见他手机响了,来电显示“财务-王姐”,他接起来就讲“王姐您稍等,我这就把polyfill再加一层try-catch”……我突然想起上周五,我们网关里有个filter叫“legacy-json-sanitize”,它干啥的?把所有request body里的\\u2028\\u2029替换成\\\ 回到第三个盲区:熔断降级开关本身是个服务,它要读配置、写状态、上报指标——而这三个动作全走同一个MySQL分库。扩容网关时,我们加了二十个API实例,但忘了那套熔断配置同步服务只有一主一从。某次主库抖动四十秒,所有新扩容节点集体认为“下游全挂了”,于是把自己所有出站请求直接打到fallback cache——那个cache其实是用本地Caffeine做的,没配size limit,键是“service-name+timestamp”,时间戳精确到毫秒。三个月下来,光这个cache的堆外内存泄露,就让六台网关节点陆续OOM了三次。重启完继续漏。最后一次,DBA老张进来查慢日志,抬头看了我一眼,说:“你们这个‘熔断开关’,开得比保险丝还勤。”我没接话,盯着他工牌绳上挂着的那个小铁皮青蛙——捏一下会跳,但弹簧早松了。 我敢打包票,那个fallback cache的key生成函数里,有一行Date.now() + Math.random()拼出来的伪唯一ID。我去年十月就提过PR要把Math.random()换掉,被合并进develop分支后,第二天上线又回滚了,因为测试环境发现某个渠道商的签名验签时间戳对不上——他们用的是系统时钟,而我们用了那个乱序ID当时间基点。这事我没再提第二次。技术债这东西,就像机房里那台嗡嗡响的UPS,你知道它有问题,但只要没彻底哑火,谁也不愿拆了重装。
文章配图,仅供参考 所以扩容失效?不是扩得不够快,是扩得全在假路径上跑。90%存储浪费不是因为数据多,是因为没人定期删那几个以“_archive”、“_staging”、“_legacy_v1_fallback”结尾的collection。上周我把mongodump脚本改成自动清理七天前的这些库,跑了半小时,释放空间三百七十二GB。但没人review我这个变更——因为它没进CI pipeline,我直接ssh进去执行的。现在我坐在自己工位上,耳机里放着ASMR雨声白噪音,窗外真在下雨,雨刮器在玻璃上左右横扫,节奏特别准。我准备下班前,再顺手看看etcd里 /gateway/rules/ 下面有没有新写的v3目录。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


如何避免Web应用程序安全测试中的API盲区?
解决汽车视觉盲区 瑞芯微RK3588M车载360°全景环视公布