一文吃透SRE故障预案6把刀2.0

原文

一文吃透SRE故障预案6把刀2.0

故障处理trouble shooting是每个SRE要做的日常,特别是处在快速成长期的大型互联网系统,模块多、变更多、访问量大、用户环境复杂,不就是这坏就是那坏,SRE就像一个医师,需要在故障时协同研发动各种手术去修复系统,常用的修复的方法一般会提前梳理准备好,我们称作预案。

经过无数次的故障处理,发觉是有一些不变的套路的,每次故障处理基本都是围绕这几个套路在做排列组合,其中最常用的6个,我把他总结出来,江湖就俗称“6把刀”吧。

img

第一刀——重启

无敌的“重启大法”,电子产品的修理秘术,同样也适应互联网服务,没有什么是用“重启大法”解决不了的,如果重启一次不行,那就两次,经过无数次实践证明,绝大多数问题确实可以通过重启短暂解决。

所以,故障来的时候,先把理性分析放一边,重启一下试试嘛!!

当然,重启也是有套路的,例如是一台一台还是瞬时批量?还有一些服务是不能重启的,有状态、又有状态存储,一重启数据就丢失,进而可能造成整个系统雪崩,坑死人不偿命,所以,哪些可以重启,还是要和研发提前达成一致。

总之,重启是最廉价的服务恢复手段,是付出成本最低的预案,故障来了,这第一刀,要先想到它。

PS 重启的本质是初始化,从健康的初始状态重新来一遍。

第二刀——回滚

第一刀下去如果没奏效,那就要考虑第二刀了,故障不是无缘无故就生发了,很多发生都是由于变化,其中最常见的变化就是变更,从每年的故障数据看,大量的变更类故障,这第二刀就是应对变更的——回滚!!

如果排查后,故障开始时间和变更时间基本一致,那就把理性分析放一边,先回滚吧!!

回滚相对于重启就重一些了,需要重新上线,也是最常用的故障预案,SRE一定要引导大家,不要试图想把原因在故障期间分析清楚了再操作。

PS 回滚的本质是回到上一个稳定的版本、健康的状态。

第三刀——扩容

第三刀看起来是处理容量类故障的,但其实不然,当简单的预案不能快速恢复业务,扩容同步做起来吧,经过小爱同学的无数次故障处理经验,故障处理的同时,一定要找同学同步扩容,而且有多少机器扩多少。

扩容这第三刀就更重了一些,需要投入新的机器资源,因为大型系统,但凡故障一定会带来用户请求的拥堵,进而流量堆积、抖动,所以哪怕从这个角度看,扩容也要先做起来,很多时候机器是解决问题最直接、成本最低的手段,不要讲那么多武德,每分每秒都很宝贵,理性分析等业务恢复了再说。

PS 故障期间扩容的本质是短暂提高系统的资源池,不能作为常态,代码或者架构烂不能一直堆机器。

第四刀——切流

第四把刀是切流,也是故障处理中最重要的一个招式,如果容灾、容量做的好,不用犹豫,第四刀是恢复故障最快的方式,do it!!

切流最常见的是机房和运营商的切换,这个操作最大的挑战是容量,最大的风险是流量切换后系统的雪崩,切换前我们要经常考虑的是,B机房的流量是否能承载线上所有的流量,回顾过去,都是惨痛的教训,本来还有一半的用户能够正常使用,结果流量切了后,整个系统雪崩了!!

所以说,要不要切、切哪些、切多少、怎么切是需要根据当时的客观情况,理性决策后再去执行的,我们故障处理的目标是止损,是两害相权取其轻,不能因为我们完美的想照顾每一个用户,反而把故障蔓延的更大。

第五刀——降级

这一刀是断臂求生、舍车保帅的功法。降级解释一下就是降低标准来服务,某些短时间修复不了的非核心功能,通过配置将其暂时下线,保障主干功能可以继续服务。

例如,有时候我们发现小爱同学的一根手指坏了,短时间无法修复,但身体其他器官都是健康的,按理小爱只是无法提供这根手指的服务,但在设计上由于小爱对这根手指采用完全依赖等待的机制,大量请求过来,不一会儿就传导到胳膊无法工作,进而躯干无法工作最终到小爱的脑死亡,造成了整个系统挂掉(雪崩)无法服务,这个时候就要果断的降级。

降级是迫不得已的一个手段,模块设计时做到解耦充分,故障期间可以用它来保命

第六刀——限流

这第六刀是一个辅助招式,可以和其他任何招式做排列组合,但绝对是不可或缺的。

要没有它,你会发现碰到流量突增类故障很难处理,特别是数据库被打挂了,基本上服务一恢复,瞬间就再被打垮,只有通过限流,让流量缓慢进来,才能让系统逐渐恢复,去年小爱的就近唤醒故障,还有今年MIoT碰到的好几次mysql故障,都是惨痛的教训。

解释一下,很多系统是可以承载1个亿的用户同时使用,但无法瞬间承载1亿的用户同时上线(逻辑和开销不一样),1个亿的用户同时上线不异于一次洪水攻击,只有让流量缓慢进来,系统才能接住,并维持高并发的QPS,维护过大型互联网系统的同学应该会有感触,每秒新建连用户数是一个很重要的指标,而且一般都会在这个环节做云置限速。

所以,如果系统用户量很大,而且是一个**“脆皮”**时,当有流量突增、抖动,为了损失降到最低,缩小故障恢复时间,先把限速开起来。

所谓道法自然而术变万千,每一个故障都是不一样的,而这六把刀可以组成无数个排列组合,应对不同的故障场景,所以作为一个SRE,还是需要对架构有深入的理解,才能在故障期间联合各方制定出最优的预案,快速恢复业务。

小爱故障预案示例

经过长期的实战,小爱的工程师总结出了一套故障处理的一般性预案流程,示意图如下,所有恢复操作都是来自原子预案“6把刀”招式的排列组合,真正做到招式变化万千、我自岿然不动

img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值