当前位置: 首页 > news >正文

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!

相关文章:

SRE 与 DevOps 的不同之处

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

【湖仓一体尝试】MYSQL和HIVE数据联合查询

爬了两天大大小小的一堆坑,今天把一个简单的单机环境的流程走通了,记录一笔。 先来个完工环境照: mysqlhadoophiveflinkicebergtrino 得益于IBM OPENJ9的优化,完全启动后的内存占用: 1)执行联合查询后的…...

SpringCloud跨服务调用失败Seata无法回滚解决办法

遇到的问题 在微服务项目中 有A、B、C三个服务 其中 A调用B服务 ,B调用C, 这些就是跨服务调用了,在A服务中 还调用了一个当前模块执行插入数据的方法(在这里我就叫它为AA 也就是mybatis/spring管理的本地事务) A服务开启全局事务注解 Globa…...

OSG三维渲染引擎编程学习之一百零一:“第十一章:OSG粒子” 之 “11.2 粒子模拟过程”

目录 第十一章 OSG粒子 11.2 粒子模拟过程 第十一章 OSG粒子 虚拟现实中有很多效果,如雨效、雪效、雾效等,这些都可以通过粒子条统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 粒子系统是一个非常复杂的粒子模拟过程。在OSG中,专门定义了新的名字空间o…...

Autosar CAN开发03(从实际应用认识CAN总线的物理层)

建议同时阅读本专栏的: Autosar CAN开发03(从实际应用认识CAN总线的物理层) Autosar CAN开发04(从实际应用认识CAN报文) Autosar CAN开发05(从实际应用认识CAN波特率) 前言 在上一章的《AU…...

vue中父子组件传值

父传子 传: 在"标签"上传属性 <Card :name"name"></Card> 接: 在props中 export default {props: {name: String},setup(props) {console.log(props.name);} } 子传父 传: 触发,给一个事件传值 setup(props,{emit}) {emit("get…...

【网络编程】基于UDP数据报实现回显服务器/客户端程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 前言 我们如果…...

sqlilabs第三十二三十三关

Less-32&#xff08;GET - Bypass custom filter adding slashes to dangerous chars) 手工注入 由 宽字符注入可知payload 成功触发报错 http://192.168.21.149/Less-32/ ?id1%df 要写字符串的话直接吧字符串变成ascii码 注意16进制的表示方式 自动注入 sqlmap -u http:…...

第二十一章博客

计算机应用实现了多台计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c;相互之间可以交换数据。编写网络应用程序前&#xff0c;首先必须明确所要使用的网络协议…...

PSoc62™开发板之按键控制LED

实验目的 使用板子上的用户自定义按键控制LED亮灭&#xff0c;当按键按下时LED亮起来&#xff0c;不按下则不亮 电路图 按键电路 板子有两组按键&#xff0c;分别是系统复位按键和用户自定义按键&#xff0c;这里我们选择控制用户自定义按键&#xff0c;可以看到MCU_USER_B…...

Vue-Pinina基本教程

前言 官网地址&#xff1a;Pinia | The intuitive store for Vue.js (vuejs.org) 看以下内容&#xff0c;需要有vuex的基础&#xff0c;下面很多概念会直接省略&#xff0c;比如state、actions、getters用处含义等 1、什么是Pinina Pinia 是 Vue 的存储库&#xff0c;它允许您跨…...

大批量数据导出csv,平替导出excel性能优化解决方案封装工具类

阿丹&#xff1a; 有些业务逻辑需要在导出非常大量的数据&#xff0c;几百甚至几千万的数据这个时候再导出excel来对于性能都不是很友好&#xff0c;这个时候就需要替换实现思路来解决这个问题。 本文章提供了两种解决的方案&#xff0c;也是两种从数据库中拿取数据的方式一种是…...

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …...

【SassVue】仿网易云播放器动画

简介 仿网易云播放动画 效果图&#xff08;效果图&#xff09; 最终成品效果 动画组件 src/components/music/MusicPlayAnimate.vue <template><div class"music-play"><div></div><div></div><div></div></di…...

CentOS进入单用户模式

一、重启 二、出现内核选项 按“e” 三、编辑这一行 输入 rw init/sysroot/bin/sh 四、进入单用户模式 ctrlx 进入 五、切换目录 chroot /sysroot 六、然后你就操作你的系统了。 修改密码等等...

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知&#xff0c;微信小程序每个页面由.json&#xff0c;.scss&#xff0c;.ts&#xff0c;.wxml这四个文件组成。 有的小伙伴会发现&#xff0c;需要给页面加背景色的时候&#xff0c;只需在此页面的.scss文件中写个page{background-colo…...

图灵日记之java奇妙历险记--输入输出方法数组

目录 输入输出输出到控制台从键盘输入使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 猜数字方法方法定义方法调用的执行过程实参和形参的关系(重要)方法重载 数组数组的创建数组的初始化动态初始化静态初始化 数组的使用元素访问遍历数组 数组是引用类型null数组应…...

CSS新手入门笔记整理:CSS3弹性盒模型

特点 子元素宽度之和小于父元素宽度&#xff0c;所有子元素最终的宽度就是原来定义的宽度。子元素宽度之和大于父元素宽度&#xff0c;子元素会按比例来划分宽度。在使用弹性盒子模型之前&#xff0c;必须为父元素定义“display:flex;”或“display:inline-flex;”。 弹性盒子…...

OCP NVME SSD规范解读-1

OCP&#xff08;Open Compute Project&#xff09;是一个由Facebook于2011年发起的开源项目。其目标是重新设计和优化数据中心的硬件&#xff0c;包括服务器、存储、网络设备等&#xff0c;以提高效率&#xff0c;降低运营成本&#xff0c;并推动技术的创新和标准化。 在OCP中&…...

大规模和复杂问题挑战——分治思想来应战

分治思想利用了问题的内在结构和性质&#xff0c;使得大规模和复杂的问题能够被有效地解决。具体来说&#xff0c;分治思想的本质是通过问题分解、递归处理和解的合并&#xff0c;将一个复杂问题转化为一系列更简单的子问题&#xff0c;并最终得到原问题的解。 1、分治思想的本…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...