运维vs开发:相爱相杀的日常
运维和开发,就像一对相爱相杀的情侣。
一边是"帮我看看",一边是"又出bug了"。
一边是"就改一下",一边是"别乱动"。
场景一:我的服务起不来
开发:"我的服务起不来,帮我看看。"
运维:"日志呢?"
开发:"没有日志。"
运维:"那怎么知道为什么起不来?"
开发:"你看了不就知道了吗?"
运维:"我哪知道?"
开发:"你不是运维吗?"
运维:"运维不是神仙。"
开发:"那怎么办?"
运维:"检查端口、进程、配置、日志,一步步来。"
十分钟后。
运维:"端口没开,配置文件写错了。"
开发:"哦,那怎么改?"
运维:"把注释去掉,配置写对。"
开发:"好的,谢谢。"
五分钟后。
开发:"还是起不来。"
运维:"你重启了吗?"
开发:"没有。"
运维:"……"
运维:"systemctl restart 服务名。"
开发:"好的。"
五分钟后。
开发:"还是起不来。"
运维:"真的重启了吗?"
开发:"我忘了。"
运维:"……"
场景二:网站有点慢
产品:"网站有点慢,帮我看看。"
运维:"访问量是多少?"
产品:"不知道。"
运维:"查一下监控。"
运维:"访问量翻了三倍。"
产品:"能优化一下吗?"
运维:"加服务器,做负载均衡。"
产品:"要多久?"
运维:"三天。"
产品:"太慢了,今天能好吗?"
运维:"清理一下缓存,能快一点。"
产品:"好,现在就清理。"
清理后,确实快了一些。
产品:"还是有点慢,能不能再快一点?"
运维:"换更好的服务器。"
产品:"要多少钱?"
运维:"每月50000。"
产品:"太贵了。"
运维:"那就只能让用户少来访问了。"
产品:"……"
场景三:数据库连接不上
开发:"数据库连不上,帮我看看。"
运维:"检查连接池、连接数、网络。"
五分钟后。
运维:"连接池满了。"
开发:"怎么会满?"
运维:"你们代码里有连接没关闭。"
开发:"没有啊,我们都close了。"
运维:"真的?"
开发:"真的。"
运维打开代码。
运维:"这个循环里,每次都创建新连接,但异常情况没有close。"
开发:"……"
开发:"我改。"
改完,部署。
运维:"连接数降下来了。"
开发:"谢谢。"
五分钟后。
开发:"又连不上了。"
运维:"又满了?"
开发:"嗯。"
运维:"又是什么问题?"
开发:"这次不是连接的问题,是查询太慢。"
运维:"查一下慢查询。"
运维:"有一个查询,执行了30秒。"
开发:"怎么这么慢?"
运维:"没有索引。"
开发:"加个索引。"
运维:"加索引会锁表,影响很大。"
开发:"那怎么办?"
运维:"低峰期再加。"
开发:"什么时候是低峰期?"
运维:"凌晨3点。"
开发:"……"
场景四:日志太大了
运维:"磁盘快满了,你们的日志能清理一下吗?"
开发:"日志很重要,不能删。"
运维:"那加日志轮转。"
开发:"怎么加?"
运维:"logrotate,每天轮转,保留7天。"
开发:"好。"
配置日志轮转。
运维:"好了。"
开发:"谢谢。"
第二天。
运维:"磁盘又满了。"
开发:"怎么回事?"
运维:"你们的日志轮转没有生效。"
开发:"为什么?"
运维:"你们改了日志路径,logrotate配置没改。"
开发:"哦,那我改一下。"
改完。
运维:"好了。"
第三天。
运维:"磁盘又满了。"
开发:"又怎么了?"
运维:"你们改了日志级别,从INFO改成DEBUG。"
开发:"我想看详细日志。"
运维:"DEBUG日志写很多,磁盘会满。"
开发:"那怎么办?"
运维:"改回INFO,或者只改一个实例。"
开发:"好。"
改完。
运维:"好了。"
第四天。
运维:"磁盘还是满了。"
开发:"又怎么了?"
运维:"你们又加了新服务,也有日志。"
开发:"……"
开发:"那我给新服务也加日志轮转。"
运维:"记得加上去。"
场景五:发布新功能
产品:"今天要上线一个新功能。"
开发:"代码已经准备好了。"
运维:"准备好了就发布吧。"
部署到测试环境,测试通过。
部署到预发布环境,测试通过。
"可以部署到生产环境了。"
开始部署,进度条99%... 突然停住了。
等待... 等待...
五分钟后,超时。
"部署失败了。"
开发:"怎么会失败?测试环境没问题啊。"
运维:"生产环境和测试环境不一样。"
检查日志,发现数据库连接超时。
"生产环境数据库压力大,连接超时了。"
开发:"那怎么办?"
运维:"加长超时时间,或者增加连接池大小。"
修改配置,重新部署,这次成功了。
开发:"成功了!"
产品:"太好了!"
运维:"等等,监控告警了。"
开发:"什么告警?"
运维:"CPU、内存都飙升了。"
开发:"为什么?"
运维查了一下,发现新功能有一个循环,无限循环了。
"代码有bug。"
开发:"不可能,测试环境没问题啊。"
运维:"测试环境和生产环境的数据不一样,触发了不同的逻辑。"
开发:"那我修一下。"
修完,重新部署,这次没问题了。
开发:"好了。"
运维:"等等,又告警了。"
开发:"又怎么了?"
运维:"磁盘快满了。"
开发:"为什么?"
运维:"新功能的日志写太多了。"
开发:"那我减少日志。"
修完,重新部署,这次真的好了。
开发:"这次真的好了。"
运维:"等等,还有一个告警。"
开发:"还有?"
运维:"网络延迟高了。"
开发:"为什么?"
运维:"新功能调用的外部接口太慢了。"
开发:"那我加缓存。"
修完,重新部署,这次终于没问题了。
开发:"这次真的真的好了。"
运维:"希望如此。"
最后
运维和开发,谁也离不开谁。
开发写代码,运维运行代码。
开发改功能,运维部署功能。
开发解决问题,运维预防问题。
虽然有时候会吵架,有时候会互相埋怨。
但是,当问题解决后,当服务正常运行后,当用户满意后。
大家一起庆祝。
运维:"这次发布很顺利,谢谢开发。"
开发:"这次运维提前做了准备,谢谢运维。"
产品:"这次没有故障,太好了。"
运维和开发,就是这样的关系。
相爱相杀,但又互相需要。
Mr丶点心
2026-03-14






