- 文档
- 教程
- DevOps
- 运维
【免费下载链接】devops-exercises
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions
导读
Site Reliability Engineering(站点可靠性工程,SRE)是现代云原生与 DevOps 体系中最核心的工程方法之一,它把"可靠性"从模糊的运维口号变成可测量、可量化、可决策的工程指标。本篇文章以 devops-exercises 仓库的 SRE 专题文档为骨架,完整讲解 SLI、SLO、SLA、错误预算(Error Budget)与 Toil 五大核心概念的准确定义、计算方式与工程意义,并结合仓库内的 Observability、Chaos Engineering 等相关专题进行纵深扩展。读完本文,你将能够准确区分 SLI/SLO/SLA 三者的关系、手算错误预算、判断日常工作中的"Toil 型任务",并知道如何围绕这些知识点备战 DevOps/SRE 工程师面试。
说明:本文以 topics/sre/README.md 为绝对主体,仓库其余文件(README.md、topics/observability/README.md、topics/chaos_engineering/README.md、prepare_for_interview.md)仅作为补充佐证与延伸阅读来源。
图中为仓库 README 中"SRE Checklist"相关项目配图,可作为 SRE 工程实践的检查清单参考。
一、SRE 专题在仓库中的定位
devops-exercises 是一个以问答和练习形式组织的技术学习仓库,截至仓库文档记录,共包含2624个练习与问题,覆盖 Linux、AWS、Kubernetes、Terraform、Docker、Ansible 等多个主题,其中部分内容直接与 DevOps 和 SRE 相关(见 README.md 的定位说明)。
SRE 专题是仓库的独立主题之一,位于topics/sre/README.md,以"面试问答"的形式组织——每个问题以<details>折叠块呈现,先抛出问题(<summary>),展开后给出精炼的标准答案(<b>加粗内容)。这种"先自测、后对答案"的结构非常适合面试准备:你可以先不看答案自答一遍,再展开核对要点。
仓库 faq.md 也明确提醒:这些题目用于帮助学习概念,并不代表真实面试题目本身;prepare_for_interview.md 更是直接以 "How to prepare for DevOps/SRE/Production Engineer interviews?" 为题给出备考建议。因此,本专题的正确打开方式是"理解概念本质",而不是死记硬背答案。
二、SLI:服务等级指标(Service-Level Indicator)
2.1 定义
What is an SLI (Service-Level Indicator)?一个 SLI 是用于评估服务实际性能或可靠性的度量(measurement),它是定义 SLO 的基础。
SLI 回答的是"我们实际测到了什么"这个问题。它是从真实运行系统中采集到的、可量化的观测数据,直接反映服务的真实表现,而不是目标或承诺。
2.2 常见 SLI 示例
原文档给出的三个典型例子:
| SLI 示例 | 含义 |
|---|---|
| Request latency(请求延迟) | 单次请求从发出到完成所花费的时间,常用百分位(如 p50/p95/p99)描述分布 |
| Processing throughput(处理吞吐量) | 单位时间内系统成功处理的请求或事务数量 |
| Request failures per unit of time(单位时间请求失败数) | 单位时间内失败请求的数量或失败占比,是"可用性"类 SLI 的直接来源 |
从工程实现角度看,SLI 的采集依赖可观测性能力。仓库的 Observability 专题 指出:在分布式系统中,可观测性是收集程序执行、模块内部状态与组件间通信数据的能力,而"可观测性是站点可靠性工程的基石,是服务故障处置(triaging)的第一步"。没有日志、指标、追踪(Metrics/Logs/Traces)这套采集链路,SLI 无从谈起——这也是为什么 SRE 实践总是和 Prometheus、Grafana、ELK 等监控体系绑定在一起。
2.3 工程要点
- SLI 必须是可采集、可计算的:定义的每个 SLI 都应能从现有监控数据中算出,否则就是无效指标;
- 常见做法是把原始度量转化为"好事件占总事件的比值",例如"有效请求数 / 总请求数";
- SLI 的数量不宜过多,否则会分散注意力;Google SRE 实践通常建议聚焦少数几个真正反映用户体验的指标。
三、SLO:服务等级目标(Service-Level Objective)
3.1 定义
What is an SLO (Service-Level Objective)?一个 SLO 是由 SLI 测量的服务等级的目标值或目标值范围。
SLO 回答的是"我们希望服务表现成什么样"这个问题。它把一个或多个 SLI 的观测结果收敛成一个具体的、带时间窗的目标承诺。
3.2 原文档示例
例:在 30 天的时间窗内,针对一组特定 SLI 达到 99% 的目标。
这个例子拆解出 SLO 的两个关键构成要素:
- 目标值:如 99%(可用性)、p99 延迟 < 100ms 等;
- 时间窗:如 30 天、28 天(四周)、滚动季度等。目标值只有配合时间窗才有统计意义。
3.3 反直觉但极其重要的特性:SLO 是下界,不是上界
原文档特别强调了一个常被误解的点:
SLO 同时还充当下界(lower bound),表明服务没有必要比所需更可靠,因为过度追求可靠性会延迟新功能的发布。
这是 SRE 区别于"无条件追求 100% 可用性"的传统运维观的核心思想:可靠性是有成本的,多出的可靠性投入会挤占创新与迭代的资源。SLO 的存在让团队可以理直气壮地停止"过度工程",把精力投向业务价值。
四、SLA:服务等级协议(Service-Level Agreement)
4.1 定义
What is an SLA (Service-Level Agreement)?SLA 是服务提供方与客户之间的正式协议,明确规定预期的服务质量,以及未达标时的后果(如赔偿、退款、积分等)。
SLA 回答的是"我们承诺给客户什么,做不到会怎样"——它是商业与法律层面的契约,通常包含明确的违约赔偿条款,因此在多数公司由商务、法务与产品团队制定。
4.2 为什么 SRE 通常不参与制定 SLA?
原文档给出明确理由:
SRE 通常不参与构建 SLA,因为 SLA 与商业决策和产品决策紧密相关。
SRE 的角色更多是:在 SLA 既定之后,将其翻译成内部可执行的 SLO 与 SLI,并围绕它们建立监控、告警与错误预算机制。也就是说:
- SLI是"实际测到的"(事实层);
- SLO是"内部给自己定的目标"(工程层);
- SLA是"对外签订的承诺"(商业层)。
三者从内到外构成一层套一层的可靠性管理框架:先有 SLI 度量事实,再有 SLO 内部目标,SLA 则是对外的、通常比 SLO 更宽松的承诺(因为还要留出缓冲,避免把内部目标与外部赔偿直接绑定)。
五、错误预算(Error Budget):创新与稳定的天平
5.1 定义与公式
What is an Error Budget?错误预算代表服务在仍然满足其 SLO的前提下,可以承受的停机时间或错误量的上限。
计算公式极简:
错误预算 = 1 − SLO
例如原文档给出的:
一个 99.9% SLO 的服务,其错误预算为 0.1%。
按同样的公式可以推算常见的几个档位:
| SLO(可用性目标) | 错误预算 | 相当于 |
|---|---|---|
| 99% | 1% | 30 天约 7.2 小时不可用 |
| 99.9% | 0.1% | 30 天约 43.2 分钟不可用 |
| 99.99% | 0.01% | 30 天约 4.3 分钟不可用 |
(上表为按"错误预算 = 1 − SLO"推算出的换算,帮助直观理解预算量级。)
5.2 原文档的量化示例
如果我们的服务在四周内收到 1,000,000 个请求,一个 99.9% 可用性 SLO 将允许我们在该时间段内有 1,000 次错误。
验证计算:1,000,000 × 0.1% = 1,000 次错误。这展示了从"SLO 百分比"到"具体可消耗错误次数"的换算过程——这是 SRE 面试与实战中都要求掌握的算术能力。
5.3 错误预算的本质:创新与稳定的平衡机制
错误预算是一种平衡创新与稳定性的机制。如果 SRE 无法强制执行错误预算,整个系统就会崩溃。
这句话是 SRE 方法论的点睛之笔,包含两层含义:
- 给团队"犯错额度":只要当前周期内错误消耗没有超过预算,团队就可以放心发布新功能、做实验,而不必担心"任何一次发布事故都算重大责任";
- 预算耗尽即冻结发布:一旦预算被消耗殆尽,SRE 有权叫停发布,优先投入稳定性修复,让可靠性"回血"。
如果 SRE 没有权力强制执行预算(即"说不"的权威),那么预算只是一张空头支票,系统会陷入无限度加功能、无限度累积技术债的恶性循环——这正是原文档强调"整个系统会崩溃"的原因。
5.4 与 Chaos Engineering 的呼应
错误预算的"可消耗额度"需要被真实地暴露和验证,而这正是仓库 Chaos Engineering 专题 所描述的实践:设计并选择让系统无法正常工作的场景(故障注入),以最小实验验证假设,若系统未受影响则逐步扩大爆炸半径,若系统受损则深入理解原因并修复。这一"小步故障注入—观察 SLI 消耗—改进系统"的循环,本质上就是在主动、受控地"消费"错误预算,换取对系统韧性的确定性认知。
六、Toil:必须被自动化消灭的"苦役"
6.1 定义
What is Toil?Toil 是那种往往手动、重复、可自动化、战术性、缺乏持久价值,并且随服务规模线性增长的工作。
原文档给出的五个特征可以拆成一张检查表:
| Toil 特征 | 含义 |
|---|---|
| Manual(手动) | 每一步都需要人手工操作,而非自动触发 |
| Repetitive(重复) | 同样的事情不断重复发生 |
| Automatable(可自动化) | 有明确的、机器可执行的规则,可以被脚本化 |
| Tactical(战术性) | 只解决眼前问题,不改变系统长期状态 |
| Devoid of enduring value(缺乏持久价值) | 做完后不产生积累性的改进 |
| Scales linearly(线性增长) | 服务越大,这种工作越多,人力被无限吞噬 |
注意"随服务规模线性增长"是 Toil 最危险的属性:业务涨十倍,Toil 涨十倍,而团队不可能线性扩张,因此 Toil 是 SRE 组织规模化的头号杀手。
6.2 应对原则
如果你能自动化一项任务,你大概率就应该自动化它。
原文档进一步说明:
自动化能显著减少 Toil。投资自动化会带来具有持久影响的有价值工作,并且随着系统扩张,只需极小的调整即可获得扩展潜力。
"自动化 + 平台化"是把 SRE 从"救火队"转化为"平台工程师"的关键路径:把重复的运维动作沉淀为脚本、流水线(CI/CD)、基础设施即代码(Terraform)和自助服务平台。这与仓库中的 CI/CD(如 deploy_to_kubernetes 方案)、Terraform 练习 等主题所体现的工程化思路一脉相承。
6.3 判断方法
日常工作中可用一个快速问题自测:"如果服务规模翻倍,这个任务的工作量是否翻倍?如果是,而且步骤是机械的,那么它几乎就是 Toil,应该自动化。"
七、五问五答速记卡
| 问题 | 一句话答案 |
|---|---|
| 什么是 SLI? | 评估服务实际性能/可靠性的度量,是定义 SLO 的基础(如延迟、吞吐、失败数) |
| 什么是 SLO? | 由 SLI 测量的目标值/范围,如 30 天 99%;同时是下界,不必过度可靠 |
| 什么是 SLA? | 与客户的正式协议,规定服务质量与违约后果;由商业/产品决策驱动,SRE 通常不参与制定 |
| 什么是错误预算? | 1 − SLO,即在满足 SLO 前提下的可承受错误量,是创新与稳定的平衡机制 |
| 什么是 Toil? | 手动、重复、可自动化、战术性、无持久价值且随规模线性增长的工作,应靠自动化消灭 |
八、延伸阅读与仓库内学习路径
- 理解 SLI/SLO/SLA 的数据基础,先读 Observability 专题:监控、时序数据、日志/指标/事件/追踪,是可靠性指标的第一手来源;
- 想通过"主动制造故障"验证 SLO 与错误预算,可读 Chaos Engineering 专题,其中还列举了 AWS Fault Injection Simulator、Azure Chaos Studio、Chaos Monkey、Litmus、Chaos Mesh 等工具;
- 备考方法论可参考 prepare_for_interview.md 与 faq.md,理解仓库题目与真实面试的关系;
- 仓库 README 的 "Additional DevOps and SRE Projects" 一节还列出了 sre-checklist、howtheydevops、devops-resources 等关联项目(配图 images/sre_checklist.png),可作为进一步扩展的资料入口;
- 若想结合具体云与容器场景理解可靠性工程,仓库中的 Kubernetes 专题、AWS 专题 与 Terraform 专题 均提供了大量实操练习。
结语
SRE 的五个核心概念看似简单,却构成了现代可靠性工程的方法论闭环:用 SLI 度量事实,用 SLO 设定目标,用 SLA 承接商业承诺,用错误预算在创新与稳定之间动态取舍,再用自动化清除 Toil。掌握这套概念框架,不仅是在 devops-exercises 面试题中得分的关键,更是理解"为什么 SRE 敢于说'系统不需要 100% 可靠'"这一工程哲学的入口。
- 文档
- 教程
- DevOps
- 运维
【免费下载链接】devops-exercises
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions
相关推荐
Agent 可靠性工程(Agent-SRE)实战:为 AI Agent 定义 SLI、SLO 与错误预算
Agent 可靠性工程(Agent SRE)实战:为 AI Agent 定义 SLI、SLO 与错误预算 Agent SRE(agent sre)是 agent
人工智能AI AgentAI 安全治理策略引擎认证鉴权Agent 沙箱可观测性Azure 面试知识点全览:基于 devops-exercises 仓库的 Azure 基础精讲
Azure 面试知识点全览:基于 devops exercises 仓库的 Azure 基础精讲 本文围绕 devops exercises https://l
文档教程DevOps运维面向 AI 工程师的 Agent SRE 实战指南:用 SLI/SLO、错误预算与故障注入守护自主智能体
面向 AI 工程师的 Agent SRE 实战指南:用 SLI/SLO、错误预算与故障注入守护自主智能体 本文是 Agent Governance Toolki
人工智能AI AgentAI 安全治理策略引擎认证鉴权Agent 沙箱可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考