"叮"——深夜的催命铃声
凌晨两点十七分,钉钉告警响了。Redis 内存使用率 98%。
我爬起来开电脑,不是因为敬业,是因为害怕——上次数据库宕机78分钟的阴影还在。
一个人在深夜修bug的恐惧
没有后援
大厂开发出了线上故障,可以拉群、at人、升级到值班运维。我一个人——没有人可以叫醒,没有人可以分担。修好了是应该的,修不好明天用户全跑了。
没有回滚
很多时候,故障的原因是我白天上线的新代码。如果是大厂,一键回滚,三分钟恢复。我只有一台服务器,docker-compose down 再 up 就是我的回滚。
没有监控体系
Grafana 和 Prometheus 是我自己搭的,告警规则也是我写的。但问题是——如果监控系统本身挂了,谁来告诉我?
那晚的 Redis 故障
redis-cli INFO memory
# used_memory_human:3.82G
# maxmemory_human:4G
原来是一个平台的搜索缓存没设过期时间。三个月的数据堆着。修复很简单:
redis-cli KEYS "search:cache:*" | xargs redis-cli DEL
释放了 2G 内存。修这种 bug,快。但从被叫醒到重新入睡,花了两个小时。
独立开发者的深夜生存法则
- 告警分级:不是所有告警都需要半夜叫我。我把告警分成了 P0(宕机)、P1(降级)、P2(明天再说)
- 自动化修复:能自动恢复的不要人工。Redis OOM 自动清理过期 key,数据库连接池自动重启
- 有限止损:如果半夜三点修不好,不要死磕。先切到维护模式,睡一觉再修
- 心理建设:接受一个事实——你不是24小时待命的 SRE,你是一个人。有些坑明天再填,天不会塌
写在最后
那个凌晨,修完 bug 之后我没回去睡。我坐在阳台上看着天亮,想起以前在大厂加班,至少有同事一起叫外卖。
但现在,天空亮起来的时候,我觉得自己像个真正的守夜人——一个人守着一座城,没有人鼓掌,但城还在运转。
这种感觉,值了。