跳到主要内容

第 8 章 站点可靠性工程(SRE)

概述和学习目标

本章提供了对站点可靠性工程 (SRE) 的基础理解,该学科将软件工程的各个方面集成到IT操作中,以创建高度可靠和可扩展的系统。本章从其起源和关键原则开始,深入探讨了SRE的核心实践,包括建立服务水平目标 (slo),自动化的重要性,以及战略性地使用错误预算来平衡可靠性与创新步伐。它概述了SRE团队中的角色和职责,组织中实施SRE的过程以及支持SRE实践的基本工具和技术。通过这一全面的概述,您将深入了解SRE如何弥合开发和运营之间的差距,确保系统的可靠性和效率。

在本章结束时,您应该能够:

  • 讨论现场可靠性工程 (SRE) 的含义和重要性
  • 讨论服务水平指标 (SLIs)
  • 探索SRE的重要原则

什么是站点可靠性工程 (SRE)?

站点可靠性工程 (SRE) 是一种运行大规模,可靠服务的方法。 谷歌 人们普遍认为 “SRE” 一词正规化和普及,此后被许多其他科技公司采用。SRE将软件工程的各个方面与传统的IT融合在一起,并专注于创建可扩展且高度可靠的软件系统。SRE的主要重点是提高服务的可靠性。可靠性通常通过服务水平指标 (sli),服务水平目标 (slo) 和服务水平协议 (sla) 来衡量。这些指标有助于定义服务预期的性能和可用性级别。

尽管传统的IT操作可能专注于保持系统运行,但SRE提供了一个框架,用于平衡对系统可靠性的需求与对新功能和开发的需求。它通过更紧密地集成开发和运营团队,在两个领域使用相同的工具和技术来提高系统的可靠性和可维护性,从而做到这一点。

SRE对组织管理其IT基础架构和运营的方式产生了重大影响。它导致了更可靠的服务的发展,提高了客户满意度,并加快了创新周期。SRE实践已被许多领先的科技公司采用,并且越来越多地应用于科技以外的各种行业。

SRE与DevOps

站点可靠性工程 (SRE) 和DevOps都是旨在增强开发和运营团队之间的协作,同时提高软件系统的整体可靠性和效率的方法。虽然它们有共同的目标,但SRE和DevOps之间有明显的区别。

SREs的特征

  • 注重可靠性: SRE首先强调确保服务的可靠性和可用性。SREs的专门任务是保持高水平的服务可靠性并满足定义的服务水平目标 (slo)。
  • 错误预算: SRE引入了错误预算的概念,它量化了在特定时间范围内允许的停机时间或错误数量。只要不用尽错误预算,这就可以在可靠性和创新性之间取得平衡。
  • 可衡量的目标: SREs设定可衡量的目标,例如SLOs和服务水平指标 (sli),以量化系统的性能和可靠性。这些指标指导决策并帮助确定工作的优先级。
  • 无责备事后: SREs在应对事件时采用无责备文化。进行验尸分析是为了了解问题的根本原因,并为未来实施预防措施。
  • 自动化: 自动化是SRE的核心原则。SREs利用自动化来处理日常运营任务,使他们能够专注于战略改进和主动措施。

DevOps的特点

  • 文化方法: DevOps更多是一种文化和组织哲学,强调开发团队和运营团队之间的协作和沟通。它寻求打破孤岛,并为整个软件开发生命周期创造共同的责任。
  • 持续集成/持续部署 (CI/CD): DevOps非常重视CI/CD实践,旨在简化和自动化的软件交付管道。这有助于频繁和可靠的发布。
  • 基础设施即代码 (IaC): DevOps鼓励使用基础设施即代码 (IaC),从而实现基础设施配置和配置的自动化。这导致了一致且可重现的环境。
  • 跨职能团队: DevOps促进跨职能团队的形成,开发人员、运营和其他利益相关者在整个开发过程中进行协作。这有助于提供更具弹性和可扩展性的系统。

关系和重叠

  • 协作: SRE和DevOps都强调协作,但SRE是一种特定角色,对可靠性的关注范围较窄,而DevOps则更多是一种跨越整个开发生命周期的文化方法。
  • 自动化: 自动化是SRE和DevOps之间的共享原则。两种方法都利用自动化来提高效率并减少人工错误。
  • 共享目标: SRE和DevOps都具有共同的目标,即提高系统可靠性,减少停机时间并加快软件交付。

考虑一个团队负责电子商务应用程序的场景。DevOps原则将指导团队自动化部署过程,使用IaC进行基础架构配置,并促进开发人员和运营之间的协作。同时,同一团队的SRE将专门专注于保持高水平的服务可靠性,设置和监视SLOs以及领导事件响应工作。

虽然SRE和DevOps有共同点,但它们的重点和范围不同。SRE是一个专门关注可靠性的角色,而DevOps是一种更广泛的文化方法,涵盖了整个开发生命周期。在实践中,组织可以采用SRE和DevOps的原则来创建一种全面的方法来构建和维护可靠,高效和可扩展的软件系统。

用SLIs测量可靠性

测量可靠性是SRE的关键方面; 服务水平指标 (sli) 是用于此的关键工具之一。

Sli是特定的定量指标,用于定义服务的性能和可靠性。它们通常表示为比率、百分比或特定数值。Sli代表对服务用户最关键的方面。选择正确的SLIs至关重要。它们应该与用户期望和业务目标保持一致。例如,如果用户重视快速响应时间,则延迟可能是关键的SLI。

例如,对于web服务,SLIs可以包括以下指标:

  • 延迟: 处理请求所需的时间
  • 可用性: 服务运行的时间百分比
  • 错误率: 导致错误的请求比例

SLIs在可靠性测量中的重要性

  • 可量化目标
    SLIs提供了一种为服务的可靠性设置可量化目标的方法。例如,可以在99.9% 处设置可用性的SLI,指示服务99.9% 时间都应该是可操作的。
  • 用于比较的基线SLIs作为比较的基线。团队可以将实际性能与定义的SLIs进行比较,以评估服务是否达到其可靠性目标。
  • 决策SLIs指导决策。如果始终无法满足SLIs,则可能会触发提高服务可靠性的操作,例如基础架构升级,代码优化或架构更改。
  • 沟通SLIs为组织内不同团队之间的交流提供了一种通用语言。无论是在开发人员和SREs之间还是在业务利益相关者之间,SLIs都提供了一个清晰客观的可靠性衡量标准。

让我们考虑一个云存储服务。此服务的SLI可能包括检索文件的延迟。可以将SLI设置为100毫秒的阈值。如果实际延迟始终保持在该阈值以下,则认为该服务在延迟方面满足其可靠性目标。

Sli在行动

  • 监控: 使用监控工具持续收集sli上的数据。例如,监控API调用的响应时间来计算延迟。
  • 警报: 根据sli设置警报,以便在性能偏离定义的目标时通知团队。如果延迟超过可接受的阈值,则会触发警报以进行调查。
  • 分析和改进: 对SLI数据进行定期分析,以确定需要改进的模式和领域。如果SLIs表明错误增加,则可能会提示代码审查或优化工作。

服务水平指标是现场可靠性工程实践中的基础。他们提供了一种定量和客观的方法来衡量服务的可靠性,帮助团队设定目标,做出明智的决策,并不断提高其系统的性能。通过定义和监视SLIs,SREs和开发团队可以共同提供更可靠和更具弹性的软件服务。

用slo和错误预算拥抱风险

在SRE中,拥抱风险是该方法的固有部分,并且通过服务水平目标 (slo) 和错误预算的概念进行管理。让我们来探讨一下SLOs和错误预算是如何让团队在承受一定风险的同时平衡创新和可靠性的。

服务水平目标 (slo)

Slo是特定的,可测量的目标,它们定义了服务的可接受可靠性水平。它们以百分比或比率表示,代表服务应达到的商定绩效水平。

SLOs允许团队根据用户期望和业务需求设定切合实际的目标。例如,可在99.9% 处设置可用性SLO,指示服务应在99.9% 时间内可用。

Slo为衡量服务的成功提供了明确的指标。如果服务始终满足或超过其slo,则认为它是可靠的。

错误预算

错误预算与slo紧密相关,表示在指定时间范围内允许的错误或停机时间量。误差预算本质上是SLO的倒数。例如,如果99.9% 可用性的SLO,则错误预算允许0.1% 停机时间。

错误预算提供了一种平衡创新需求和对高度可靠服务需求的方法。只要服务保持在其错误预算之内,团队就可以灵活地部署新功能并进行更改,而不会影响可靠性。

团队使用错误预算来为决策提供信息。如果错误预算接近用尽,则重点可能会从部署新功能转移到确保服务的稳定性。

拥抱风险

SLOs和错误预算鼓励了创新和实验的文化。团队有权尝试新的想法并部署更改,因为他们知道自己已经确定了可接受风险的阈值。

当服务超出其错误预算并且发生事件时,它将成为学习的机会。事后分析可帮助团队了解故障的根本原因,并实施改进措施以防止将来出现类似问题。

拥抱风险并不意味着接受不必要的失败。相反,它培养了一种持续改进的文化。团队使用来自事件和错误预算违规的数据,就如何提高服务的可靠性做出明智的决策。

真实世界的例子

考虑使用SLO进行延迟的电子商务平台。可以在200毫秒内完成的请求95% 设置SLO。相应的错误预算允许请求的5% 超过该阈值。这种设置允许开发团队创新和部署新功能,同时注意延迟方面可接受的风险水平。

用slo和错误预算来应对风险,就是要在可靠性和创新之间找到适当的平衡。通过定义可衡量的目标并允许可控的风险水平,团队可以构建弹性系统,不仅可以满足用户期望,还可以适应不断变化的需求和市场动态。关键是从失败中吸取教训,不断改进,并做出数据驱动的决策,以取得适当的平衡。

服务水平协议 (sla)

SLA是服务提供商与其客户之间的正式合同,概述了预期的服务水平。它定义了商定的服务质量,包括性能指标,可用性和支持期望。在站点可靠性工程 (SRE) 中,服务水平协议 (SLA) 在管理期望和确保服务满足用户需求方面起着至关重要的作用。

Sla的好处

  • 清晰的沟通: sla在SREs、开发人员和利益相关者之间建立了关于服务预期性能的共同理解。
  • 提高可靠性: 定义sla会促使SREs主动监视和提高系统的可靠性,以达到商定的目标。
  • 风险管理: 明确的sla有助于管理客户的期望并定义中断的潜在后果。这允许进行积极的计划和缓解策略。

真实世界的例子

让我们看一下SRE中SLA应用于电子商务平台的示例。

场景: 一家电子商务公司依靠一项名为 “产品目录” 的关键服务来向客户显示产品信息。SRE团队负责确保这项服务的可靠性。

  • SLI (服务水平指标): 产品目录服务的正常运行时间百分比。
  • SLO (服务水平目标): 正常运行时间的SLO可以在一个月内设置为99.95%。这意味着该服务每月最多可使用43.8分钟 (总时间的0.05%)。
  • SLA (服务水平协议): SLA将是SRE团队与电子商务业务利益相关者之间的正式协议。它将概述以下商定的正常运行时间SLO (99.95%) 以及缺少SLO的后果。例如,如果正常运行时间在一个月内低于99.95%,SLA可能会为业务团队指定服务信用。此信用额度可用于抵消由于停机时间而导致的服务成本。

在这种情况下的好处:

  • 清晰的沟通: SLA使每个人保持一致。业务团队了解产品目录的预期可靠性,SRE团队有明确的目标要争取。
  • 提高可靠性: SLO激励SRE团队主动监控和改进产品目录服务,以最大程度地减少停机时间并避免服务信用支出。
  • 风险管理: SLA定义了中断的潜在后果,使业务团队可以计划缓解策略,例如在产品目录不可用的情况下提供备用产品信息。

这是一个简化的示例,但它说明了sla如何将SRE对可靠性的关注转化为具有可衡量后果的面向业务的协议。

SRE的7条原则

站点可靠性工程 (SRE) 遵循一套原则,这些原则指导构建和维护可靠,可扩展和高效的软件系统的方法。这些原则是SRE哲学的关键。

  1. 拥抱风险
    SREs旨在确定可接受的风险水平并对其进行适当管理。没有一个系统是真正完美的。SRE承认会出现故障,并专注于最大程度地减少其影响并确保快速恢复。
  2. 服务水平目标 (slo)
    站点可靠性工程 (SRE) 的核心原则是朝着明确定义和精心设计的服务水平迈进。SLOs定义服务的目标可靠性级别。它们是具体的、可衡量的目标,代表了可接受的绩效水平。SLOs可以清楚地了解用户的期望,并指导团队保持所需的服务可靠性水平。换句话说,这不仅仅是设定目标,而是设定有效衡量绩效的正确目标。
  3. 简单
    在SRE,简单至上。复杂的系统就像复杂的难题-容易出错,难以排除故障,并且在维护方面要求很高。简单的系统更易于管理和调整,更少的复杂性意味着更快的修复和更流畅的操作,轻松地测试和监控; 更清晰的洞察力转化为更快的问题识别和解决。不太容易出错意味着更少的移动部件减少了故障的风险。对简单性的关注转化为SRE的核心目标: 平稳的操作。
  4. 辛劳自动化
    Toil是指重复的,手动的操作工作,对系统的整体稳定性或改进没有贡献。SREs的目标是尽可能实现辛劳自动化,为战略性、高影响力的工作腾出时间。自动化减少了错误,并允许团队专注于增值任务。
  5. 监控和报警
    有效的监视和警报对于及时识别和响应问题至关重要。SREs使用监视工具来收集有关服务性能和运行状况的数据。设置警报以在违反预定义阈值时通知团队,从而可以快速响应事件。
  6. 容量规划
    容量规划涉及预测使用模式,并确保系统能够处理当前和未来的负载。SREs旨在防止资源的过度配置和不足配置,取得平衡以确保最佳的系统性能和可靠性。
  7. 紧急响应和无罪的尸检
    SREs有能力对事件做出快速有效的反应。重点是最大限度地减少停机时间和恢复服务功能。接受了一种无责备的事后文化,使团队可以从事件中学习并实施改进以防止将来发生。
    事件审查 (通常称为事后审查) 不仅专注于故障查找,还旨在通过不同的方法确定问题的根本原因。这种观点的转变反映在名称本身上-死后的指控比传统的 “根本原因分析” (RCA) 少。目标是从错误中吸取教训,改进系统,而不是指手画脚。
    验尸不仅仅是找出根本原因。他们还会询问有关如何更好地检测、响应和更快地解决问题的关键问题。对于习惯于传统的以责备为导向的rca的组织来说,这种对改善响应的关注通常是一个挑战。建立优先考虑学习的 “无可指责的文化” 是充分利用尸检的关键。

SRE的七个原则为大规模构建和运行可靠的系统提供了框架。通过专注于可衡量的目标,自动化和持续改进的文化,SRE团队旨在提供满足用户期望的服务,同时允许创新和适应不断变化的需求。

在您的组织中建立SRE实践

在组织内建立强大的站点可靠性工程 (SRE) 实践需要多管齐下的方法。

1.获得买入和支持:

  • 展示SRE的价值: 向关键利益相关者强调提高可靠性、性能和效率的好处。
  • 确保资金和资源: 分配预算和人员以建立和维护专门的SRE团队。
  • 培养协作文化: 鼓励SRE、开发和运营团队之间的协作。

2.开始小并迭代: 识别关键系统:

  • 最初专注于为一些关键系统构建SRE实践。
  • 自动化日常任务: 自动化部署、扩展和配置管理,以释放人力资源。
  • 实施监视和日志记录: 持续监视系统运行状况和性能,以及早发现潜在问题。
  • 建立指标和slo: 定义衡量可靠性和性能的指标,并设置服务水平目标 (slo)。

3.建立一个专门的SRE团队:

  • 聘请熟练的专业人员: 招募具有自动化,监控和事件响应经验的人员。
  • 提供培训和发展: 为您的SRE团队提供成功所需的技能和知识。
  • 培养学习文化: 鼓励SRE团队内的持续学习和实验。

4.拥抱自动化和工具:

  • 投资自动化工具: 利用Ansible、Puppet和Chef等工具进行基础设施管理和部署。
  • 实施监视和警报工具: 使用诸如Prometheus,Grafana和ELK Stack之类的工具来监视系统运行状况和性能。
  • 利用事件管理工具: 使用PagerDuty、VictorOps和OpsGenie等工具来实现有效的事件响应。

5.培养无可指责的文化:

  • 注重从失败中学习: 鼓励对事件进行公开沟通和调查,以找出根本原因并防止未来发生。
  • 奖励主动解决问题: 在影响用户之前识别并解决潜在问题的个人并予以奖励。
  • 为共享知识创造一个安全的环境: 鼓励团队成员分享他们的经验和教训,以改善整体SRE实践。

6.不断改进和发展:

  • 定期检查和更新您的SRE实践: 根据新技术,工具和经验调整您的方法。
  • 衡量和跟踪进度: 利用指标和slo来衡量SRE实践的有效性。
  • 寻求反馈并迭代: 鼓励利益相关者的反馈,并不断改进您的SRE方法。

SRE的未来趋势和演变

在不断变化的技术格局以及对可靠,可扩展和安全系统的日益增长的需求的推动下,站点可靠性工程 (SRE) 的世界正在不断发展。以下是塑造SRE领域的一些关键的未来趋势和演变:

  • AI和机器学习集成: SRE团队将越来越多地使用AI和机器学习来自动化常规任务,预测系统故障并优化性能。这一趋势包括自我修复系统的发展,该系统可以自动检测和纠正问题,而无需人工干预。
  • 可观察性超过监控: 向可观察性的转变意味着更深入地关注通过系统生成的输出数据来理解系统的内部状态,超越了传统的监控。这涉及利用高级分析、人工智能和机器学习来预测和防止问题影响用户。
  • DevSecOps集成: 安全考虑因素将与SRE实践更加集成,从而导致称为DevSecOps的整体方法。这种方法强调从开发的最早阶段就纳入安全措施,确保可靠性和安全性都是系统设计的基础。
  • 更广泛的组织影响: SRE原则和实践将越来越多地影响传统IT运营以外的领域,包括业务决策,客户体验和产品开发。重点将转向端到端可靠性,涵盖服务和产品的整个生命周期。
  • 云原生可靠性: 随着组织继续采用云原生技术,SRE实践对于管理云环境的复杂性和动态性至关重要。这包括利用无服务器架构、微服务和容器编排系统来实现可伸缩性和可靠性。
  • 可持续运营: 随着人们对环境影响的认识不断提高,SRE实践中将越来越重视可持续性。这包括优化资源使用,并在数据中心和云服务中实施节能实践,以减少碳足迹。

这些趋势凸显了SRE适应技术领域新挑战和新机遇的动态特性。随着SRE的不断发展,它将在使组织能够提供可靠,安全和高效的数字服务方面发挥越来越重要的作用。

知识检查8.1

现场可靠性工程师必须将至少50% 的时间用于运营活动。是真的还是假的?

知识检查8.2

站点可靠性工程 (SRE) 的主要目标是什么?

  • 降低基础设施成本
  • 消除对IT运营团队的需求
  • 通过工程和操作实践确保最大的系统可靠性和正常运行时间
  • 只关注新产品功能,而不考虑系统稳定性

知识检查8.3

以下哪一项是场地可靠性工程 (SRE) 的七个原则之一?

  • 最大化变化速度
  • 优先考虑手动干预而不是自动化
  • 专注于软件开发实践
  • 服务水平目标 (slo) 是决策的主要依据

知识检查8.4

以下哪一项有助于平衡释放速度和系统可靠性?(选择所有适用的答案)

  • SLOs
  • 错误预算
  • SLAs

知识检查8.5

预计以下哪种趋势将对现场可靠性工程 (SRE) 的未来产生重大影响?

  • 运营对自动化和人工智能的依赖减少
  • 整合人工智能和机器学习,实现日常任务自动化,优化系统性能
  • 从可观察性转向只关注传统监控
  • 减少对SRE域中安全性的重视

第八章总结

本章概述了站点可靠性工程 (SRE),从其定义开始,并探讨了其关键原理和实践。SRE是作为一门学科引入的,它结合了软件工程的各个方面,并将其应用于基础架构和运营问题。目标是创建可扩展且高度可靠的软件系统。本章将SRE与DevOps区分开来,重点介绍了SRE为系统的自动化和可靠性带来的独特方法。

本章进一步研究了SRE的七个原则,其中包括自动化,无罪事后和持续改进,提供有关如何将这些原则应用于提高软件系统可靠性的见解。

此外,本章讨论了在组织内建立SRE实践的实际步骤,强调了采用重视可靠性,责任感和持续学习的文化的重要性。