SRE 与 DevOps 的不同之处

尽管网站可靠性工程 (SRE) 理念早在 2003 年就由 Google 的 Ben Treynor Sloss 提出,但其近年来却一直受到追捧。随着 DevOps 实践已经在许多组织中牢固确立,两者之间的冲突是否已经显现?SRE 只不过是一种过时的趋势吗?是 SRE 补充了 DevOps,或者是 DevOps 补充了 SRE?让我们来回顾一下。

维基百科将 DevOps定义为“将软件开发 (Dev) 和 IT 运营 (Ops) 相结合的一组实践。它旨在缩短系统开发生命周期并提供高质量软件的持续交付。”根据网站可靠性工程,“SRE 专注于寻找改进系统设计和操作的方法,以使其更具可扩展性、更可靠和更高效。”通过简单回顾上述定义,我们可以看到 DevOps 的定义更侧重于实践,而 SRE 的定义包括设计和可靠性等词。确实,两者都涵盖了上述两方面,即:DevOps 不会忽略设计和可靠性,SRE 也不会没有实践,但是当我们着眼于每种方法的重点时,我们会发现两种定义中的这些细微差异在其实现中是显而易见的。我们将进行更深入的探讨,研究一些显著区别。

DevOps 与 SRE 的差异

文化

让我们从了解文化方面开始,DevOps 和 SRE 都被组织作为一种文化而非实践领域采用,从这个意义上说,它们是相同的,尽管团队可能被指定为主要负责支持该文化的实践。虽然每种文化都是灵活的,这使得团队(而不是跨团队的从业人员)可以直接专注于 DevOps 或 SRE 实践,组织通常会将 SRE 作为一个或多个专注的团队采用,而 DevOps 从业人员通常倾向于分散在团队中。

例如,再次参考这本书,2016 年 Google 雇佣了 1000 多名网站可靠性工程师负责支持全公司内的 SRE 文化。相反,一个仅仅雇佣网站可靠性工程师但不接受 SRE 文化的组织在 SRE 实践方面不太可能取得成功。尽管更加模糊,但在 DevOps 文化方面,组织也存在同样的二分法。

风险

接下来,我们应该研究各自的风险处理方法,这是 SRE 的核心属性。SRE 和 DevOps 都寻求最大限度地减少风险暴露并尽可能多地实施影响检测和响应,但是,SRE 文化将风险管理视为目标,而不是更常见的 DevOps 症状管理方法。假设两家几乎相同的网络应用程序公司,其中一家公司追求 DevOps,而另一家追求 SRE,它们都希望实现一个新功能作为其各自应用程序的一部分。

另外,假设每个相应的更改在应用程序中引入不可靠性的概率完全相同。由于 SRE 文化投资于风险承受能力定义,因此该公司必须立即更好地了解如何对拟议变更做出反应,这可能应在编写一行代码来支持它之前完成。当然,DevOps 组织可以定义和维护风险承受能力,也就是说,没有什么可以阻止 DevOps 采用相同的实践,但是将风险承受能力定义作为 SRE 的核心原则,在一开始就将对话中的风险背景定位为一件理所当然的事情。

机会成本

与风险承受能力相反的是机会成本。继续就前面的例子来说,DevOps 组织很可能处于更好的位置,可以最大限度地减少机会成本的损失。这是意料之中的,因为 SRE 组织已明确且有意地将机会成本置于风险管理之后。需重述的是,SRE 组织在必要时需接受机会成本损失,以达到预期的风险承受能力。这并不是说任何一个组织都希望失去机会成本,而是要强调稍微不同的优先级。

可观察性

DevOps 中常说的一句话就是,“如果未经测试,那么它就不起作用”。主动测试对于 DevOps 和 SRE 实践来说无疑是一项重要的活动,但是,使用测试结果的方式是 SRE 理念的核心。回顾我们最喜欢的书(第 3 章):“作为 Google 的标准做法,我们通常最好通过确定一个客观指标来代表我们想要优化的系统的属性。通过设定目标,我们可以评估当前的性能,并跟踪性能的改进或降低。”我们来设想两个组织,一个遵循 DevOps,另一个遵循 SRE。两个组织都跟踪部署失败率或新部署对服务造成负面影响的频率的关键绩效指标 (KPI)。两个组织都可能希望将此 KPI 设定为较低的值(例如 5% 或更低),但每个组织将该指标概念化的方式不同:DevOps 团队可能将较低的值作为减少服务中断的一种方式,而 SRE 团队会使用 KPI 作为计算服务错误预算的一部分(有关错误预算的更多信息,见下文)。

错误预算

为了将可观察性与环境结合起来,无论是在指标价值方面,还是在指标的成功优化方面,SRE 团队通常关注预算。从概念上讲,错误预算与财务预算没有什么不同,也就是定义支出金额,并根据该限额跟踪实际支出。错误预算作为 SRE 团队和一个或多个开发团队(DevOps 或其他)之间的协议而实施。这种策略可以帮助减缓两个团队之间的紧张关系,尽管他们在逻辑上对稳定性 (SRE) 和速度 (Dev) 的优先级是相反的;只要开发团队没有在一个时间范围内花费他们的错误预算,那么 SRE 团队就不需要提出有关稳定性的担忧,并且团队应该共同保持期望的速度。

事后析误

尽管有最好的计划和准备,服务仍会中断。处理此类中断是 DevOps 和 SRE 实践的重要部分,但是中断之后的事后析误也同样如此。记录事件、已采取的纠正措施、以及将采取哪些措施来防止事件再次发生,这些都是事后析误的组成部分,并有助于确保事件不会使团队或组织不堪重负。尽管任何组织都可以进行事后调查,但 SRE 理念明确规定了这种做法,任何追求这种文化的团队都应该这样做。DevOps 工程师要修复故障,肯定会进行故障分析,以某种方式记录问题所在,当然,还会尝试在将来避免该故障再次发生。但修复后,不一定要求 DevOps 工程师对故障进行全面的事后分析。如果您是一名 DevOps 工程师,并且确实实施了全面事后分析,那没关系,这可能只是意味着您正在实施 SRE 理念,而无关您是否了解这一理念。

采纳 SRE 文化

关于采纳,有几个问题需要回答:谁来采纳、为什么采纳以及如何采纳。

谁来采纳?

虽然 SRE 文化不仅仅是一套工具,甚至是一系列实践,但究其核心,SRE 注重的是可靠性。一个组织如果能从对其技术可靠性的日益关注中获益,不仅是对正常运行时间的潜在改进,还包括在提高可观察性方面的辅助收益、对增值指标的更加关注以及对错误预算的实施,就非常适合加入 SRE 文化。

在个人层面上,任何人都可以通过采用这一理念而成为 SRE 工程师。别误会我的意思,我并不是说你可以成为 SRE。不过,我确实认为,优秀的工程师可以学习采用 SRE 原则,从而追求 SRE 文化。没有什么可以阻止一个有动力的人学习如何遵循 SRE 实践。

在有些组织中,这涉及将现有的 DevOps 从业人员转变为专注于 SRE 实践的角色,或者作为一个集中的小组,或者嵌入到现有团队中。因为 SRE 很大程度上源于 DevOps 理念,所以从业人员获得的许多技能将在两个方向上转化。

值得注意的是,SRE 文化虽然源自谷歌,但并不是只有 Google 规模的组织可以从中受益。

为什么采纳?

更多地关注可靠性可能会使很多不同组织受益,但是,SRE 的主要好处来自于其文化,关注可操作的指标,通过错误预算、事件管理实践等查看技术堆栈。有很多(技术和文化)方法可以提高可靠性,但是追求 SRE 本身就是一种心态,也是一种实践。

如何采纳?

每个组织都是独一无二的,因此追求 SRE 文化对每个组织而言也具有内在的独特性。一些组织可能已经在内部构建了 DevOps 实践,或者遵循信息技术基础架构库 (ITIL) 框架来交付信息技术服务,或者遵循 Agile 方法来组织软件开发工作,无论现有模式如何,SRE 都可以是一个合适的选择。也就是说,考虑下列问题可能有助于推动事情顺利进行:

  • SRE 应替代 DevOps 吗?
    一些组织将两者结合起来,实现自然互补的目标和利益;事实上,一些从业人员将 SRE 视为 DevOps 的实现——“人们可以将 DevOps 视为几个核心 SRE 原则在更广泛的组织、管理结构和人员中的推广。我们同样也可以把 SRE 看作是具有一些特殊扩展的 DevOps 的一个特殊实现。”(DevOps 或 SRE – 第 1 章,“简介” – 网站可靠性工程)。一些团队发现,在单个 DevOps 团队中嵌入一个或多个 SRE 专家可以有效地确保横向采用 SRE 实践,而另一些团队则建立了 SRE 卓越中心。
  • SRE 应替代 ITIL 吗?
    就像 DevOps 一样,一些组织发现 ITIL 和 SRE 是非常互补的,两者都强调围绕变更管理的治理形式和对 SLO 的遵守。
  • Agile 是实现 SRE 文化的必要条件吗?
    当然不是。虽然许多组织发现 Agile 方法是 SRE 迭代过程的良好基础,并且与错误预算方法相匹配,但是任何方法都可以兼容。SRE 关注的是结果,而不是软件本身的生产,生产软件的方法并不直接相关。例如,遵循瀑布方法的组织将根据 SRE 的错误预算和测试方法实施风险评估和减免阶段。

需要注意

SRE 理念可能对许多组织有很多好处,但换句话说,“为所有人,但不是一切”,SRE 并不适合所有人,也不适合所有事情。

  • 并非所有组织都能因可靠性提高而受益,或者,重申一下,提高可靠性的增量成本并不能为所有组织带来相等或更大的增量价值。对于一些组织而言,这是一个规模问题;Google 的全球规模并不能使其成为唯一可能从 SRE受益的公司,但一家拥有几千名用户的小型初创公司可能也不足以证明这项投资的合理性。
  • 对于一些组织来说,可靠性的提高可能并不能证明开发速度的降低具有合理性。通过专注于错误预算等实践,SRE 组织必然会降低速度,而且应该有目的性地这么做。
  • 通过建立 SRE 实践,组织可能陷入“可靠性现在完全是 SRE 责任”的思维陷阱。可靠性是 SRE 的责任,但它在整个组织中共享,就像采用 SRE 之前一样。虽然这不是避免采用 SRE 的直接原因,但它可能导致组织无法充分发挥 SRE 的潜力,甚至放弃采用。
  • 将团队或团队成员重新标记为 “SRE” 并不意味着组织与 SRE 理念保持一致。例如,没有实施错误预算的 SRE 团队很难说与 SRE 支柱保持一致。这种差距可能会导致组织将 SRE 视为最新流行语,并将其视为昙花一现; 至少这种差距甚至会降低 SRE 的名义价值。

结论

SRE 不是一时的时尚,也不是灵丹妙药,它是一种建立在理解和接受某些可衡量参数范围内风险的文化。

希望采用 SRE 文化的组织可以在不破坏现有 DevOps、Agile、ITIL 或其他现有策略的情况下这样做。事实上,SRE 有意融入其中。尽管 SRE 的所有细节都不在本文的讨论范围内 ,但在互联网上有 SRE 从业人员,甚至是 SRE 的发明团队提供了大量可贵的资源,可以帮助我们采取下一步行动:

  • https://sre.google/
  • https://cloud.google.com/blog/products/devops-sre/how-sre-teams-are-organized-and-how-to-get-started
  • https://cloud.google.com/blog/products/devops-sre/5-google-sre-resources-to-get-started
  • https://www.blameless.com/the-essential-guide-to-sre

点击了解 Incredibuild 的 CI 构建加速方案,并获取试用 License!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于博弈树的开源五子棋AI教程[5 启发式搜索]

文章目录 1 最大化攻击者/最小化防守者排序2 置换表启发3 杀手表启发4 历史表启发历史表以及杀手表的维护初始化追加杀手表项清空杀手表 启发式搜索的姿势千奇百怪,本文只讨论一下几种 //搜索空间 #define Search_Space_MVA 0 //最优价值攻击者[分数最大] #d…

基于SpringBoot的桃花峪滑雪场租赁系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

WebAssembly 的魅力:高效、安全、跨平台(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

小样本学习idea(不断更新)

在此整理并记录自己的思考过程,其中不乏有一些尚未成熟或者尚未实现的idea,也有一些idea实现之后没有效果或者正在实现,当然也有部分idea已写成论文正在投稿,都是自己的一些碎碎念念的思考,欢迎交流。 研一上学期 9.…

【Geo-AI】Tiff影像转vector方法

看SAM-Geo库源码时,看到了TIFF影像转矢量数据的方法,这就触动了我的专业基因,必须得保存下来,以防后续用的到.手动doge def raster_to_vector(source, output, simplify_toleranceNone, dst_crsNone, **kwargs):""&quo…

P7909 [CSP-J 2021] 分糖果

P7909 [CSP-J 2021] 分糖果 分糖果 题意 我要分糖果给n个小朋友,分多少次都没关系,但是,最后剩下的糖果要给自己。求自己最多拿到糖果的数量。 思路 定义输入if、else语句,分情况。一种情况情况是能力与实际差不多,二…

DDOS攻击简介——什么是DDOS

DDoS是什么? DDoS是分布式拒绝服务攻击(Distributed denial of service attack)的简称。 分布式拒绝服务器攻击(以下均称作DDoS)是一种可以使很多计算机(或服务器)在同一时间遭受攻击,使被攻击的目标无法正常使用的一种网络攻击方式。DDoS攻击在互联网上已经出现过…

pytest 的 fixture 固件机制

一、前置说明 固件(fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们。pytest 使用 fixture 固件机制来实现测试的前置和后置操作,可以方便地设置和共享测试环境。 二、操作步骤 1. 编写测试代码 atme/demos/demo_pytest_tutorials/test_pytest_…

JUC并发编程 08——原子操作类

目录 一.原子更新基本类型类 实现原理 二.原子更新数组 三.原子更新引用类型 四.原子更新字段类 Java从JDK1.5开始提供了J.U.C下的atomic包,atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去更新基本类型变量&#xff0…

WebAssembly 的魅力:高效、安全、跨平台(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Unity中的导航系统

NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路。导航时,只需要给导航物体挂载导航组建,导航物体便…

基于Rocket MQ扩展的无限延迟消息队列

基于Rocket MQ扩展的无限延迟消息队列 背景: Rocket MQ支持的延迟队列时间是固定间隔的, 默认19个等级(包含0等级): 0s, 1s, 5s, 10s, 30s, 1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m, 10m, 20m, 30m, 1h. 我们的需求是实现用户下单后48小时或72小时给用户发送逼单邮件. 使用默认的…

判断平衡二叉树与翻转二叉树——每日练习

目录 1、是否是平衡二叉树 初阶实现 分析 时空复杂度 进阶实现 分析 时空复杂度 总结 2、翻转二叉树 分析 时空复杂度 1、是否是平衡二叉树 110. 平衡二叉树 - 力扣(LeetCode) 初阶实现 /*** Definition for a binary tree node.* stru…

Linux 下更新 Host

文章目录 更新Host Linux 下更新 Host Linux下下载github代码,经常超时,有时候可通过更新host来解决。以下梳理总结几种更新 host的方法。 更新Host #方法一(openwrt,也利用于linux) wget -q https://gitlab.com/ineo6/hosts/-/raw/master/…

【Grafana】Grafana匿名访问以及与LDAP连接

上一篇文章利用Docker快速部署了Grafana用来展示Zabbix得监控数据,但还需要给用户去创建账号允许他们登录后才能看展示得数据,那有什么办法让非管理员更方便得去访问Grafana呢?下面介绍两个比较方便实现的: 在开始设置前&#xff…

显示器屏幕oled的性能、使用场景、维护

OLED显示器屏幕具有许多独特的性能和使用场景,以下是关于OLED显示器屏幕的性能、使用场景和维护的详细介绍: 一、性能 色彩鲜艳:OLED显示器屏幕能够呈现出更加鲜艳的色彩,色彩饱和度高,色彩还原性好,可以给…

SpringBoot+JaywayJsonPath实现Json数据的DSL(按照指定节点表达式解析json获取指定数据)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行-CSDN博客 在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。 Jayway JsonPat…

【【C++11特性篇】【强制/禁止 】生成默认函数的关键字default&delete(代码演示)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Linux》…

动物分类识别教程+分类释义+界面展示

1.项目简介 动物分类教程分类释义界面展示 动物分类是生物学中的一个基础知识,它是对动物进行分类、命名和描述的科学方法。本教程将向您介绍动物分类的基本原则和方法,并提供一些常见的动物分类释义。 动物分类的基本原则 动物分类根据动物的形态、…

vue3老项目如何引入vite

vue3老项目如何引入vite 安装 npm install vite vitejs/plugin-vue --save-dev Vite官方中文文档修改package.json文件 在 npm scripts 中使用 vite 执行文件 "scripts": {"serve": "vite","build": "vite build","pr…