You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
8.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 01SRE迷思无所不能的角色还是运维的升级
你好,我是赵成。
作为这个课程的第一讲我先从实践的角度和你聊聊应该怎么理解SRE。
为什么要强调是实践的角度呢?
开篇词里我们就提到过有人认为SRE就是一个岗位而且是一个具备全栈能力的岗位只要有这么一个人他就能解决所有稳定性问题。这还只是一种理解而且这个理解多是站在管理者的角度。
也有人站在运维人员的角度认为做好SRE主要是做好监控做到快速发现问题、快速找到问题根因还有人站在平台的角度认为做好SRE要加强容量规划学习Google做到完全自动化的弹性伸缩甚至还有人认为SRE就是传统运维的升级版把运维自动化做好就行了。
你看其实不同的人站在不同的角度对SRE的理解就会天差地别但是好像又都有各自的道理。
所以我特别强调实践的角度我们不站队就看真实的落地情况。我总结了一下从实践角度看SRE的关键点就一个词**体系化**。**SRE是一套体系化的方法我们也只有用全局视角才能更透彻地理解它。**
好了下面我们就一起来看怎么理解SRE这个体系化工程。
## SRE我们应该怎么来理解它
我先给你分享一张图这是结合我自己团队的日常工作做出来的SRE稳定性保障规划图。
![](https://static001.geekbang.org/resource/image/31/f6/31144fb00cf21005a8d0ae3dc02378f6.jpg)
我们最初画这张图是为了提高故障处理效率将每个阶段可以做的事情填了进去并在实践中不断补充完善最终形成了我们探索SRE的框架图。你应该也发现了这里面很多事情都很常见比如容量评估、故障演练、服务降级、服务限流、异常熔断、监控告警等等。
这就是为什么我一直给你打气说SRE并不神秘。学习SRE我们可以有非常熟悉的抓手。但是我们不能停留在向Google或其他大厂学习具体的技术经验上而是更应该学习如何将这些技术有机地结合起来形成一套稳定性体系**让体系发挥出力量**,告别只发挥某项技术的能力。
同时结合这些具体的事情你应该明白这些工作并不是某个人、某个角色甚至是某个团队就可以单枪匹马完成的。比如这里的很多事情要依赖运维自动化像容量扩缩容必然会与运维团队有交集如果做得再弹性一些还需要与监控结合就要与监控团队有合作同时还可能依赖DevOps提供持续交付、配置变更以及灰度发布这些基础能力就要与开发和效能团队有交集。
这些能力之间的相互依赖,就决定了**从职能分工上SRE体系的建设绝不是单个岗位或单个部门就能独立完成的必然要求有高效的跨团队组织协作才可以**。
所以不要想着设定一个SRE岗位就能把稳定性的事情全部解决掉这明显不现实。你应该从体系的角度出发设置不同的职能岗位同时还要有让不同角色有效协作的机制。
从另一个角度来讲如果当前我们的稳定性建设还仅仅聚焦在某个或某些具体的技术点上每个角色和团队之间的工作相对还是独立、各自为战的那就说明SRE体系和组织的真正威力还没有发挥出来。
所以如果你已经是这些领域的实践者比如你是一个运维工程师或者是一位监控开发工程师又或者是一个DevOps开发工程师我建议你除了负责当前的事情外应该更多地关注一下SRE全局视图。这样会帮助你深入了解SRE岗位所需要的技术能力进而提升你的平台架构能力。
要知道如果严格遵循Google的要求SRE岗位对技术要求是非常高的。只有具备了全面的技术能力拥有了全局架构的思维你才会在SRE的道路上走得更远。
总结一下从实践角度来看SRE的力量不能通过一个岗位、一个或几个技术就发挥出来。SRE是一个体系化工程它需要协同多个部门、多项技术。
## 做好SRE的根本目的是什么
认识到SRE是个体系化的事儿还不够我们还可以“以终为始”看看SRE最后要达成什么样的目标以此来加深对它的理解。
SRE做了这么多的事情最后的目的是什么呢
这个答案很明显嘛,就是提升稳定性。但是怎样才算提升了稳定性呢?要回答这个问题,我们有必要来讨论下稳定性的衡量标准。
从业界稳定性通用的衡量标准看,有两个非常关键的指标:
* **MTBF**Mean Time Between Failure平均故障时间间隔。
* **MTTR**Mean Time To Repair 故障平均修复时间。
还来看前面的SRE稳定性保障规划图你会发现我们把整个软件运行周期按照这两个指标分成了两段。通俗地说MTBF指示了系统正常运行的阶段而MTTR则意味着系统故障状态的阶段。
![](https://static001.geekbang.org/resource/image/b3/93/b3c54d78efe3a7616a5e0fc8c124df93.jpg)
到了这里,我们也就明白了,如果想提升稳定性,就会有两个方向:**提升MTBF**,也就是减少故障发生次数,提升故障发生间隔时长;**降低MTTR**,故障不可避免,那就提升故障处理效率,减少故障影响时长。
你想,如果我们把故障发生时间的间隔变长,并将故障影响的时间减少,系统稳定性是不是自然就提升了呢?答案是显然的。
从SRE稳定性保障规划图中可以看出MTTR可以细分为4个指标MTTI、MTTK、MTTF和MTTV。我把它们的具体解释做了一张图你可以保存下来有时间就琢磨一下。这4个指标你要烂熟于心。
![](https://static001.geekbang.org/resource/image/95/29/9542c5c234c8332f22a9f18b0707cf29.jpg)
现在我们再来看SRE稳定性保障规划这张图你就会理解为什么要把所做的事情分组分块呈现。目的就是区分清楚**我们做的任何一件事情、开发的任何一套系统、引入的任何一个理念和方法论有且只有一个目标那就是“提升MTBF降低MTTR”**,也就是把故障发生时间的间隔变长,将故障影响的时间减少。
比如在Pre-MTBF阶段无故障阶段我们要做好架构设计提供限流、降级、熔断这些Design-for-Failure的服务治理手段以具备故障快速隔离的条件还可以考虑引入混沌工程这样的故障模拟机制在线上模拟故障提前发现问题。
在Post-MTBF阶段也就是上一故障刚结束开启新的MTBF阶段我们应该要做故障复盘总结经验找到不足落地改进措施等。
在MTTI阶段我们就需要依赖监控系统帮我们及时发现问题对于复杂度较高和体量非常大的系统要依赖AIOps的能力提升告警准确率做出精准的响应。
同时AIOps能力在大规模分布式系统中在MTTK阶段也非常关键因为我们在这个阶段需要确认根因至少是根因的范围。
你看,我们做了很多事情, 新的理念和方法出来后也特别愿意尝试,就是因为有明确的目标,所有工作的开展都是围绕这个核心目标而去的。
好了按照以终为始的思路SRE要实现的目标就是“提升MTBF、降低MTTR”从这个角度出发我们再次认识到一定要**把SRE作为一个体系化的工程来建设**,因为单纯在某些技术点上发力是没有多大意义的。
## 总结
今天我要分享的内容就到这里了。总结一下,你需要记住下面这两点。
第一我们需要从全局的角度去理解SRE。SRE一定是靠整个技术和组织体系发挥作用的单纯从某个技术点或环节出发都无法呈现出效果也就是说**SRE一定要从全局考虑体系一定要“配套”。**
第二SRE的目的本质上是减少故障时间增加系统正常运行时间也就是 **“减少故障提升MTBF同时提升故障处理效率降低MTTR”**。SRE要做的所有事儿都是为这两个目标服务的。
我想无论你是团队负责人、架构师,还是一线的技术专家,有了这样的全局视角后,就会知道接下来应该从何入手,以及如何与其他团队协作来构建这样的体系。
## 思考题
开篇词中我们提到过大家对SRE的困惑比如SRE和DevOps都是很好的方法论我应该怎么选到底哪个更适合我今天我们讲了SRE应该怎么理解我想对这个问题你应该有答案了。那就请你来说一说SRE和DevOps到底哪个更适合你它们有什么区别和相同点
请你在留言区说出自己的思考,也欢迎你把今天的内容分享给身边的朋友,和他一起讨论。
我们下节课见。