English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

SRE 解决的问题 [BLOCK_TYPE SECTION/STEP]

欢迎来到 Site Reliability Engineering
[BLOCK_TYPE SECTION/STEP]

Site Reliability Engineering(SRE)于 2003 年起源于 Google。Ben Treynor Sloss 接管了一个小型运维团队,并将其重构为由工程师而非人工值班来管理生产环境。这一做法最终成为运行大型互联网服务的标准模式。 [BLOCK_TYPE SECTION/STEP]

传统的运维团队通过人工操作来保持服务运行:重启服务器、呼叫工程师、编写运维手册,并期望一切正常。这种模式在规模扩大后会失效。一个由五十人组成的运维团队无法手动重启五千台服务器。当规模超过一定程度时,手动运维就变成了一种消耗所有有效工时的负担。 [BLOCK_TYPE SECTION/STEP]

SRE 颠覆了这一模式。 当系统规模增长时,SRE 不会雇用更多运维人员,而是招聘软件工程师,并要求他们编写代码来完成运维工作。你的工作本质上是将软件工程方法应用于运维问题。你的产出是自动化、监控和工程化可靠性,而不是手动干预。

驱动 SRE 实践的三大基础理念:

- 服务水平目标 (SLOs):预先商定的量化可靠性目标

- 错误预算:SLO 的逆函数,用于衡量可承担的风险

- 消除 Toil:任何随系统规模线性增长的运维工作都必须消除

这三大理念贯穿于 SRE 的所有实践:事后复盘、值班轮换、容量规划、监控以及发布工程。

SRE: 将软件工程应用于运维

传统运维与 SRE 的对比

为什么传统运维在规模化后失效

典型的运维团队规模会随所管理的系统数量线性增长。服务器数量翻倍,运维人员也需要翻倍。这在小规模部署时财务上尚可接受,但在规模化场景下则会带来灾难性后果:你无法通过持续招聘来解决二次方增长的问题。

SRE 将运维工作限制在工程师时间的百分之五十以内。剩余一半时间必须用于工程工作:构建工具、自动化流程、消除导致运维时间达到百分之五十的重复劳动。如果运维工作长期超过百分之五十,团队必须将部分工作交还给开发团队或增加 SRE 人数。百分之五十规则可以防止 SRE 团队在持续压力下退化为传统运维团队。

比较两种模式的失效方式:

- 传统运维:更多故障导致更多手动响应,进而减少预防性工作的时间,最终产生更多故障。形成恶性循环。

- SRE:更多故障触发事后复盘,进而发现自动化机会,降低下一次故障的响应时间。形成良性循环(当机制有效时)。

一家小型初创公司有两名运维工程师和四十台服务器。他们通过 SSH 登录每台服务器、拉取最新代码并重启服务来完成部署。一次部署需要三小时。该公司即将接入一个将使服务器数量翻三倍的客户。为什么 SRE 负责人会认为当前的部署流程不可持续?在客户接入前具体应该做出哪些改变?

SLI、SLO、SLA

驱动生产的三个字母

没有度量的可靠性只是表演。SRE 把可靠性变成一个事先约定、所有人都能验证的数字。


服务水平指标 (SLI):对服务行为的度量。示例:请求延迟、错误率、吞吐量、队列深度。SLI 是你可以绘制成图表的数据。


服务水平目标 (SLO):针对 SLI 的目标值或范围。示例:“在滚动 28 天窗口内,99.9% 的 HTTP 请求成功。”SLO 是你对自己和用户做出的关于可接受服务质量的承诺。


服务水平协议 (SLA):具有法律约束力的合同承诺,通常包含违反时的财务处罚。示例:“如果月可用性低于 99.9%,我们将退款 10%。”SLA 是由律师强制执行的承诺。


关键区别:你的 SLA 必须始终比 SLO 更宽松。如果内部目标是 99.9%,而对外合同也是 99.9%,你就没有任何缓冲余地。SRE 通常将 SLO 设置得比 SLA 严格一个“9”:内部目标 99.95%,合同承诺 99.9%。这个差距可以吸收不可避免的糟糕周。

SLI、SLO、SLA 层级关系

Error Budgets: The Inverse SLO

从可靠性目标到工程决策

An SLO sets a reliability target. The error budget is what is left over: the amount of failure you can spend before missing the target.

If your SLO promises 99.9% success over 28 days, your error budget is 0.1% of requests, or about 40 minutes of complete downtime per month. That budget is yours to spend however you want: on planned releases, on experimental features, on chaos engineering, on tolerating a misbehaving dependency.

Error budgets reframe the dev versus ops conflict. Without a budget, every outage starts an argument about who shipped the bad change and how to prevent the next one. With a budget:

- Budget remains: ship faster, take more risks, run experiments. The budget pays for it.

- Budget exhausted: stop launching new features, freeze risky changes, focus on reliability work until the budget rebuilds.

This converts reliability from an emotional argument into a measurable resource. Engineers can spend the budget deliberately, like any other production input.

Error budget over time: target, actual, depletion [BLOCK_TYPE QUESTION slos/error_budget]

一个团队运行着一个结账 API,SLO 为 28 天内 99.95%。产品经理希望本周发布一项新功能,团队预计该功能在稳定期间将引入为期两周的 0.05% 错误率。请用错误预算的思路分析是否应该发布。如果团队本月已经消耗了 80% 的错误预算,答案会发生什么变化? [BLOCK_TYPE CONTENT slos/error_budget]

定义 Toil

什么是 Toil

并非所有运维任务都属于 toil。SRE 对 toil 的定义非常精确:手动、重复、可自动化、战术性、无长期价值、且随着服务规模增长而线性增加的工作。

以上六个属性必须全部满足才算 toil。一次性数据迁移虽然是手动的,但不重复,因此不属于 toil。高级工程师设计新服务架构虽然是战术决策,但能创造长期价值,因此也不属于 toil。

以下是属于 toil 的示例:

- 服务因内存泄漏崩溃后手动重启

- 事件排查时将日志片段粘贴到聊天频道

- 填写工单表单以配置新数据库

- 手动运行季度容量报告

- 逐一审批常规部署请求

50% 规则 将 toil 上限设定为 SRE 工作时间的一半。若超过 50%,团队必须将相应职责交还给产品团队或增加工程师,但核心目标始终不变:通过用工程化系统替代人工操作,将 toil 逐步降至零。

自动化不仅节省时间,还能彻底消除一类人为错误。一个用于配置数据库的脚本不会在长时间工作后遗漏步骤。

Toil 特征:6 项属性检查表

Toil 审计推理

你的团队记录了时间分配情况。上季度占比为:30% 部署、25% 事件响应、20% 容量工作、15% 特性开发、10% 产品团队的一次性请求。

请审计上述五类工作:哪些可能属于 toil?为什么?针对最大的 toil 类别,提出一个具体的工程项目,说明如何在季度内将其减少一半。

On-Call 卫生

工程师,而非寻呼机

待命值班会带来真实成本。睡眠会被打断,周末会被占用,未知问题的压力也会不断累积。SRE 将待命视为一种有限资源,必须保持可持续,而非由最关心的人承担的英雄式负担。

健康的待命轮值遵循以下原则:

- 有偿时间:待命时长应换算为补休、额外薪酬或同等福利。无偿待命会耗尽团队。

- 合理的轮值深度:六人团队同时承担主备值班,意味着每位工程师每三周轮值一次。两人轮值会毁掉职业生涯。

- 告警量预算:Google SRE 手册建议每十二小时班次最多两次告警事件。超过此上限,团队必须投入工程时间降低告警量,而非单纯忍受。

- 仅保留可操作告警:每一次告警都必须需要人工介入。如果告警会被忽略、自动处理,或在正常运行期间反复触发,则不应存在。告警疲劳是一种可靠性缺陷。

- 跨时区交接:全球分布式团队在时区边界交接班次,确保除非系统确实无法等到早晨,否则无人会在凌晨三点收到告警。

健康的待命轮值:6人团队、跨时区结构

Blameless Postmortems

故障如何转化为改进

每一次重大故障都会产出一份事后复盘(postmortem):一份书面分析,记录发生了什么、原因、修复方式,以及为防止再次发生而做的改进。事后复盘是 SRE 版的复利:每一次复盘都会为系统带来永久的可靠性提升。

无责(Blameless) 意味着文档将故障归因于系统和流程,而非个人。如果工程师执行了错误的命令,复盘会追问:为什么系统允许执行该命令?为什么没有防护机制捕获它?对系统、文档或工具做哪些改动,才能防止下一位工程师犯同样的错误?

无责文化的存在只有一个原因:当人们害怕惩罚时,就会隐藏错误。隐藏的错误会成为下一次故障。与积累未披露缺陷的代价相比,无责文化的成本是低廉的。

事后复盘通常包含:

- 摘要:用一段话描述故障及其影响

- 时间线:按分钟重建的事件经过,附带时间戳

- 根本原因分析:导致故障的技术和流程因素

- 检测:团队如何发现事件,以及耗时多久

- 解决:恢复服务所采取的措施

- 经验教训:哪些有效,哪些无效

- 行动项:具体、明确责任人、有时限的工程任务

行动项记录在跟踪系统中。它们会像其他工程工作一样被优先级排序。没有行动项的事后复盘只是讲故事,工作不会带来任何改变。

事后复盘结构:7 个标准章节

一位工程师在生产环境运行了本应在预发布环境执行的数据库迁移脚本。迁移导致表被锁定 45 分钟,引发部分服务中断。请写出你会在无责事后复盘中包含的前三项行动项。每项必须具体、明确责任人,并针对底层系统而非工程师的失误。

四大黄金信号

每项服务都必须测量的指标

Google 的 SRE 书籍提出了每个面向用户的服务都必须暴露的四种信号:延迟、流量、错误和饱和度。它们共同从用户的角度描述了服务的健康状况。监控信号过少会留下盲区;监控数百个指标则会让团队陷入告警疲劳。


延迟:请求耗时。应跟踪分布而非平均值。p50(中位数)描述典型体验,p99 描述最差的 1% 用户。仅看平均值会掩盖长尾:一个中位数 50 ms、p99 5,000 ms 的服务在平均值上看起来正常,却会毁掉百分之一的用户体验。


流量:服务上的需求。对于 Web 服务,指每秒请求数;对于流媒体服务,指同时连接数;对于批处理作业,指每分钟处理的项目数。流量与容量决策相关,也能揭示工作负载异常。


错误:失败请求的比率。显式失败(HTTP 500)、隐式失败(HTTP 200 但返回损坏数据)以及策略失败(响应慢于 SLO)都应计入。区分这些错误很重要:一个携带错误负载的 200 响应往往比一个诚实的 500 更伤害用户。


饱和度:系统运行的满载程度。包括 CPU 利用率、队列深度、内存压力、连接池占用率。饱和度可预测未来的延迟:当系统 CPU 达到 95% 时,几乎没有余量应对用户可见的延迟激增。


大多数 SRE 告警都源自这四种信号。基于症状的告警(在用户会察觉时触发)优于基于原因的告警(在 CPU 超过 80% 时触发)。四黄金信号描述的是症状。

四黄金信号:延迟、流量、错误、饱和度

SRE 职业路径

SRE 技能的适用领域

SRE 职业路径会根据工程师最喜欢钻研的领域而分化:


基础设施 SRE:构建其他团队运行所依赖的平台。涉及 Kubernetes、服务网格、内部云。需要扎实的系统工程、分布式系统理论和平台设计能力。在大型公司薪资极高,因为这项工作具有规模效应:一名基础设施 SRE 可支持数百名产品工程师。


嵌入式 SRE:与产品工程团队紧密合作,提升特定服务的可靠性。既是工程师也是教练。强大的沟通能力和代码审查技能与技术深度同样重要。通常是喜欢教学的工程师的最佳路径。


可靠性工具开发:构建可观测性技术栈,包括监控、告警、仪表盘、事后分析工具和事件管理平台。涉及大量前端和数据工程工作。产出会被所有其他团队使用。


生产工程:Facebook/Meta 对 SRE 的称呼,专注于容量规划、部署和流量管理。涉及大量网络和系统工作。


值得持有的技术认证:Google Cloud Professional Cloud Architect、AWS Solutions Architect Professional,以及 CNCF 认证(Kubernetes Administrator、Kubernetes Application Developer)都标志着云原生能力。Linux Foundation 认证则体现系统深度。这些认证无法替代作品集,但有助于通过招聘筛选。

SRE 职业路径:4 条路线

从本课学到的 SRE 概念(SLO、错误预算、消除 toil、无责复盘、四项黄金信号)中,挑选一个你会最先引入一家尚未采用任何 SRE 实践的初创公司。说明你的排序理由:为什么先引入这个概念而非其他,以及你在第一个月会采取的具体第一步?

总结

你已掌握的内容

站点可靠性工程(SRE)最初是 Google 为解决规模化问题而提出的方案,如今已发展成为整个行业广泛采用的工程学科。你已学习:

- 从手动运维转向工程化可靠性

- SLI、SLO、SLA 以及 error budget(错误预算)的逆向 SLO 概念

- Toil 的定义、50% 规则以及通过工程手段降低 toil

- 可持续的 on-call 轮值与无责事后复盘实践

- 四大黄金信号(four golden signals)作为服务监控的起点

- SRE 职业发展路径及相关认证


最重要的两个理念。可靠性是一个事先约定的数字。 以及 运维负担是一种缺陷,而不是职位描述。 坚持这两个理念,其余的 SRE 实践便会自然而然地展开。


推荐阅读:Google SRE 书籍(免费在线阅读:sre.google/books/)、SRE 工作手册(提供实践练习),以及 Charity Majors 关于可观测性的文章。geometry-of 配套课程将深入探讨 SRE 实践背后的可视化结构:延迟分布、错误预算锥、依赖关系图以及仪表盘布局。