站点保障工程 (Site Reliability Engineering, SRE) 是一门在基础架构和运维问题中运用软件工程实践,以此打造超可扩展和可靠软件系统的学科。专家级站点保障工程师可以制定出能够平衡开发团队和运营团队的解决方案。Google 开创了这一角色;要了解深入的解释,请阅读 Google 电子书《站点保障工程》。
站点保障工程师 (SRE) 的职责介于开发和运维之间,但不一定是在 DevOps 内部。SRE 的概念早在 2003 年就已出现,这意味着它要早于 DevOps。这个词是由一手打造 Google 站点保障团队的 Ben Treynor 提出的。根据 Treynor 的说法,SRE 就是“让软件工程师来负责过去被称为运维的工作”。
DevOps 和 SRE 这两个学科的目标都是通过帮助开发和运维团队在整个应用程序生命周期内相互了解对方在流程中的作用来缩短发布周期。它们还倡导自动化和监控,从而缩短从开发人员提交代码变更到将其部署到生产环境的时间。SRE 和 DevOps 旨在在不影响代码或产品本身质量的前提下实现这个结果。
SRE 和 DevOps 提出两个不同但同样有价值的问题:
DevOps 询问需要完成什么。
SRE 询问如何完成。
站点保障工程师负责衡量服务级别指标 (SLI) 和服务级别目标 (SLO),而 DevOps 团队则负责衡量一段时间内的失败率和成功率。SRE 与 DevOps 共同分担在以下基础架构改进方面的责任:
SRE 不会讨论公司中存在多少孤岛,但会鼓励其他人讨论这一问题。可以在整个公司内利用各种工具和技术完成讨论,帮助将责任分摊到所有员工。
SRE 需要确保错误或故障不会过多。为此,他们使用一个由 SLI 和 SLO 得分构成的公式。SLI 通过计算请求延迟、每秒请求吞吐量或单位时间内每个请求的故障数来计算每个请求的故障数。SLO 是根据阈值和百分比得出,表示一定时间内的 SLI 成功率。
SRE 的职责是求变,但要有条不紊地慢慢进行。由于企业希望加快发展步伐,要求频繁发布并持续更新产品,因此,DevOps 和 SRE 必须要把控节奏,稳中求快。
只要移除手动任务有利于开发人员和运维,就去实施自动化。
SRE 团队需要确保一切都朝着正确的方向发展。为此,可以针对各种情形设置警报、接受对等代码审查和/或使用单元测试。
站点保障工程 (SRE) 和 DevOps 是两个热门学科,它们之间存在相当多的重叠;它们的基本目标是了解如何衡量成功或失败,以及如何在每个应用程序中获得持续可靠性。可靠性不仅仅在于基础架构,它涉及从应用程序质量到性能再到安全性中的每一步。 SRE 关注从源代码到部署的每个流程;这让他们享有“开发和运维之间的真正桥梁”的美誉。