传统运维将消失?体系化的 SRE 可靠性与连续性保障,了解一下?

本文主要是介绍传统运维将消失?体系化的 SRE 可靠性与连续性保障,了解一下?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是SRE?

在刚刚接触SRE时,很多人认为就是Google的一个具备全栈能力的岗位,可以独立解决很多问题的人。

而在深入探究之后发现,SRE 确实可以解决很多问题,但问题实在太多了,一个岗位或一个人是很难高效快速的解决的。

比如怎么做容量评估、怎么进行故障演练、怎么能做到服务限流、怎么做到异常熔断、怎么让监控告警更有效等。

所以为了解决这些问题,不难看出需要测试、开发、运维以及其他相关岗位人员都得进行合作建设,所以会发现其实可以认为SRE是一套指导建设的体系化方法。

SRE的目标是什么?

提高稳定性

建设SRE体系的目标是“提高稳定性”

而在SRE中对“提高稳定性”这一目标有着两个衡量的指标

图片

从他们的释义中可以看出两个指标与系统运行状态关系对应如下

图片

其实我们对系统稳定性认识就是让系统正常运行状态长时间维持下去,当出现故障时可以快速处理恢复。

所以提升MTBF,降低MTTR就成为了“提高稳定性”的目标。

这让我们在建设 SRE 做相关工作时,可以依据是否提升MTBF,降低MTTR去判断工作的有效性。

细分目标

有了这个目标之后,问题就来了,MTBF和MTTR两个指标是不是有点太大了,即使可以通过告警、通知或其他手段梳理出其两个指标的时间数据,也不清楚如何具体落实改进。

其实MTTR还可以细分4个指标,分别对应系统故障中四个阶段,具体如下

图片

而 MTBF 也可以细分2个阶段,如下:

图片

所以有了具体的阶段分割,我们就可以针对着去做工作,比如参考SRE稳定性保证规划图如下

图片

在体系建设方面可以分别对应

图片

在如此清晰明了的阶段化划分,我们建设阶段性工作就非常清晰,有针对性的去做,不怕走错路。

比如 Pre-MTBF 时,我们可以做好架构设计提供限流、降级、熔断等Design-for-Failure的服务治理手段,提供快速隔离的条件。

而 Post-MTBF 时,我们需要做好故障复盘,总结不足以及进行改进措施落地。

在这里呢,也可以借助AIOps能力提高问题定位效率以及告警准确率,降低MTTI和MTTK。

辨别故障的基础:合适的SLI,对应的SLO

上述我们知道目标是提升MTBF,降低MTTR基本是围绕这“故障”这个维度来衡量的,但是系统什么时候才是故障呢?

所以这里我们需要有个判断条件或者说是判断标准,来界定“故障与否”

了解监控系统的同学们会知道“告警”了,就有可能发生“故障”,这里用“有可能”是因为现实场景中通常下是不一定的。

而SRE体系中,有着更好、更准确的衡量标准 SLO(Service Level Objective)来界定“故障与否”。

而提到了SLO就不得不提其相关的 SLI 先。

什么是SLI

建设监控系统的同学会知道,监控中对目标对象进行监控时会有大量的指标,但是很多指标的作用估计微乎其微。

而通过遵循以下两个原则从中脱颖而出让其作用发光发热的指标就是SLI。

  1. 能标识目标对象是否稳定

  2. 与用户体验强相关或用户可以明显感知的

所以SLI更能表达出“目标对象稳不稳定”。

VALET选择法

挑选SLI时,很多同学估计会有点摸不着头脑,毕竟仅有原则也很难辨别。

业界也深知这个问题,所以也有一套VALET选择方法依据指标的特质进行分类甄别,指标分类如下所示

图片

通过以上类别可以快速区分出SLI,在实际使用场景上是一个非常实用的技巧。

但是这里免不了的就是人工介入,无论是对现有指标的筛选,还是未来接入指标的筛选。

什么是SLO

好,从SLI可以表达“目标对象稳不稳定“这点,我们就可以让SLI + 目标 + 时间维度就能更精确的表达稳定性现状

比如 1个小时内 90% 时延 <= 80ms

而其就是SLO。

如果以上例子值高于80ms时,就已经代表该SLO已经不达标了,有可能发生故障了。

但是会发现简单的将单独SLO作为“稳定性”的判断标准,未免会陷入到监控领域类似的告警风暴和误报这种困境中。

而现实中衡量业务稳定性时,我们通常会通过多个不同的判断标准和依据来决定业务是否故障。

所以我们也可以通过组合多个SLO,采用与运算的方式,来更加精确的表达业务的稳定性

公式如:Availability = SLO1 & SLO2 & SLO3

所以得所有的 SLO 都达成才能算是达标!

而简单来说SLO的出现让业务的稳定性表达的更加精确、可靠。

关于时间维度

SLO中的时间维度可以分成持续时间和周期,用来覆盖以下两种场景

  1. 时间维度:从故障角度评估

  2. 请求维度:从成功请求占比评估

时间维度:从故障角度评估

这里可以理解为从SLI已经达不到所设阈值已经持续多长时间的角度,来界定这个SLO是否异常了。

比如设定1分钟内请求成功率低于95%持续10分钟就是异常,但是这样的方式在时间细粒度上并不精细,比如出现1分钟内请求成功频率多发低于95%,但并没有持续10分钟,这样其实算是有异常的需要关注的,所以可以利用请求维度进行补充。

请求维度:从成功请求占比评估

这里可以理解为在统计周期内SLI是否低于所设阈值,来界定SLO是否异常,比如1天内请求成功率低于95%就是异常。

这种方式有效的补充了时间维度的不足,通常就是相辅相成的存在。

关于SLO与可用性

可用性通常认识就是几个9,比如 4个9、3个9

但是可用性一直被人诟病的是其数据的准确率问题,而通过SLO组合计算的方式来表达可用性可以保证准确率问题。

因为其底层基础就是可表达目标对象是否稳定的SLI + 根据业务特征调整的目标 + 根据业务调整的时间。

通过不断的调整优化改进,可用性的准确率就会持续提升,而且更加贴近业务表现。

关于SLO与故障

从上述表达,SLO可以有效的表达稳定性是否达标,所以通过SLO去设置告警可以有效的告知系统是否处于故障中。

当然通过多个SLO组合后的SLO的告警会更为稳妥。

因为这样不止可以达到告警收敛的效果,也可以让告警更加精确有效,防止狼来了现象。

从这点出发,接下来会介绍的一种量化SLO的数据ErrorBudget更加将这个优势发挥的更加出色

指导工作的量化数据:ErrorBudget

当我们设定好SLO,但是该怎么开展具体工作呢?这时候就没那么直观,所以我们需要有个可量化的数据,可以用于提醒并观测SLO的情况。而SRE中通过反向推导SLO的方式,得出一个量化数据 ErrorBudget(错误预算)就能达到这个效果。

什么是ErrorBudget

ErrorBudget,错误预算,可以直白的理解其为“提示你还有多少次犯错的机会”。

比如 4周为一周期,应用的请求次数是 4,653,680,反向推导以下SLO得出 ErrorBudget 如下:

图片

这样可以将数据转换成计分的形式,更加直观而且感官冲击力更加强。

所以我们可以通过应用 ErrorBudget 进行数据的归一化 的方式,更好的来推进稳定性目标的达成。

消费 ErrorBudget 数据

稳定性燃尽图

利用ErrorBudget计分形式,使用柱状图形式图表实时展示其状态,当然得设定一个周期建议为4个自然周,周期后数据恢复。

对于特殊的场景,可以适当增大ErrorBudget,可以让其场景合理化,但是还是具体情况具体分析。

故障定级

利用ErrorBudget归一化成次数时,可以利用其消耗数百分比来制定故障等级,这样所有不同的SLO都可以利用同一份规则去做故障定级,达到统一规范的目的。

一般故障等级都会分成P0~P4五个级别,0为最高。

常见的故障等级设定如下:

图片

比如 ErrorBudget为25000,问题产生错误请求超过5000,也就是消耗20%以上既可以定级为P2级以此类推。

具体的等级设定需要根据业务的情况和容忍度去制定。

稳定性共识机制

驾照记分制想必大家都不陌生,在等你发现计分剩下1分时,你开车就会非常的小心,避免犯规导致再教育或驾照吊销。

所以你会发现ErrorBudget也是如此,一旦剩余的数量不多时,你会提高警惕,制定相应的行动措施,来避免稳定性目标SLO不达标。

而如何制定行动措施呢?可以考虑以下两个原则:

1.当剩余预算充足或未消耗之前,对问题的发生要有容忍度

在日常我们会遇到网络抖动或设备瞬时切换导致了极短暂系统不稳定, 这时有极少一部分客户反馈或业务使用时遇到了,结果就被投诉业务不稳定,然后技术人员就立刻放下手头工作去排查问题,后续还要花大量的时间去复盘总结和汇报。

这样消耗了技术人员大量的时间和精力,排查结果对业务没什么大帮助,这样导致的结果会有技术人员手头工作无法完成,也浪费了其他协助人员的时间。

总体来说性价比不高,而且是一个涟漪的扩散影响,这种事情一多了,估计就会引发”海啸“了吧!

现在有了SLO和错误预算判断标准,就有了明确的应对思路:如果预算充足就应该有所容忍不应该被投诉,也不应该高优先级响应。

2.当剩余预算消耗过快或即将消耗完之前,SRE有权中止和拒绝任何线上变更

这种情形下,可以理解成一个带病的工程师,还在坚持上班工作,但是这时他的工作完成的并不理想,而且有可能会直接倒下的风险

你还忍心给他分配新的任务或让他继续以这样的状态工作下去嘛?

这时应该让他恢复健康,才能继续好好的干下去!

从这点类比可看,团队应该是要优先配合解决影响稳定性的问题,直至问题解决,等到下个周期有了新的错误预算后再恢复正常的变更节奏。

注意要点

这两点其实是需要大家都要认可并执行的。因为这里涉及的是多方配合协作问题,有同样的共识才能保证工作协作上的流畅以及高效。

从多方协作这点出发看待,如果要推行该机制是需要”Top-DOwn“自上而下的,比如技术VP或CTO级别。

而且有问题时还可以逐步上升由CTO角度做决策。

基于错误预算的告警

在以往日常工作,经常会收到大量的告警短信,但是其价值非常低,导致的后果就是狼来了,大家都开始对告警产生了不信任。

其实这样的后果是非常严重的,因为极有可能有用的信息被淹没了,导致业务利益受损,多方担责。

当然业界也有解决方案,名为”告警收敛“

常用做法有让相同相似告警合并后在发送给通知人,比如同一集群、同一异常告警

但是这种做法也会充斥着很多信息,无法快速的定位到问题并处理,为什么这样说?

因为只是单纯的将信息合并了,信息量还是没有变化,除非是结合其他手段将信息再提炼计算合并,比如所谓的告警决策树,这样的话会更加精准。

但是这种建设的成本也不低,涉及到收敛的规则设计、对象逻辑层级设计、决策逻辑处理实现等。

而采用基于错误预算告警的方式就能天然的做到告警收敛,因为他是基于业务的SLO的

这也表明我们只关注对稳定性造成影响的告警,而这类告警的出现我们是必须快速响应处理,而且这种告警数量不多

达到收敛效果的同时又非常精准。

简单做法就是将故障定级的阈值进行告警设置,更详细精准的做法会涉及到AIOps领域相关的。

限于篇幅,本文为节选,更多请看原文。


来源:https://segmentfault.com/a/1190000022629410

这篇关于传统运维将消失?体系化的 SRE 可靠性与连续性保障,了解一下?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/375290

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

【服务器运维】CentOS6 minimal 离线安装MySQL5.7

1.准备安装包(版本因人而异,所以下面的命令中版本省略,实际操作中用Tab自动补全就好了) cloog-ppl-0.15.7-1.2.el6.x86_64.rpmcpp-4.4.7-23.el6.x86_64.rpmgcc-4.4.7-23.el6.x86_64.rpmgcc-c++-4.4.7-23.el6.x86_64.rpmglibc-2.12-1.212.el6.x86_64.r

【服务器运维】CentOS7 minimal 离线安装 gcc perl vmware-tools

0. 本机在有网的情况下,下载CentOS镜像 https://www.centos.org/download/ 1. 取出rpm 有的情况可能不需要net-tools,但是如果出现跟ifconfig相关的错误,就把它安装上。另外如果不想升级内核版本的话,就找对应内核版本的rpm版本安装 perl-Time-Local-1.2300-2.el7.noarch.rpmperl-Tim

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了@ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 @ControllerAdvice,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重复,提升代码的可维护性。 定义如下 /*** Specialization of {@link Component @

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器,它是Apache基金会的Jakarta 项目中的一个核心项目,由Apache, Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 在Tomcat中,应用程序的成部署很简

服务器监控:运维行业的核心保障与第三方监控软件的选择

随着信息技术的飞速发展,企业IT架构日益复杂,服务器作为整个IT系统的核心,其稳定性和性能对业务的连续性至关重要。在运维行业中,服务器监控作为保障服务器稳定运行的关键环节,已经受到了越来越多企业的重视。本文将探讨服务器监控的重要性、挑战以及选择第三方监控软件的原因,并推荐一款优秀的服务器监控软件——监控易。 一、服务器监控的重要性     服务器监控是指对服务器硬件、操作系统、应用程序

等保测评:全面保障信息系统安全的必要举措

等保测评(信息安全等级保护测评)是评估信息系统安全等级的重要过程,旨在确保信息系统能够抵御各种安全威胁,保障信息的机密性、完整性和可用性。以下是一篇关于等保测评的文章,内容清晰、分点表示,并参考了相关数字和信息。 一、引言 随着信息技术的快速发展,信息系统在各行各业中的应用越来越广泛,但同时也面临着日益严峻的安全威胁。为了保障信息系统的安全,我国实施了信息安全等级保护制度,要求对信息系统进行等

windows桌面运维---第八天

1、如何判断环路: 1、执行ping命令:网络测试时发现丢包严重,可能是环路引起的 2、监控MAC地址漂移:频繁的MAC漂移是环路的一个迹象。 3、通过display interface brief | include up命令,查看所有UP接口下的流量 2、如何释放和更新PC上的IP地址: 先释放现有IP,在CMD命令行输入“ipconfig/release”。 获取新IP,还是在

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续拓展(优先级机制) 更新机制的组成部分 代表更新的数据结构 Update消费update的数据结构——Up