传统运维将消失?体系化的 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

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

【详细介绍一下GEE】

GEE(Google Earth Engine)是一个强大的云计算平台,它允许用户处理和分析大规模的地球科学数据集,如卫星图像、气候模型输出等。以下是对GEE用法的详细介绍: 一、平台访问与账户设置 访问GEE平台: 用户可以通过访问Google Earth Engine的官方网站来开始使用GEE。 创建账户: 用户需要注册并登录Google账户,然后申请访问GEE平台。申请过程可能需要提

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价