传统开发与运维模型与站点可靠性工程的区别

74次阅读
没有评论

问题描述

在现代的软件开发和运维领域中,站点可靠性工程(Site Reliability Engineering,简称SRE)是一个备受关注的话题。许多人可能会对SRE与传统的开发和运维模型之间的区别感到困惑。这篇文章将探讨SRE与传统开发与运维模型的主要差异。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

传统开发与运维模型

传统的开发和运维模型中,开发人员和系统管理员通常在不同的角色之间进行划分。开发人员负责编写应用程序代码,一旦代码提交完成,他们认为自己的工作已经完成。而系统管理员则负责将构建好的代码部署到生产服务器,并确保应用程序在生产环境中平稳运行。然而,很多性能问题实际上源于应用程序架构问题,而系统管理员通常不具备足够的编程知识来理解应用程序的内部运行情况。相应地,开发人员也不太了解应用程序在生产环境中的实际运行情况,导致问题难以解决。

另外,开发人员通常会被评价其能够多快地推出新功能,而系统管理员则会根据应用程序在生产环境中出现故障的频率被评价。这就导致开发人员和系统管理员之间的目标不一致,容易引发矛盾,损害业务和人员。

站点可靠性工程(SRE)

站点可靠性工程是一种在Google内部发展起来,并逐渐在广泛社区中传播的运维方法。然而,对于SRE的定义并不完全一致,因为它在不同组织中的实际职责可能存在差异。

在Google的SRE团队中,SRE的职责强调以下几个方面:
工程化(Engineering):使用计算机科学和工程概念来解决问题。
可靠性(Reliability):专注于使系统更具扩展性、可靠性和效率。
服务(Service):强调SRE负责网络服务,而不仅仅是单纯的系统管理。

SRE的核心原则包括:
1. 持续的工程化关注:通过预防性措施避免频繁的问题,减少手动操作(toil)。
2. 在不违反服务级别目标(SLO)的前提下追求最大的变更速度:帮助开发人员进行变更,同时避免引入过多问题。
3. 监控(Monitoring):当出现问题时自动触发警报。
4. 应急响应(Emergency Response):在出现故障时进行修复。
5. 变更管理(Change Management):确保变更的可控性。
6. 容量规划(Capacity Planning):预测资源使用并保持适当的资源。
7. 资源分配(Provisioning):为服务提供适当的资源。
8. 效率和性能(Efficiency and Performance):确保服务在预期水平上高效运行。

区别与演化

传统的开发与运维模型强调开发和运维之间的分离,而SRE则试图将这两个领域融合在一起。事实上,许多现代职称的变化实际上是对领域演化的反映:
系统管理员(Sysadmins):负责维护系统运行,但在Web操作领域中可能不足以描述所有任务。
Web操作工程师(Web Operations Engineers):区分了专门处理Web操作的系统管理员,但在DevOps概念出现之后,开始强调使用编程来减轻操作工作。
DevOps工程师(DevOps Engineers):强调通过编程来减少运维工作量,但因缺乏明确的定义而逐渐模糊。
站点可靠性工程师(SRE):强调负责生产服务的工程师,在服务运行过程中具备工程和运维能力。

结论

站点可靠性工程(SRE)是一种从Google发展而来的运维方法,强调通过工程化和可靠性提高服务质量。与传统的开发与运维模型相比,SRE试图融合开发和运维领域,通过自动化、监控和紧密合作来实现更好的服务可靠性。虽然SRE的实际定义可能因组织而异,但它代表了现代Web操作的演化方向。

更多阅读资源:
Charity Majors关于DevOps与SRE的讨论
Charity Majors关于Serverless与运维的文章
– [Susan Fowler关于运维身份认同的文章](https://www.susanjfowler.com/blog/2016/10/13/the-ops

正文完