运维vs开发:相爱相杀的日常

运维和开发,就像一对相爱相杀的情侣。

一边是"帮我看看",一边是"又出bug了"。

一边是"就改一下",一边是"别乱动"。


场景一:我的服务起不来

开发:"我的服务起不来,帮我看看。"

运维:"日志呢?"

开发:"没有日志。"

运维:"那怎么知道为什么起不来?"

开发:"你看了不就知道了吗?"

运维:"我哪知道?"

开发:"你不是运维吗?"

运维:"运维不是神仙。"

开发:"那怎么办?"

运维:"检查端口、进程、配置、日志,一步步来。"

十分钟后。

运维:"端口没开,配置文件写错了。"

开发:"哦,那怎么改?"

运维:"把注释去掉,配置写对。"

开发:"好的,谢谢。"

五分钟后。

开发:"还是起不来。"

运维:"你重启了吗?"

开发:"没有。"

运维:"……"

运维:"systemctl restart 服务名。"

开发:"好的。"

五分钟后。

开发:"还是起不来。"

运维:"真的重启了吗?"

开发:"我忘了。"

运维:"……"


场景二:网站有点慢

产品:"网站有点慢,帮我看看。"

运维:"访问量是多少?"

产品:"不知道。"

运维:"查一下监控。"

运维:"访问量翻了三倍。"

产品:"能优化一下吗?"

运维:"加服务器,做负载均衡。"

产品:"要多久?"

运维:"三天。"

产品:"太慢了,今天能好吗?"

运维:"清理一下缓存,能快一点。"

产品:"好,现在就清理。"

清理后,确实快了一些。

产品:"还是有点慢,能不能再快一点?"

运维:"换更好的服务器。"

产品:"要多少钱?"

运维:"每月50000。"

产品:"太贵了。"

运维:"那就只能让用户少来访问了。"

产品:"……"


场景三:数据库连接不上

开发:"数据库连不上,帮我看看。"

运维:"检查连接池、连接数、网络。"

五分钟后。

运维:"连接池满了。"

开发:"怎么会满?"

运维:"你们代码里有连接没关闭。"

开发:"没有啊,我们都close了。"

运维:"真的?"

开发:"真的。"

运维打开代码。

运维:"这个循环里,每次都创建新连接,但异常情况没有close。"

开发:"……"

开发:"我改。"

改完,部署。

运维:"连接数降下来了。"

开发:"谢谢。"

五分钟后。

开发:"又连不上了。"

运维:"又满了?"

开发:"嗯。"

运维:"又是什么问题?"

开发:"这次不是连接的问题,是查询太慢。"

运维:"查一下慢查询。"

运维:"有一个查询,执行了30秒。"

开发:"怎么这么慢?"

运维:"没有索引。"

开发:"加个索引。"

运维:"加索引会锁表,影响很大。"

开发:"那怎么办?"

运维:"低峰期再加。"

开发:"什么时候是低峰期?"

运维:"凌晨3点。"

开发:"……"


场景四:日志太大了

运维:"磁盘快满了,你们的日志能清理一下吗?"

开发:"日志很重要,不能删。"

运维:"那加日志轮转。"

开发:"怎么加?"

运维:"logrotate,每天轮转,保留7天。"

开发:"好。"

配置日志轮转。

运维:"好了。"

开发:"谢谢。"

第二天。

运维:"磁盘又满了。"

开发:"怎么回事?"

运维:"你们的日志轮转没有生效。"

开发:"为什么?"

运维:"你们改了日志路径,logrotate配置没改。"

开发:"哦,那我改一下。"

改完。

运维:"好了。"

第三天。

运维:"磁盘又满了。"

开发:"又怎么了?"

运维:"你们改了日志级别,从INFO改成DEBUG。"

开发:"我想看详细日志。"

运维:"DEBUG日志写很多,磁盘会满。"

开发:"那怎么办?"

运维:"改回INFO,或者只改一个实例。"

开发:"好。"

改完。

运维:"好了。"

第四天。

运维:"磁盘还是满了。"

开发:"又怎么了?"

运维:"你们又加了新服务,也有日志。"

开发:"……"

开发:"那我给新服务也加日志轮转。"

运维:"记得加上去。"


场景五:发布新功能

产品:"今天要上线一个新功能。"

开发:"代码已经准备好了。"

运维:"准备好了就发布吧。"

部署到测试环境,测试通过。

部署到预发布环境,测试通过。

"可以部署到生产环境了。"

开始部署,进度条99%... 突然停住了。

等待... 等待...

五分钟后,超时。

"部署失败了。"

开发:"怎么会失败?测试环境没问题啊。"

运维:"生产环境和测试环境不一样。"

检查日志,发现数据库连接超时。

"生产环境数据库压力大,连接超时了。"

开发:"那怎么办?"

运维:"加长超时时间,或者增加连接池大小。"

修改配置,重新部署,这次成功了。

开发:"成功了!"

产品:"太好了!"

运维:"等等,监控告警了。"

开发:"什么告警?"

运维:"CPU、内存都飙升了。"

开发:"为什么?"

运维查了一下,发现新功能有一个循环,无限循环了。

"代码有bug。"

开发:"不可能,测试环境没问题啊。"

运维:"测试环境和生产环境的数据不一样,触发了不同的逻辑。"

开发:"那我修一下。"

修完,重新部署,这次没问题了。

开发:"好了。"

运维:"等等,又告警了。"

开发:"又怎么了?"

运维:"磁盘快满了。"

开发:"为什么?"

运维:"新功能的日志写太多了。"

开发:"那我减少日志。"

修完,重新部署,这次真的好了。

开发:"这次真的好了。"

运维:"等等,还有一个告警。"

开发:"还有?"

运维:"网络延迟高了。"

开发:"为什么?"

运维:"新功能调用的外部接口太慢了。"

开发:"那我加缓存。"

修完,重新部署,这次终于没问题了。

开发:"这次真的真的好了。"

运维:"希望如此。"


最后

运维和开发,谁也离不开谁。

开发写代码,运维运行代码。

开发改功能,运维部署功能。

开发解决问题,运维预防问题。

虽然有时候会吵架,有时候会互相埋怨。

但是,当问题解决后,当服务正常运行后,当用户满意后。

大家一起庆祝。

运维:"这次发布很顺利,谢谢开发。"

开发:"这次运维提前做了准备,谢谢运维。"

产品:"这次没有故障,太好了。"

运维和开发,就是这样的关系。

相爱相杀,但又互相需要。


Mr丶点心

2026-03-14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注