值班轮换
在团队中公平排值班班,含 follow-the-sun、交接和补偿策略。
为什么
值班是对付它的工程师的税 — 他们睡更浅、不能喝酒、page 时硬上下文切换。把税倒在一个人或一个时区的轮换滋生倦怠和流失,且"这告警怎么处理"的机构知识集中在一个人头而非全队扩散。公平轮换(4-6 工程师、1 周班、可能时 follow-the-sun)使任一工程师值班 <25% 时间,给每人运维肌肉记忆使团队韧性,并在值班者非系统作者时暴露文档 缺口。跳过轮换的团队最终有单一"ops 人"成为 bus factor 一。
何时使用
当服务到生产需 24/7 覆盖时。团队规模变 >2 人时重平衡。
如何做
1. 按团队规模排轮换 - 24/7 SEV1 覆盖需 ≥4 工程师(1 周班 = 每人约 25% 值班负载) - <4 工程师 → 别承诺 24/7;设工作时间 SLA - 每工程师应值班 ≤1 周/4 周 2. 选班形 - 单队单时区:1 周主 + 1 周副(副处理溢出) - 多时区:follow-the-sun — 每时区处理自己白天,无夜 page - 文档化交接:"主把未决事件 + 已知问题传给下个主" 3. 补偿并保护值班工程师 - 付值班津贴或调休;明确承认这税 - 值班周无大功能截止;保护其专注 - 班后复盘:被 page >5 次?→ 告警疲劳,修告警 4. 副也轮换 - 副是升级目标;他们也须新鲜 - 别把主+副配同一功能团队(单点知识) 5. 排班可见且自动化 - PagerDuty/Opsgenie 排班,导出全队可见日历 - 别经 DM 手动换班 — 用工具换班功能使排班保持唯一真相
示例
# PagerDuty 排班 — 1 周主轮换,4 工程师
resource "pagerduty_schedule" "payments_primary" {
name = "payments-primary"
time_zone = "America/New_York"
layer {
name = "weekly-rotation"
start = "2026-01-04T00:00:00Z" # 周一
rotation_turn_length_seconds = 604800 # 1 周
users = [ # 4 工程师,周轮换
pagerduty_user.alice.id, pagerduty_user.bob.id,
pagerduty_user.carol.id, pagerduty_user.dan.id,
]
}
}
# 每工程师:值班 1 周/4 周 = 25% 负载
# 交接文档(周一 9 点):主审查未决事件,在 #payments 发:
# "从 @alice 接手。未决:INC-123(DB 故障转移进行中)。无已知问题。"
# 策略:值班周无功能截止;每班 $X 津贴常见问题
- ⚠单一"ops 人"持轮换 — 他们倦怠、成 bus factor 一,离开时团队失韧性。
- ⚠值班无补偿或调休 — 工程师怨恨无付税并悄悄停志愿,轮换崩塌。
- ⚠主和副来自同一功能团队 — 两者共享盲点和发布计划,破坏升级目的。
- ⚠经 DM 手动换班不更新 paging 系统 — 排班说 Alice 主但 Bob 换了;SEV1 page 度假的 Alice。
最佳实践
- ✓24/7 覆盖要求 ≥4 工程师使无人值班 >25% 时间;低于此设工作时间 SLA 而非假装 24/7。
- ✓明确补偿值班(津贴或调休)并保护值班周无功能截止 — 税是真的而倦怠很贵。
- ✓独立轮换主和副且绝不配同一功能团队 — 升级须到不同知识库。
- ✓排班做成全队可见日历,换班经 paging 工具使排班永远唯一真相。