产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

构建强大的项目 on-call 文化

  • 2018-10-19
  • 本文字数:3263 字

    阅读完需:约 11 分钟

在运营和管理中,on-call 的团队通常负责确保服务和应用程序的可靠性和可用性。如果没有建立一个高效的 on-call 团队,将对业务造成明显的不良影响。一个不健康的 on-call 团队文化会在一个管理组织中产生压力和挫折感。本文中将描述 Button 团队 on-call 管理的最佳实践。

当我第一次加入 Button 的 on-call 团队时,我非常担心被排班。如果我在我值班时睡过去了怎么办? 那服务怎么办? 我应该盯着哪个仪表盘看呢? 从那以后,我几乎一年的时间都在轮班,值班了无数次。虽然我不能说我喜欢做 on-call 的工作,但我可以证明,作为 on-call 轮班的一员肯定是我在 Button 工作的一个亮点——在很大程度上是由于我们 on-call 团队的支持和文化

什么是 on-call,其文化为什么重要?

在运营和管理中,on-call 的团队通常负责确保服务和应用程序的可靠性和可用性。如果没有建立一个高效的 on-call 团队,将对业务造成明显的后果——直接收入损失和声誉损害。一个不健康的 on-call 团队文化会在一个管理组织中产生压力和挫折感。工程与软件的维护和构建同样重要。如果你一直需要为生产开发中断而担心,那么构建可扩展性的软件是很困难的!

如果处理不当,凌晨 2 点的宕机可能对公司造成损害,也可能让起床处理相关问题的个人感到沮厌烦和不爽。对于一种健康的 on-call 文化来说,关注这两点问题都很重要。在本文中,我将描述 Button 团队 on-call 管理的最佳实践。

Button 公司的 on-call

Button 的 on-call 贴纸,由 Cori Huang 设计

在 Button,构建服务的产品工程师还负责保证所有关键服务的 24/7 正常运行时间。为了做到这一点,我们保持每周的 on-call 循环,从周五中午开始,我们会进行一个物理 WiFi 热点切换。同时确保总有两个人能随叫随到——一个是主负责人,一个是后备人员。如果主服务器在接收到由于停机而触发的初始页面请求没有响应或不可用时,该页面请求就会被转到备服务器。还会给工程 on-call 团队配一个业务团队对应人员,负责处理合作伙伴业务的升级和外部通信中断问题。

最后同样重要的是,处于随时待命状态是自愿的。并不是所有的产品工程师都需要参与 on-call,他们也可以随时加入或离开。因为 on-call 是一种独特的责任,而且往往需要作出特别的牺牲,作为回报,Button 每月会给 on-call 团队的每一个成员适当的奖金奖励。

促使我们 on-call 团队成功的因素是什么?

以下是我们团队 on-call 文化的一些核心理念:

  • 做好入职流程
  • 设定正确的目标
  • 确定一个关键负责人
  • 无保留的检视问题
  • 我们的告警理念
  • 鼓励自我照顾

做好入职流程

从一开始就要为目标的达成做准备。我们不只是在 on-call 的轮换过程中增加人员,并期望他们能做好。我们的入职流程如下:

  1. 跟随一个当前 on-call 的工程师学习。
  2. 在一周的工作时间内成为主要负责人员,并在实际工作中逐步提升。
  3. 自己处理升级——我们会为新工程师模拟升级以便发现问题并解决问题。
  4. 加入 on-call 的排班序列中。

设定正确的目标

负责升级并不一定意味着你最终要解决每个问题并找到它们背后的根本原因,也不意味着你需要拥有这样做的专业知识。

下面引用我们升级手册中的一段话:

把它想象成一个医院:急诊室的医生在那里对病人进行前期处理和病情分类,然后把病人送到更专业的护理人员那里。

当我们真的需要处理现场问题时,我们并不需要解决所有问题——我们需要评估问题,确定对业务的影响是什么,通过我们的状态页面进行外部沟通,并尽可能地减少损失。通常情况下,需要执行后续任务以确保升级问题完全解决,而不会让它成为重复发生的事故。我们非常信任我们的工程师能够做出最好的判断,在升级过程中不断做出正确的判断需要经验和实践。

确定一个关键负责人

有时高压升级可能是混乱的。可能有很多人参与其中,或者有很多系统在起作用,因此跟踪升级中的变化以及谁在做什么变得非常重要。我们遵循的理念是,在任何时候都由一个关键人物来负责升级响应。

我们的手册是这样描述的:

在升级过程中,该人对所有决策负责,包括生产变更,以及决定与其他方进行沟通的时间和内容。如果你不是关键人物,你就不应该做这些事情,除非关键人物明确要求并指示你去帮助他。

在升级过程中,关键人员可以更改 ; 只要它是明确的 (例如,“生产问题已经解决,Barry 将接过任务作为新的关键负责人。”)

无保留地检视问题

我们努力从自己的错误中吸取教训,其中很大一部分是一种不要进行指责的事后自检文化。

不进行指责的事后分析让我们能够诚实而大胆地谈论我们本可以做得更好的事情,并反思我们所学到的东西。这些是工程师们提倡对现有流程进行关键基础设施改进或更改的地方。这为公司的其他成员提供了一个机会来权衡和讨论业务影响,并设定未来的期望。

问题检视也是深入研究问题根源的方式。我们坚信会有一个神秘的刺针——如果我们的生产系统以一种我们没有预料到的方式运行,我们想知道原因。

我们的告警理念

 

普罗米修斯的 logo

我们使用普罗米修斯作为告警文化的一部分。告警规则会提交给 Github 和同行评审。 Alertmanager PagerDuty 、email 和 Slack 发送告警提醒。我们有三种不同类型的告警:

  • 非分页警报: 仅向电子邮件和 Slack 发送警报 。
  • 日间分页提醒: 在白天向 PagerDuty 发送提醒,但在其他情况下只发送到电子邮件和 Slack。
  • 寻呼警报: 随时向 PagerDuty、email 和 Slack 发出警报。

团队中的任何工程师都有权添加或删除警报,但所有警报都应该是可操作的,并且必须有一个问题报告。我们的报告应该是简短的,说明当警报被触发时可以采取的具体行动。每个报告条目都包含对业务影响、有用的 bash 命令和到适当指示板的链接的简要描述。我们的目标是让任何工程师,不管他们有多少上下文,都能够使用报告中的信息来快速定位问题。

为了追踪我们的警报是否真正具有可操作性,我们借用了一些数据科学的概念,并测量了警报的准确率和召回率。在本例中,准确率指的是触发可操作性告警的百分比,召回率指的是警报通知我们的可操作性事件的百分比。当准确率较低时,我们会评估是否应该禁用或修改特定警报以在较低的阈值上触发。当召回率低的时候,我们试着看看是否有更好的信号来衡量我们应该应对的实际症状。

鼓励自我照顾

无论是晚上被打电话,还是要重新安排晚餐时间,on-call 都可能破坏你的个人生活。然而,如果设置得当,on-call 不应该成为任何个人的不应有的负担。下面是 Button 的 on-call 团队确保我们的工程师不会精疲力竭的几种方法:

  • 在一周结束的时候,我们会尽量安排另外的人进行轮换。如果有明确的问题,我们会关闭它们或将它们交给产品团队去处理。
  • 我们维护一个 on-call 的历史记录,所以如果升级时某个问题重新出现,你可以看到以前的工程师是如何处理和解决它的。
  • 在处理升级时,我们的 on-call 工程师使用 Slack 来一步步的沟通他们的决策和操作行为,以便其他人能够跟进。
  • 我们的 on-call 日程很灵活。如果有人需要休息几个小时,我们会查看运营状态表,看看是否有人可以替代。如果某人是今晚的主要负责人,第二天我们鼓励换一个人做这件事,这样他们就可以得到他们应该得到的休息。
  • 我们被鼓励并准备好在工作时间内外寻求帮助。没有什么比看到一个你根本不知道如何下手的任务更令人沮丧的了。我们知道,寻求帮助总是比按照错误的假设行事更好。我们将 on-call 的团队的联系信息存储在值班表中,以便在工作时间以外出现紧急情况时,我们能够联系到相关人员。

互相支持

Button 现在的规模不适合期望每个工程师都知道每个服务是如何工作的。我们的 on-call 工程师不仅来自不同的工程学科,而且在 Button 的不同产品团队中工作。不是每个人都是 DevOps 专家,当然也不是每个人都熟悉我们系统中的每一个软件。然而,我们作为一个团队互相支持,帮助对方成长为我们的优势,克服挑战,学习新的技能。on-call 的经历教会了我如何设计和构建更好的软件,如何清晰地沟通,以及如何成为一个更有同理心的队友。

查看英文原文: Fostering a Strong Engineering On-Call Culture

2018-10-19 10:061934

评论 1 条评论

发布
暂无评论
发现更多内容

硬件测试的思考和改进:有道词典笔的高效测试探索

有道技术团队

大前端

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先

阿里巴巴云原生

阿里云 Serverless 容器 开发者 云原生

【操作系统】存储器管理

学Java的猪猪侠

2021版金三银四Java面试突击手册开源(涵盖p5-p8技术栈),“吊打”面试官的“葵花宝典”

Java 编程 程序员 架构 面试

Flink程序优化及反压机制

大数据技术指南

flink 3月日更

「产品经理训练营」第八章作业

Sòrγy_じò ぴé

Apache Iceberg学习日志

InfoQ_Springup

数据湖

技术中台之DevOps动态表单体系构建

EAWorld

缓存为什么会被污染?

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

美团3面(Java后台):NIO+BIO+Zookeeper+线程池+Redis+kafka

钟奕礼

Java 编程 程序员 架构 面试

maven打包,常用启动方式

秋天

mavne

怎样从零开始设计一个数据库

学Java的猪猪侠

JVM 诊断之 jps 工具使用

hepingfly

JVM jvm调优 jvm诊断 jps

又是一些小细节!3面成功入职字节跳动:算法+数据库+中间件+JVM

Java架构之路

Java 程序员 架构 面试 编程语言

源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的

阿里巴巴云原生

容器 云原生 k8s API 应用服务中间件

K8s 原生 Serverless 实践:ASK 与 Knative

阿里巴巴云原生

Serverless 容器 云原生 k8s 存储

一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?

阿里巴巴云原生

容器 微服务 云原生 k8s 中间件

支付宝高级研发一二三面题目:CMS+CAS+线程锁+事务+雪崩+Docker

钟奕礼

Java 编程 程序员 架构 面试

爆肝一周总结了一份Java学习/面试自测指南!200+道Java最常见面试题。

Java架构之路

Java 程序员 架构 面试 编程语言

MapReduce的运行机制详解

五分钟学大数据

hadoop 3月日更

oktoken跟单社区系统开发|oktoken跟单社区APP软件开发

系统开发

重点人员可视化研判分析系统搭建,可视化大屏系统

2021面试跳槽宝典:BATJ大厂核心面试解析600题

比伯

Java 架构 面试 程序人生 计算机

后端服务器网络编程之 IO 模型

Linux服务器开发

后端 网络编程 web服务器 Linux服务器开发 网络io

会声会影最新版:会声会影2021中文版它来啦!

奈奈的杂社

视频剪辑 视频后期 自媒体 视频处理 会声会影

浅论指针(一)

Integer

c c++ 指针

引入单点登录,需要考虑哪些问题?

龙归科技

SSO 单点登录

oktoken对冲合约软件APP开发|oktoken对冲合约系统开发

系统开发

关系数据理论是个什么牛马

学Java的猪猪侠

何止一个惨字形容!水滴Java面试一轮游,壮烈了,问啥啥不会,数据库血崩,我该怎么办?

钟奕礼

Java 学习 编程 程序员 面试

字节跳动5面喜提offer!分享给朋友们面试感受

Java架构之路

Java 程序员 架构 面试 编程语言

构建强大的项目on-call文化_文化 & 方法_红泥_InfoQ精选文章