谷歌SRE运维模式解读
谷歌SRE运维模式解读
前面我和你分享了一些关于运维组织架构和协作模式转型的内容,为了便于我们更加全面地了解先进的运维模式,今天我们再来谈一下谷歌的SRE(Site Reliability Engineer)。
同时,也期望你能在我们介绍的这些运维模式中找到一些共通点,只有找到这些共通点,才能更深刻地理解,并借鉴到真正对我们有用的东西。
专栏的第一篇文章我们介绍了Netflix的NoOps模式。这个模式并不意味着不存在任何运维工作,只是Netflix将这些事情更紧密地融入到了日常的开发工作中,又做得非常极致,所以并没有很明显地体现出来。
但是,谷歌的SRE却是一个真实具体的岗位,也有明晰的岗位职责。从借鉴意义上来讲,SRE可以给我们提供更好的学习思路和样板。
SRE这个概念,我应该是2014年下半年的时候听到的。当时可接触的资料和信息有限,只知道是谷歌对运维岗位的定义,负责稳定性保障,就没有更多其他的认识了。
后来,有越来越多在谷歌工作或接触过这个岗位的专家开始在公开演讲中分享这个概念。同时,《SRE:Google 运维解密》,这本由多名谷歌SRE亲笔撰写的图书也开始在国内广泛流传,让我们对很多细节有了更加细致的了解。
SRE岗位的定位
首先,SRE关注的目标不是Operation(运维),而是Engineering(工程),是一个“通过软件工程的方式开发自动化系统来替代重复和手工操作”的岗位。我们从SRE这本书的前面几个章节,可以看到谷歌不断强调SRE的工程能力。我简要摘取几段:
Common to all SREs is the belief in and aptitude for developing software systems to solve complex problems.
所有的SRE团队成员都必须非常愿意,也非常相信用软件工程方法可以解决复杂的运维问题。By design, it is crucial that SRE teams are focused on engineering.
SRE模型成功的关键在于对工程的关注。SRE is what happens when you ask a software engineer to design an operations team.
SRE就是让软件工程师来设计一个新型运维团队的结果。
与之相对应的,还有一个很有意思的地方,整本书中提到Operation的地方并不多,而且大多以这样的词汇出现:Operation load,Operation overload,Traditional/Manual/Toil/Repetitive Operation Works 。你可以仔细体会一下,这些大多就是传统的纯人工操作模式下的一些典型词汇。
我们可以看到,从一开始,谷歌就没把SRE定义为纯操作类运维的岗位,也正是谷歌换了一个思路,从另外一个维度来解决运维问题,才把运维做到了另一个境界。
SRE岗位的职责
书中对SRE的职责定义比较明确,负责可用性、时延、性能、效率、变更管理、监控、应急响应和容量管理等相关的工作。如果站在价值呈现的角度,我觉得可以用两个词来总结,就是“效率”和“稳定”。
接下来,详细说下我的理解和分析。
SRE的能力模型,不仅仅是技术上的,还有产品设计、标准规范制定、事后复盘总结归纳这些技术运营能力,同时还需要良好的沟通协作能力,这个就属于职场软技能。
SRE,直译过来是网站稳定性工程师。表面看是做稳定的,但是我觉得更好的一种理解方式是,以稳定性为目标,围绕着稳定这个核心,负责可用性、时延、性能、效率、变更管理、监控、应急响应和容量管理等相关的工作。
分解一下,这里主要有“管理”和“技术”两方面的事情要做。
- 管理体系上,涉及服务质量指标(SLI、SLA、SLO)、发布规则、变更规则、应急响应机制、On-Call、事后复盘机制等一系列配套的管理规范和标准制定等。
- 技术体系上,以支持和实现上述标准和规范为目标,涉及自动化、发布、监控、问题定位、容量定位,最终以电子流程串联各个环节,做到事件的闭环。
可以看到技术上的平台和系统是用来支撑管理手段的。谷歌的运维其实并没有单独去提自动化、发布、监控等内容,而是通过稳定性这个核心目标,把这些事情全部串联在一起,同时又得到了效率上的提升。
我们来看几个主要的系统。
- 自动化。是为了减少人为的、频繁的、重复的线上操作,以大大减少因人为失误造成的故障,同时提升效率。比如谷歌内部大名鼎鼎的Borg系统,可以随时随地实现无感知的服务迁移。现在,它的开源版本,已然成为业界容器编排体系标准的Kubernetes。
- 持续交付。谷歌非常重视持续交付。由于它的需求迭代速度非常快,再加上是全球最复杂的分布式系统,所以就更加需要完善的发布系统。
- 问题定位。这块跟监控相关但又有不同。我看到谷歌SRE这本书中并没有提到太多Tracing的内容,更多的是讲监控和问题管理层面的
- 跟踪机制。其实,关于问题定位,谷歌的Dapper大名鼎鼎,功能很强大,国内外很多跟踪系统和思路都参考了Dapper的理论。这块也是为了能够快速定位问题,保障稳定而产生的,国内分享的大多关于全链路跟踪和分析、限流降级、开关和预案系统、强弱依赖等都属于这个范畴,我认为这块应该更准确地定义为分布式服务治理相关的内容。
- 各类分布式系统。如分布式锁、分布式文件、分布式数据库,我们熟知的谷歌三大分布式论文,就是这些分布式系统的优秀代表,也正是这三大论文,开启了业界分布式架构理念的落地。
这些系统大都是以稳定性为导向,同时带动了日常运维效率的大幅度提升,有了监控和全链路这样的问题发现和定位手段,也大大提升了我们对故障处理和问题定位的效率。容量管理,不仅仅可以保障容量充足,还能最大程度地保障资源分配的合理性,尽可能减少浪费,对于成本管控也大有好处。所以,围绕着稳定性这个核心目标,不仅达到了稳定的目的,还获得了高效的运维效率。
所以,SRE的理念通过稳定性这个核心点,将整个运维体系要做的事情非常系统紧密地整合起来,而不是一个个孤立的运维系统。所以,SRE是一个岗位,但更是一种运维理念和方法论。
如何借鉴和落地
在国外,SRE岗位的薪资,和SWE软件开发工程师相比,要平均高出25%。从实际的岗位要求上看,SRE的技能要求也要比SWE更高、更全面,所以这样的人才是比较紧缺的。即使在国外,除了谷歌、Facebook以及Netflix这样超一流的科技公司能够招聘到,或者内部培养出较多这样的人才,其它公司的SRE、PE或者应用运维也无法完全达到上面的要求。
在国内,就更难一些,那怎么做呢?一个思路就是我们之前讲组织协作模式转型时提到的,就是要依靠团队的力量、发挥团队的力量,如果是单个团队不能完成的事情,就跨团队协调完成。所以,SRE岗位的要求很高,但是我们可以靠团队中具备不同能力的人协作,共同达成SRE的职责和目标。
最后,还是我反复强调的观点,要想做好运维,就得跳出运维的局限,要站在全局的角度,站在价值呈现的角度,站在如何能够发挥出整体技术架构运维能力的角度,来重新理解和定义运维才可以。
谷歌SRE运维模式解读的更多相关文章
- DevSecOps 运维模式中的安全性
本文想从技术的角度谈谈我对云计算数据中心 DevSecOps 运维模式中的安全性的理解,和过去几年我在云服务业务连续性管理方面的探索. 现在公有云服务商都不约而同地转向 DevSecOps 模式.De ...
- 互联网巨头们的 SRE 运维实践「GitHub 热点速览 v.21.27」
作者:HelloGitHub-小鱼干 本周大热点无疑是前几天 GitHub 发布的 Copilot,帮你补全代码,给你的注释提出建议,预测你即将使用的代码组件-如此神奇的 AI 技术,恰巧本周微软也开 ...
- 读SRE Google运维解密有感(二)
前言 这是读“SRE Google运维解密”有感第二篇,第一篇参见 这本书最近又读了几章,结合自己的经历,有些地方真的能感同身受,有些地方也惊叹SRE充满辩证的思想,总之SRE是好一本好书,会给你很大 ...
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
2018年1月13号中国双态运维用户大会上,优云软件总裁刘东海接受了36Kr记者的专访,期间谈到了新时代下的企业运维模式,新兴技术和传统运维的融合以及优云未来的发展方向等问题.以下为访谈实录: 优云软 ...
- PaaS平台型IT运维&运营模式能给企业带来什么?
关注嘉为科技,获取运维新知 什么是PaaS平台型IT自动化运维&运营模式 PaaS平台型IT运维和运维模式是指:将通用的运维能力与具体的运维场景解耦合,将能够复用的,具备独立功能的通用能力纳入 ...
- 面试 Linux 运维工作至少需要知道哪些知识?
前言 我们已经发过不少 Linux 面试题,但是单独的面试题总感觉会过于零碎,没有体系化内容给人的帮助大. 知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案 ...
- linux运维面试前,先来检查这些基础知识忘了没?
知乎上有这样一个问题:一个新手面试 Linux 运维工作至少需要知道哪些知识?其中有一个答案对这一话题的解读非常深入,今天特别分享给大家. 一.什么是大型网站运维? 首先明确一下,全文所讲的”运维“是 ...
- 为什么Netflix没有运维岗位?
Netflix 是业界微服务架构的最佳实践者,其基于公有云上的微服务架构设计.持续交付.监控.稳定性保障,都为业界提供了大量可遵从的原则和实践经验. 在运维这个细分领域,Netflix 仍然是最佳实践 ...
- Netflix业务运维分析和总结
目录 Netflix工作环境的分析和思考 为什么Netflix会做得如此极致? 海量业务规模下的技术架构和挑战 更加合理的组织架构和先进的工具体系及理念 自由与责任并存的企业文化 当前问题: 精选提问 ...
随机推荐
- js binary search algorithm
js binary search algorithm js 二分查找算法 二分查找, 前置条件 存储在数组中 有序排列 理想条件: 数组是递增排列,数组中的元素互不相同; 重排 & 去重 顺序 ...
- TypedArray & buffer
TypedArray & buffer https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obj ...
- py conda 换源
安装软件 $ conda install wxpython 如果出现http错误,安装OpenSSL $ conda config --add channels https://mirrors.tun ...
- c++中运行lua
video 下载lua源码将src下面除了 lua.c和luac.c 的文件全部添加到项目中 #include <iostream> #include "lua.hpp" ...
- ElementUI使用总结
首先声明,我这总结的官网都有,只是将自己使用时遇到的问题,重新记录一下,官网地址:https://element.eleme.cn/ 1.表格内指定行数给定不同样式(类似于隔行变色,也能叫指定行数不同 ...
- list.add(int index, E element)和list.addAll(list1)
List.add(int index, E element): 在列表的指定位置插入指定元素(可选操作).将当前处于该位置的元素(如果有的话)和所有后续元素向右移动(在其索引中加 1). 参数:ind ...
- Dubbo之高级特性
Dubbo 注意当启动服务时,该服务会占用本机一个端口号,故在一台电脑启动多个服务时需要在配置文件中更占用本机的端口号 <!--服务占用本机的端口-当本机启动多个服务时须保持不同--> & ...
- 检查字符串是否包含另一串字符串(c++)
在c++中检查字符串是否包含另一串字符串,这个本来是我做过的一个算法题,不过最近刚好有个需求让我想到了这个题,就在此记录一下! 使用std::string::findfunction string s ...
- C# webapi跨域
C# webapi跨域 第一种在Web.config中<system.webServer>节点中配置(不支持多个域名跨域) 1 <httpProtocol> 2 <c ...
- Selenium 4.0beta: Grid 工作原理
Selenium 4.0 beta版已经发布,那么距离正式版已经不远了,在Selenium 4.0中变化比较大的就是Grid了,本文翻译了官方文档,重点介绍Grid 4的工作原理 Selenium G ...