AI工程师亲历:12个高可用架构真相
|
去年十二月份,我蹲在三号机房听告警声听出耳鸣——不是夸张,是真嗡嗡响,跟变压器过载时的基频一模一样。王磊当时蹲在机柜侧面拧螺丝,手没抖,但额角有汗珠顺着安全帽带往下爬,在下巴尖上悬了十八秒才掉进工装领口。他接了个电话,没说两句话就挂了,回头对我咧嘴:“运维说‘先看看’。”我盯着他左手无名指指甲盖上的白月牙——比上个月短了一截,估计又啃过。 高可用?我原以为是SLA曲线贴着99.99%横着走。结果那天下午三点十七分,模型服务集群里三台GPU节点同步掉心跳,监控图上裂开一道黑缝,像被刀划的。我们切了预热好的灰度副本,结果它启动时读错了一行config里的endpoint,把请求全打去测试环境S3桶里。没人动过那行配置。查Git log发现是上周四凌晨两点十七分,张薇提的PR里顺手改的——她写注释说“修yaml缩进”,结果删了行尾冒号。这个我敢打包票,我看她commit diff看了三遍,连她IDE右下角显示的Python解释器版本都记住了(3.10.12)。 优胜劣汰?对。但淘汰的从来不是模型,是人写的调度策略。比如那个自动降级熔断器,逻辑写得比论文还严谨:QPS跌穿阈值、延迟P99突增、错误率超限,三个条件满足两个就切流量。可它忘了算一件事——当上游网关因为证书续签失败开始502泛滥时,下游服务的错误率会假性飙升,而延迟P99却因请求根本没发出去反而掉到二十毫秒以下。熔断器看了数据,觉得“一切健康”,稳如泰山。我们后来手动强切,切完才发现监控后台正在跑一个凌晨四点生成的异常检测任务,进程卡在`/proc/`目录遍历里,占着87% CPU。谁配的这个定时任务?运维文档里写着“AI平台组维护”,底下签名栏空白。
文章配图,仅供参考 桌上那盒凉透的黄焖鸡还在那儿。塑料盒盖翘着边,露出半块冻硬的土豆。我伸手想掀盖,指尖碰到盒沿水汽凝的露珠,一滑,整盒推到散热格栅前。风扇呼一下卷起几粒米饭,其中一粒粘在温控探头外壳上,小得看不清。没人管。这破事重要吗?不重要。但它就在那儿,跟所有没进SOP的细节一样,真实、微小、拒绝被抽象。 说到抽象——李哲上周拿个“多活架构演进路线图”来碰我,PPT第三页写着“基于流量染色+单元化路由实现异地多活”。我指着第七行问:“跨AZ的向量缓存一致性怎么破?”他愣了三秒,掏手机翻自己写的方案初稿,手指划到一半突然停住,抬头说:“……缓存?我好像没加缓存。”我差点笑出声,但他已经低头猛戳屏幕重编译PDF,指甲盖磕在手机屏上哒哒响。雨还在下,窗外玻璃上水痕斜着淌,把对面楼LED屏的“智算云”三个字拉成流动的霓虹残影。 最绝的是那个模型热加载模块。号称“零停机更新”,实测是:新权重加载成功后,旧推理线程要等当前batch跑完才释放显存,如果batch卡在某个慢样本上(比如一段三百七十二字符的嵌套JSON),你就在那儿干等。我们抓包发现它卡在正则校验——用的`re.match(r'^[a-zA-Z0-9_]$')`去扫用户输入的query_id,而某个合作方传来的ID里混了全角空格。这个正则在Python 3.10里退化成O(n²),三百七十二字符,它算了十四秒。我敢打包票。但我们没改正则,改成把所有ID全转ASCII再strip——因为改正则要测兼容性,而strip不会崩。 王磊昨天发我一张截图,是某厂公开白皮书里写的“自愈式推理网关”。他标红了一段:“……实时检测RT异常并动态迁移至健康实例”。我就回他:“他们家的‘实时’是以分钟为单位的。”他回了个猫捂眼睛表情包。我没笑。我想到前天凌晨一点,我们自己网关爆了三次,每次告警邮件里都带着一行日志:“health_check_passed: true”,而服务早已404。查下来是健康检查只ping了gRPC端口,但实际处理请求的HTTP2子通道在另一层代理里静默死了。没人改检查逻辑。改它不如重启proxy快。这个我说不准,但我知道凌晨一点三点五分,我吃了第二块冷掉的葱油饼,饼渣掉进键盘F键和G键之间的缝里,现在按F还偶尔触发两次。 有些事儿没法写进架构评审会。比如为了压低failover时间,我们偷偷在K8s readiness probe里加了缓存——check前先查本地内存里上一次成功的时间戳,五分钟内跳过实际探活。它快,稳定,也脏。上个月审计组的人来查,我直接带他去看Prometheus里readiness_failures_total的曲线,平得像尺子量过。他点头走了。我没提那行绕过TCP connect的cache代码。这不算撒谎。这就是我们活下来的姿势。 现在我把模型权重存在对象存储里,每个版本都打content-hash。但昨天张薇说她看见一个版本的hash和上传日志对不上,问我是不是CDN缓存污染。我没回。我打开浏览器搜了下那个hash前八位,跳出来三条结果:一条是内部wiki里三年前某次压测的临时脚本输出,一条是某开源项目的issue评论,还有一条——是王磊去年五一发的朋友圈截图,里面咖啡杯底印着同样的哈希片段。我截图发给他,问他杯子哪买的。他回:“楼下打印店送的,印错了,本来要印logo。” 所以啊,别跟我谈“高可用架构真理”。真理在机柜背面胶带缠的备用网线接口上,在张薇剪指甲时掉进服务器导轨的碎屑里,在李哲PPT第十二页右下角自动插入的页码“12”上——那页讲的是容灾演练流程,可整个文档里没一个字提过,如果演练当天食堂停电,UPS带不动空调,GPU温度升到89℃后驱动自动卸载,我们该切到哪预案。 我现在每天上班第一件事,是把笔记本连上机房Wi-Fi,ping通三台etcd。然后打开外卖APP,重新下单一份黄焖鸡——不选配送费减免,就为让骑手必须进机房闸机。我要亲眼看他刷脸进门那一刻,确认门禁系统还在认人,而不是认token。至于要不要加熔断?先吃鸡。肉冷了,再补。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


站长圈绝不会明说的建站技术真相
站长圈从不公开的真相:15年录入员拆解技术黑幕
边缘AI工程师亲授:MySQL实战手册,设计运维一册通
站长评论失焦?AI工程师的理性技术视角
MySQL高可用架构:9年实战从单点到自动容灾
PHP建站避坑:90%开发者忽略的框架选型真相


