您的位置:首页 > 其它

线上服务应急攻关方法论

2020-01-11 08:02 253 查看


1

海恩法则和墨菲定律

海恩法则指出:
每一起严重事故的背后,必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。海恩法则强调两点:(1)事故的发生是量的积累的结果;(2)再好的技术,再完美的规章,在实际操作层面,也无法取代人自身的素质和责任心。根据海恩法则,一起重大事故发生之后,我们要在处理事故和解决问题的同事,还要及时的对同类问题的「事故征兆」和「事故苗头」进行排查并处理,以防止类似问题的再次发生,将问题在萌芽状态就将其解决掉,这可以作为互联网企业线上应急的指导思想。墨菲定律指出:如果有两种或者两种以上方式去做某件事情,而选择其中一种方式将导致灾难,则必定有人会做出这种选择。默认定律强调一下几点:(1)任何事情都没有表面看起来那么简单(2)所有事情的发展都会比你预计的时间长(3)会出错的事情总会出错(4)如果你担心某种情况会发生,那么它更有可能发生墨菲定律实际上是个心理学效应,如果你担心某种情况会发生,那么它发生的可能性很大,久而久之就一定会发生。墨菲定律给到我们技术人的警示:对生产环境发生的任何怪异现象和问题都不要轻视,对其背后产生的原因一定要彻查。海恩法则给到我们技术人的警示:任何生产环境的严重故障,背后都有很多次小问题的积累,积累到一定量级之后会导致质变,进而发生更严重的故障。所以,我们需要对线上服务,产生的任何问题征兆,不论问题大小,都要刨根问底,对任何问题都要持怀疑态度,问问自己「为什么会发生?发生的原因是什么?如何排查和解决?怎么快速恢复服务?如何避免?」等等。不能因为问题的现象不明显而忽略。2

线上应急的目标、原则、方法

线上应急的目标、原则、方法:

1、应急目标行动的方向在关键时间正确把握,在应急过程中不能偏离目标。生产环境发生故障,要快速优先想办法恢复服务,避免或减少因故障造成的损失,降低对用户的影响。2、应急原则对应应急原则总结如下:(1)第一时间恢复系统而不是彻底查找原因解决问题,快速止损。(2)有明显的资金损失时,要在第一时间升级,快速止损。该条用在金融领域尤为关键。(3)当前应急负责人若短时间内无法解决问题,必须升级处理。(4)应急过程中在不影响用户体验前提下,要保留部分现场和数据。便于恢复后定位分析问题原因。3、应急方法和流程线上应急必须有组织、有计划的进行。线上应急主要分为六个阶段:应急要有总体目标:尽快恢复问题,消除影响。不管应急的那个阶段,首要问题都是优先恢复系统问题,恢复问题不要求立马定位问题,也不一定有完美的解决方案。一般通过经验判断,启动线上的问题预处理方案等,达到快读恢复问题的目标。同时,要注意保留部分现场,便于事后定位解决并复盘问题。1、发现问题通常针对系统层面来说的,问题的发现一定是借助于系统的告警、自动化监控等机制来实现的,不能由用户、业务方来告诉通知你的系统出现问题了,如果这样,你的系统出现问题已经持续了一段时间了。监控层面,通常都是对系统层面、应用层面、资源层面进行监控。对系统层面的监控包括:系统的CPU利用率、系统负载、内存是会用情况、网络IO负载、磁盘负载、I/O等待、交换区的使用、线程数及打开的文件句柄数等进行监控,一旦超出阈值,就及时告警。对应用层面的监控包括对服务接口的响应时间、吞吐量、调用频次、接口成功率即接口的波动率进行监控。对资源层面的监控包括对数据库、缓存和消息队列的监控。我们通常会对数据库负载、慢SQL、连接数等进行监控;对缓存的连接数、占用内存、吞吐量、响应时间等进行监控;对消息队列的响应时间、吞吐量、负载、积压情况进行监控。2、定位问题首先要根据经验来分析 ,应急团队中有人对相应问题有经验,并确定能够通过某种手段来进行恢复,则应第一时间快速恢复,同时保留现场,然后定位问题。应急人员定位过程中可能需要与业务负责人、技术负责人、技术人员、运营和运维一起,对产生问题的原因进行快速分析。需要考虑如下问题:(1)问题系统最近是否进行了上线操作?(2)依赖的基础平台和资源是否进行了上线或者升级?(3)依赖的系统最近是否进行了上线?(4)运营是否在系统里面做过运营变更?(5)网络是否有波动,联系运维人员协助排查?(6)最近的业务访问量是否正常,是否有异常流量?(7)服务的适用房是否有促销活动?3、解决问题解决问题的阶段有时在应急处理中,有时在应急处理后。理想情况下,出现问题系统启动应急预案,每个系统会对各种问题设计止损、兜底、降级开关等策略。因此,发生严重问题先使用启用这些预案来恢复问题,之后再定位和解决问题。解决问题当然要以定位问题为基础,必须清楚的明确分析出问题的根本原因,再提出解决问题的有效方案,切记没有明确原因之前,不要使用各种可能方法来尝试修复问题,这样可能还没有解决当前问题,可能会引出了另外一个问题。4、消除影响解决问题时,某个问题可能还没有被解决就已恢复,无论在那种情况下都需要消除问题产生的影响。5、复盘问题消除问题后,需要应急团队与相关方回顾事故产生的原因、应急过程的合理性,对树立处理啊的问题提出整改措施,主要聚焦一下几个问题:(1)类似的问题还有哪些没有想到?(2)做了哪些事情,这个事故就不会发生了?(3)做了哪些事情,这个事故即使发生了也不会产生损失?(4)做了哪些事情,这个事故即使法神过来,也不会产生这么大的损失?当然,回顾事故目的不再犯类似的错误,而不是惩罚当事人。6、避免措施根据回顾问题提出的改进方案和避免措施,我们必须以正式的项目管理方式进行统一管理,如果有项目经理的角色,则将避免措施和改进措施一并交给项目经理去跟进;如果没有,则请建立一个改进措施和避免措施的跟进方案和机制,否则,久而久之,问题就被忽略了。3

技术攻关方法论技术攻关流程图: 技术攻关的目标是解决问题。从问题发生的环境和背景入手,优先考虑上述图中的提到的几个问题:1、最近是否有变更、升级或上线操作?优先考虑这一条,特别是上线完成后收到系统告警,用户反馈的相关问题及时关注,如果因上线导致出现的问题,要第一时间回滚处理,避免扩大影响。同时,建立健全上线流程和上线评审机制,每次上线都需要有快速回滚方案。2、之前是否有遇到过类似的问题?根据历史经验判断系统是否曾出现过相同或类似的问题,如果有解决类似的问题经验,可以参考快速的应用历史经验解决问题。要求每次故障后复盘并总结故障原因,并给出问题解决方案,积累到经验库。3、是否有相关领域的专家?遇到了更深层次的问题,比如遭遇DDOS攻击、性能扛不住、网络故障、使用的中间件频繁告警等。类似问题先求助相关领域专家,他们积累了更加丰富的经验,或能更深入了解原因并快速解决问题。以上流程仍然无法解决问题,就需要自己想办法做技术攻关了。对于任何问题的分析,需要从以下几个方面入手来分析:简称:5WWhen:什么时候出现的问题?What:什么出现了问题?Who:谁在什么时间里发现了问题?问题影响了谁?Where:哪里出现了问题?Why:为什么出现了问题?根据以上的分析,帮助你理清思路,初步对系统做判断,然后从这个系统的日志、数据、工具,并结合代码定位分析问题原因。这里也就体现了系统中日志的重要性,好的日志能协助快速而准确的定位问题。可以想办法「最小化复现」线上问题,最小化复现是问题产生时所依赖的组件最消化集合,容易搭建,减少了使用组件的范围,有助于迅速定位问题原因。如果能在一个可控的环境或者仿真环境上重现维内托,或者通过远程调试的手段也能协助定位问题。定位到问题原因后,要给出解决方案。评估解决方案对线上的影响,权衡利弊,选择最佳方案,并给出选择的原因。将问题解决方案报备给上级进行评审,评审通过后再实施。方案需要在开发环境和QA环境进行验证,不仅仅要验证方案所解决的问题,同时,还要避免对现有功能有所影响,因此可能还需要进一步回归验证。通过这样一系列技术攻关流程,可以保障技术攻关过程中得到完整、正确且高效的问题解决之道。参考:分布式服务架构、原理、设计与实战END

Java面试题专栏【30期】说一下HashMap的实现原理?
【29期】Java集合框架 10 连问,你有被问过吗?
【28期】ZooKeeper面试那些事儿
【27期】Dubbo面试八连问,这些你都能答上来吗?
【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?
【25期】这三道常见的面试题,你有被问过吗?
【24期】请你谈谈单例模式的优缺点,注意事项,使用场景
【23期】请你谈谈关于IO同步、异步、阻塞、非阻塞的区别
【22期】为什么需要消息队列?使用消息队列有什么好处?
【21期】你能说说Java中Comparable和Comparator的区别吗
欢迎长按下图关注公众号后端技术精选

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Java知音_ 博客专家 发布了137 篇原创文章 · 获赞 2966 · 访问量 36万+ 他的留言板 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: