凌晨三点的电话又响了:On-Call 排班设计与疲劳治理的 7 个工程决策
概述 凌晨三点,手机震了。你看了一眼——P1 告警,订单服务 5xx 错误率飙升。爬起来,开电脑,拉日志,查 Grafana,定位到是上游数据库连接池打满。重启、扩容、恢复,一看表四点半了。第二天早上你顶着黑眼圈开会,会上有人说"昨晚那个告警其实是误报"。 这种感觉,干过运维的人都懂。 On-Call(值班响应)是 SRE 工作中绕不开的一环。但很多团队的 On-Call 做成了"谁被叫醒谁处理",没有轮值,没有备份,没有交接,更没有疲劳管理。结果是:核心工程师离职,告警群形同虚设,故障响应越来越慢。 这篇文章聊聊 On-Call 排班设计中的 7 个工程决策。不是理论框架,是我这些年从 0 到 1 搭建 SRE 值班体系时踩过的坑、做过的取舍。在之前的事件管理与 On-Call 机制设计中讲过事件响应流程,本文聚焦在"排班本身怎么设计"——轮值周期、主备机制、告警分级、疲劳量化、交接班、新人上岗、补偿与度量。 如果你是刚接手 SRE 团队的技术负责人,或者正在被无序的值班制度折磨,这篇文章应该能帮你少走半年弯路。 一、On-Call 到底在解决什么问题 先说清楚 On-Call 是干嘛的,再说怎么设计。 On-Call 的本质是:在非工作时间,系统出问题时,有人能第一时间响应并恢复。 打个比方:医院急诊科不能晚上关门。医生白天上班,晚上也得有人值班。但值班的医生不是同一个人连值一周不睡觉——那第二天手术手抖就出医疗事故了。所以医院有轮班制度:白班、夜班、备班,轮着来,保证每个班次的医生都是清醒的。 On-Call 的逻辑一样。你的系统 7x24 小时跑着,但工程师不能 7x24 小时盯着。On-Call 排班就是让"正确的人在正确的时间收到告警",而不是"所有人都收到告警"或者"没人收到告警"。 Google SRE 的 On-Call 原则 Google SRE 在《Google 运维解密》里用三个章节讲 On-Call,核心原则就一条:琐事不能超过工作时间的 50%。 什么是"琐事"(Toil)?Google 的定义是:重复的、可自动化的、战术性的、没有持久价值的工作。比如手动重启服务、手动扩容、手动查日志定位问题——这些都是琐事。On-Call 是琐事最大的来源之一。 一个 SRE 至少要花一半时间做工程项目(写代码、做工具、改架构),否则就是在用人力填系统的坑,越填越深。要保证这个比例,团队至少需要 6-8 人轮值——人少了轮不过来,工程时间被值班吃光。 Google SRE 的 on-call 方法和工具 这篇文章里有一个很清晰的分析:Google 通过 Outalator 工具管理告警的全生命周期,包括聚合、标签、分析、交接报告,让 On-Call 不只是"被叫醒",而是"被管理"。Outalator 的核心功能包括:...