Go站长聚会:全链路运维瓶颈实战突破
文章配图,仅供参考
|
老张那场Go站长聚会,我原以为又是听人吹牛,结果散场后跟开发老李蹲在楼梯间抽烟,他手机震得手都在抖——他妈的,运维报警短信炸了,全链路监控全红,可他刚在会上吹自己那套自动化脚本能扛百万QPS。
文章配图,仅供参考 空调滴水声特别响,滴在投影仪旁边的水桶里,嗒、嗒、嗒,跟监控报警的频率似的。我翻出手机看群里消息,老张在群里发了个截图:某个Go服务的心跳断了,可监控面板显示CPU占用率才3%,“这他妈比鬼还邪门”,老李把烟头碾在水泥地上,“我查过日志了,那台机器的磁盘IO突然爆了,可我们上周刚把日志级别从debug调到info啊?”我突然想起去年5月份那场聚会,老张举着白板笔(那支笔后来没水了,他换了支红的继续画架构图)说:“全链路运维的瓶颈,说白了就是优胜劣汰——谁扛不住流量,谁就该被淘汰。”当时台下有人喊:“那要是流量本身就有问题呢?”老张愣了下,说:“流量有问题,那也是你的系统不够健壮。” 可现在老李的系统,健壮得连他自己都懵。他翻出手机里的监控截图:“你看,从10:23开始,磁盘IO从100KB/s飙到100MB/s,持续了17分钟,然后服务就挂了。可这17分钟里,CPU、内存、网络都没异常,连GC次数都没涨。”我凑过去看,截图上的曲线像根突然竖起来的钢筋,“你排查过依赖服务吗?”老李说:“排查了,下游的Redis集群没问题,MySQL的慢查询也没异常,连Nginx的访问日志都正常。” 会议室的椅子少了一把,老张刚才搬了把塑料凳过来,现在凳子腿还卡在门后。投影仪对焦不准,老张画架构图时,右边的“熔断机制”四个字是虚的。他当时说:“熔断不是万能的,但没熔断是万万不能的。”现在老李的系统,熔断机制根本没触发——因为监控系统没报错,熔断条件不满足。 我想起上个月我们团队做的那个功能:用户行为埋点。PRD里写了要埋“点击搜索按钮”“输入关键词”“点击结果”三个事件,开发说:“这太简单了,我两天就能写完。”结果上线后,埋点数据全乱了——点击搜索按钮的次数比页面PV还高,输入关键词的事件里80%是空字符串。后来查代码,发现开发把埋点事件绑在了“鼠标按下”而不是“点击”上,用户只要按住鼠标不松手,就会触发多次埋点。 老李的手机又震了,这次是钉钉群消息:“@所有人 运维紧急通知:所有Go服务暂停升级,等待排查磁盘IO问题。”他骂了句脏话,说:“这他妈怎么查?磁盘IO爆的时候,系统没报错,日志没异常,连dmesg里都没错误记录。”我指了指他手机:“你查过内核参数吗?比如vm.dirty_ratio、vm.dirty_background_ratio这些?”老李愣了下:“这些参数不是默认值吗?我们从来没调过啊。” 去年5月份那场聚会,老张还提过“混沌工程”——故意往系统里注入故障,看它会不会崩溃。他说:“真正的健壮系统,不是没故障,而是故障来了能自愈。”现在老李的系统,故障来了连个响都不吭,直接挂掉,这算哪门子健壮? 外卖小哥在门口喊:“谁的黄焖鸡米饭?”老李说:“我的。”他起身去拿,汤洒了一点在桌上,他用纸巾擦了擦,说:“这功能做的时候,我觉得肯定没问题——磁盘IO怎么会突然爆?就算爆了,系统也该报错啊。结果现在,它不报错,直接挂,这他妈比报错还难查。” 我想起我们团队去年做的另一个功能:用户登录态校验。PRD里写了要校验“token有效期”“IP黑名单”“设备指纹”三个条件,开发说:“这太复杂了,我简化一下,只校验token有效期。”我说:“不行,安全要求必须全校验。”开发说:“那行,我加。”结果上线后,用户反馈登录失败率飙升——原来开发的“设备指纹”校验逻辑写错了,把用户设备的MAC地址当成了指纹,而移动端根本拿不到MAC地址。 老李拿完外卖回来,说:“我查了下内核日志,发现磁盘IO爆的那17分钟里,有大量的‘EXT4-fs warning (device sda1): ext4_mb_generate_buddy:741: group 1, block bitmap and bg descriptor inconsistent’错误。”我愣了下:“这什么意思?”老李说:“意思是文件系统的元数据坏了,可能是突然断电或者磁盘硬件故障导致的。”我说:“那为什么监控没报错?”老李说:“因为监控只查系统层的指标,不查文件系统层的。” 去年5月份那场聚会,老张最后说:“全链路运维的终极目标,是让系统像生物一样自适应——哪里受伤了,自己能愈合;哪里堵了,自己能疏通。”现在老李的系统,受伤了不会愈合,堵了也不会疏通,连疼都不喊一声,就这么默默挂掉。这算哪门子自适应? 老李把黄焖鸡米饭的盖子掀开,蒸汽糊了他一脸。他说:“我明天得找运维要那台机器的磁盘镜像,用e2fsck手动修复文件系统。”我说:“那服务怎么办?一直挂着?”老李说:“先回滚到上周的版本,等修复完再升级。”我说:“那如果修复完还是这样呢?”老李没说话,低头扒了口饭,米饭粘在嘴角上,他用手抹了抹,说:“那只能认了——优胜劣汰,我们被淘汰了。” 我突然想起,那场聚会的签到表还在我抽屉里,上面签了二十多个名字,现在能联系上的,不到五个。老张的微信头像还是那张“Go语言官方吉祥物”,可他上次在群里说话,是三个月前。全链路运维的瓶颈,说到底还是人的瓶颈——你永远不知道下一个故障会从哪里冒出来,就像你永远不知道,那支白板笔什么时候会没水。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330471号