• 若是把运维当作一门学科来看,是有难度的.不仅因为如何很好的运行系统这种普遍问题未得到解决外,现存的最佳实战也因高度依赖环境,而未得到广泛使用;另外一个未解决的问题就是如何更好的管理运维团队。详细分析这些问题通常被认为起源于致力运筹学的研究,在第二次世界大战期间用于改善盟军的进程和产出,但事实上,几千年来,我们一直在思考如何更好的运营

  • 然而,尽管有这么多的努力和想法,可靠的生产运维仍然难以保障,特别是在信息技术和软件可操作性领域 例如:以企业的角度,通常将运维视为成本中心;如果可能,要做有意义的改进即使是困难的.因对这种方法的短视,尚未得到广泛理解,但是对它的不满已经引发了如何组织我们在IT中所有事情的一场革命,这场革命源于试图解决一系列共同问题,最新解决这些问题的方案有两个:DevOps和SRE(Site Reli‐ability Engineering)。事实上,它们有很多相似之处,要比我们想象的多

DevOps产生的背

DevOps是一套松散的实践、指南和文化,旨在打破IT开发、运维、网络和安全方面的孤岛。由JohnWillis,Damon Edwards和Jez Humble联合执笔,阐述:CA(L)MS-代表文化、自动化、精益(如精益管理,持续交付)、度量、分享,是DevOps关键思想的缩写。分享和协作是这场运动的最前线,在DevOps方法中,改进(通常通过自动化方式)、然后度量结果,并与同事分享这些成果,这样整个组织都可以得到改进。所有CALMS原则都是有这种支持性文化促成的

DevOps、敏捷以及各种其他商业和软件工程技术都是关于如何在现代商业中最好的做生意的普遍世界观的例子。DevOps思想中的任何元素都不容易彼此分离,这基本上是通过设计来实现的。然而,一些关键的想法可以相对独立的进行讨论

不再孤岛(谷仓效应)

第一个关键思想:不再有孤岛,针对这一思想有两个方面的反应:

  • 历史上流行但现在越来越老式的独立运维和开发团队

  • 事实上,知识的极端孤立,对纯粹的局部优化的激励,以及缺乏协作在很多情况下对于企业来说都是非常糟糕的

事故是正常的

第二个关键思想: 事故不仅仅是个人孤立行为的结果,而是因为当事情不可避免地出错时缺少保障措施。例如:一个糟糕的界面在压力环境下会促使采取错误操作。如果发生(未明确的)错误情况,系统错误会使失败不可避免;坏的监控使我们无法知道是有问题,更不用说出了什么问题。一切传统观念的企业具有根除犯错制造者和处罚他们的文化本能,但这样做有其自身的后果:最明显的是,它们创造了是问题混淆、掩盖真相、责怪他人的动机,所有这些最终都是无益的分心行为。因此,着眼于加速恢复故障比预防事故更有意义

变更应该循序渐进

第三个关键思想: 小而频繁的变更时最佳的。在变更委员会每月开会讨论彻底修改大型机配置的计划,这是一个激进的做法。然而这种做法并不鲜见,所有变更必须由经验丰富的人员考虑并且为了有效考虑而进行批量化的观点,结果或多或少与最佳实践相悖。变更是有风险的,没错,但是正确的做法是将变更尽可能拆分成晓得组件或单元。然后,根据产品、设计和基础设施的变更,建立一个稳定的低风险变更管道。这种策略,增加对小变更的自动化测试和可靠地回滚有问题的变更,就形成了变更管理的方法:持续集成(CI)和持续交付或部署(CD)

工具和文化是相互关联的

工具和文化是DevOps的重要组成部分,特别是在强调正确管理变更的今天,变更管理依赖于高度特定的工具。然而,DevOps支持者强烈强调组织文化而不是工具本身,作为新工作方式成功的关键。一个好的文化可以解决围绕破碎的工具工作,但相反的情况很少适用。俗话说的好,文化将策略当早餐吃了(意味着文化的影响力远胜过策略),像运维,改变其自身是很难的事

度量至关重要

最后,度量在总体业务环节中尤其重要,例如打破孤岛和事件解决方案。在每个环境中,通过客观的测量来确定正在发生的事情的真实性,验证是否按预期进行了改变。并为不同职能部门达成一致建立客观基础(适用于业务和其他环境,例如on-call)

SRE产生的背景

网站可靠性工程师(SRE)是Google工程副总裁BenTreynor Sloss创建的术语(和相关的工作角色)。正如我们在前一节中所讲,DevOps是关于运维和产品开发之间的全周期协作的一系列广泛原则。SRE是一个工作角色,一组实践。如果DevOps是一种哲学和一种工作方法,那么SRE实现了DevOps所描述的一些思想,而且更接近于工作或角色的定义,比如"DevOps工程师"。因此,从某种程度上来说,SRE是DevOps的实现。 与DevOps运动不同,DevOps运动起源于多家公司的领导者和实践者之间的合作产生的,在SRE广泛普及之前,Google的SRE继承了周围公司的大部分文化,并没有像DevOps一样突出文化的变化

SRE有以下具体原则

运维是一个软件问题

SRE的基本原则是做好运维是一个软件问题。因此,SRE应该使用软件工程思想来解决该问题。这是一个广泛的领域,包括从流程和业务变化到类似复杂但更传统的软件问题,例如重写堆栈以消除业务逻辑中的单点故障。

通过SLOs(服务质量目标)进行管理

SRE不会试图提供100%的可用性,正如我们第一本书《Site Reliability Engineering》(网站可靠性工程)中所讨论的,这是个错误的目标,原因有很多。相反,产品团队和SRE团队为服务及其用户群选择适当的可用性目标,并将服务管理到该SLO。决定这样的目标需要业务部门强有力的合作。SLOs也有文化内涵:作为利益相关者之间的协作决定,SLO违规行为将团队无可指责的重新回到绘图板。

减少琐事

对于SRE来说,任何手动、重复性的的运维任务都是让人厌恶的。我们相信,如果一台机器可以执行期望的运维操作,我们就应该经常这样做。这种差别和价值在其他组织中并不常见,一些琐事就需要人力才能完成。对于在Google的SRE来说,琐事并不能作为工作来做。任何花费在操作任务上的时间意味着我们并没有真正的在为项目工作——我们如何使服务更可靠和可伸缩 a 然而,"生产智慧"为我们执行运维任务提供了非常重要的帮助。这种工作,可以通过指定系统的实时反馈来落地。需要甄别琐事的来源以便可以最小化这些工作甚至消除。但是,如果发现自己操作状态不佳,则可能需要更频繁的推送新功能和变更,以便其他工程师熟悉你所支持的服务

  • 生产智慧 关于"生产智慧"阐释: 使用这个词,意思是我们从运行的生产环境中获取到的智慧——关于它实际上是如何工作的、软件应该如何设计的细节而不是与实际相孤立的服务。获得所有事件及团队获工单等等都与现实直接相关,可以更好为系统设计和行为提供信息

工作自动化

这个领域的真正工作是决定什么条件下做什么自动化以及怎么自动化。 SRE在Google实践中:团队成员花费在琐事上而不是产生持久价值工程的时间为限制在50%。许多人把这个认为限制的上限。实际上,针对采用工程方法来解决问题,视为一种明确的声明和机制,要比一遍一遍的做琐事更加有用的多。

当我们考虑自动化和琐事时,基线和其如何发挥作用并不直观。随着时间的推移,一个SRE团队会将所有可以自动化的服务都自动化,剩下的都是无法实现自动化的(Murphy-Beyer效应)。这将主导SRE团队的工作,除非有其他要做。在Google环境中,你倾向添加更多的服务,直到达到某些限制,仍然有50%工程时间,或者你在自动化方面非常成功你可以去做一些其他完全不同的事情

通过降低失败成本来快速流转

SRE的主要优点之一就是不一定要提高可靠性,即使它已经发生,但实际上改进了产品开发的产出。为什么?降低常见故障的平均故障时间(MTTR)会增加产品开发人员的迭代速度,因为工程师不用将精力过多分散在处理故障问题上。这源于一个众所周知的事实,即在产品生命周期的后期,一个问题被修复的代价越高。SREs专门负责改善处理产品后期出现的问题,为整个公司带来收益。

与开发人员分享所有权

"应用程序开发"和"生产"之间的严格界限(有时被称为Dev和Ops)会产生相反的效果。将责任分工、运维分类作为成本中心,则会导致权力失衡或薪酬差异这一点尤为正确

SREs倾向于关注生产问题而不是业务逻辑问题,但是随着他们用软件工程工具的方法来解决问题以及与产品开发团队分享技能。一般而言,SRE在他们关注的服务可用性、延迟、性能、效率、变更管理、监控、紧急响应和容量规划方面具有特殊的专业知识。这些特殊技能(通常明确定义的)是SRE为产品和开发团队技术服务的基础。理想情况下,产品开发和SRE团队对技术栈有一个整体的了解——前端、后端、库、存储、内核和物理机——任何团队都不应该嫉妒拥有单一组件

在《Site Reliability Engineering》(网站可靠性工程)一书中,我们并没有明确指出:在Google,产品开发团队就默认拥有他们的服务,虽然SRE原则仍然告知整个Google如何管理服务,但是SRE原则既不可用也不保证。SRE团队的所有权模式与产品开发团队合作最终也是一个共享模型

使用相同的工具,无论功能或职位

工具是一个非常重要的行为决定因素。在Google的环境中,SRE如果没有统一的代码库、软件和系统的各种工具、高度优化和专有的生产堆栈等是非常天真的。我们与DevOps分享这个绝对假设:负责服务的团队应该使用相同的服务工具,不管它们在组织中的角色是什么。如果没有好的方法去管理服务,一个工具给SREs使用,另外一个工具给产品开发者使用,在不同的情况下,操作不同,可能会是灾难性的。彼此分歧越多,公司从改进每个工具的努力中获益就越少

DevOps与SRE对比

从上面聊的原则中,我们可以看到它们之间有很多共性:

  • DevOps和SRE都取决于为了持续改进,必须接受变化

  • 协作是DevOps工作的前沿和中心,有效共享所有权模式和合作伙伴关系是SRE发挥作用的必要条件。与DevOps一样,SRE也具有跨组织共享的强大价值,这样更容易打破团队之间的壁垒

  • 变更的最佳实践是: 持续小而频繁的变更,大部分情况下,都需要自动化测试和应用。关键是变更对可用性影响对于SRE来说尤为重要

  • 使用正确的工具至关重要,工具在一定程度上决定了行动范围。然而,我们不能过于关注使用某种特定工具来实现一些操作。面向系统管理的API是一个更重要方法

  • 度量对于DevOps和SRE来说都至关重要。对于SRE来说,SLOs(服务质量目标)决定着是否改善优化服务。当然,如果没有衡量标准(以及在产品、基础设施/SRE和业务之间的跨团队合作),就不会有SLO。对于DevOps来说,度量行为常用来了解过程的产出、一个反馈周期持续的时间等等。无论从专业角度还是从哲学角度,DevOps和SRE都是面向数据的

  • 管理生产服务器残酷的事实就是偶尔发发生了故障,并且你要说出为什么。SRE和DevOps都是无可指责的,目的是为了消除无意义的争论

  • 最终,实施DevOps或SRE是一种整体行为,两者都希望使用一种特定的工作方式共同协作,促使整个团队运营的更好。对于DevOps和SRE来说,更好的速度就是产出。

正如你说看到的,DevOps和SRE有很多共同点。然而,也存在着显著的差异,DevOps在某种意义上是一种更广泛的哲学和文化。DevOps对于如何在一个具体层面上运行相对沉默,例如,它并没有明确规定如何对服务进行精细化管理,而更多的专注如何打破更广泛的组织中的障碍。这就很有价值。

另一方面,SRE的指责范围相对狭窄,其职权范围通常是面向服务的(以终端用户为导向),而非整体业务。因此,它解决如何高效运行系统有自己的知识框架(包括错误预算等概念)。尽管SRE作为一种职业,高度关注激励错误和效率,但在诸如“组织孤岛”和“信息壁垒”等话题上,却相对沉默。它将支持CI/CD,不一定是因为业务需要,而是改进操作的实践。或者,换句话说,SRE相信和DevOps相同的东西,但原因可能有所不同

但原因可能有所不同

译自: How SRE Relates to DevOps(class SRE implements interface DevOps)

http://ow1schdt5.bkt.clouddn.com/books/site-reliability-workbook.pdf

看完本文有收获?请转发分享给更多人


欢迎关注“运维ABC”(AI、BigData、Cloud),运维技术社区,专注运维自动化、DevOps、AIOPS、ChatOPS、容器等落地与实践。

长按下方的二维码可以快速关注

一文彻底读懂DevOps与SRE来龙去脉相关推荐

  1. 一文彻底读懂物联网关键技术之——ZigBee!

    一文彻底读懂物联网关键技术之--ZigBee! 本文采用问答形式向你详细地介绍了方方面面,不夸口的说,你所需要知道的关于 ZigBee的一切,在这里基本可以了解到! 在智能硬件和物联网领域,时下大名鼎 ...

  2. 一文深入浅出读懂NoSQL

    一文深入浅出读懂NoSQL 2016-11-25 Runoot.com ICT架构师技术交流 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL".在现 ...

  3. 一文极速读懂 Gene Ontology (GO)数据库

    一.介绍 官方:基因本体(GO)知识库是有关基因功能的全球最大信息来源. 这些知识既是人类可读的,也是机器可读的,并且是生物医学研究中大规模分子生物学和遗传学实验的计算分析的基础. 在读懂基因本体论( ...

  4. 一文能读懂车载与Android的关系

    文章目录 1 Android Auto 1.1 核心功能 1.1.1 Google Assistant 1.2 兼容的车型和应用 1.3 App 1.3.1 开发 1.3.2 设计 1.4 无线 2 ...

  5. 一文彻底读懂优秀开源产品MyBatis一级缓存设计!

    孙玄 奈学教育CEO 读完需要 3 分钟 速读仅需 1 分钟 孙玄, 现任奈学教育科技创始人&CEO ,毕业于浙大,前百度资深研发工程师.前 58 集团技术委员会主席/高级系统架构师到前转转公 ...

  6. 一文彻底读懂MySQL事务的四大隔离级别

    前言 之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够深入,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~ 事务 什么是事务? 事务,由一个有限的数据库操 ...

  7. 一个文档读懂计算机网络

    计算机网络 1.互联网协议入门 我们每天使用互联网,你是否想过,它是如何实现的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知 ...

  8. 【Web技术】1114- 一文彻底读懂ESLint

    总字数:3,706 | 阅读时间:13分钟 在日常项目开发中,ESLint常常扮演者可有可无的角色,我们想让它来帮助我们检查代码,同时又害怕它带来的报错无法处理:本文带你深入的了解ESLint的配置以 ...

  9. 一文彻底读懂ESLint

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 在日常项目开发中,ESLint常常扮演者可有可无的角色,我们想让它来帮助我们检查代码,同时又 ...

最新文章

  1. Web开发经验谈之F12开发者工具/Web调试[利刃篇]
  2. java -IO流_字符流
  3. request.getServletPath()和request.getPathInfo()用法
  4. ElementUI中的el-select中多选回显数据后没法重新选择和更改
  5. ArrayList 与 LinkedList 底层实现
  6. Java面向对象编程篇4——内部类
  7. 一个符号引发的讨论,对抗攻击算法FGSM的纯粹版:FGNS,附代码
  8. Visual C++ 2008入门经典 第四章数组 字符串(练习题)
  9. 服务器电源输出电压稳定,服务器电源选购指南
  10. 查看程序用运时占用的内存
  11. Python实现Matlab绘制散点图
  12. 《生成式深度学习》Generative Deeping Learning 笔记 第二章 深度学习
  13. NLP之文本特征提取详解
  14. N76E003红外解码程序
  15. python写梦幻西游手游脚本_AirtestIDE实践一:梦幻西游手游师门任务自动化
  16. Android 2 时代到来了,敢为天下先是我等求知若渴的程序员的优秀品质
  17. 百度搜索结果页面的参数_反馈搜索结果用时(rsv_sug4)
  18. 关于G0、G1、G2、G3的名词解释
  19. Day04 利用flex布局完成PC端网页设计CSS+html部分
  20. java表格点击添加按钮一行_JavaScript_JQuery实现动态表格点击按钮表格增加一行,功能实现:点击添加按钮,表 - phpStudy...

热门文章

  1. 监督学习下的判别式模型和生成式模型
  2. 《程序员》3月精彩内容:大数据技术辨析与深度实践
  3. 计算机网络办公自动化及安全策略探究,计算机网络办公自动化及安全策略探究...
  4. 深度相机学习(一)Kinect的配置
  5. 湖南汨罗网站,ios,android开发交流群
  6. 【JAVA】jdk下载及jre下载
  7. 超强PS滤镜套装-Google Nik Collection
  8. 一个屌丝程序员的青春(八二)
  9. 【终极拆机】苹果iphone4拆机详细全记录(转载)
  10. 打砖块小游戏php程序,javascript实现打砖块小游戏(附完整源码)