分布式服务架构- Java服务的线上应急和技术攻关

6.1 海恩法则和墨菲定律

海恩法则

  • 每一起严重事故的背后,必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。

墨菲定律

  • 需要我们对线上服务产生的任何征兆,哪怕是一个小问题,也要刨根问底
  • 问一下:为什么发生?发生了怎么应对?怎么恢复?怎么避免?

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

6.2.1 应急目标

  • 快速恢复服务,避免或者减少故障造成的损失,避免或减少对客户的影响。

6.2.2 应急原则

  • 快速止损。
    应第一时间恢复系统,而不是彻底解决问题。
    有明显的资金损失时,要在第一时间升级。
  • 应急SOP
    快速启动应急过程和快速决策止损方案
  • 问题升级
    如果当前应急负责人在短时间内不能解决问题,则必须进行升级处理
  • 保留现场
    应急过程中,在不影响用户体验的前提下,要保留部分现场和数据

6.2.3 线上应急的方法和流程

  • 引言:总体目标是恢复问题
    在任何阶段首先想到的应该是恢复问题。
    恢复问题不一定能定位问题,也不一定有完美的解决方案,但这些都可以通过留底后续分析复盘。

  • 6个阶段
    发现问题、定位问题、解决问题、消除影响、回顾问题、避免措施

  • 1.发现问题
    通常通过自动化的 监控和报警 系统来实现。
    通常会对以下3个 层面进行监控:
    系统层面(cpu、io等)、
    应用层面(tp99响应时间、接口成功率等)、
    资源层面(DB、缓存、MQ等)

  • 2.定位问题
    常见的需要考虑的问题:
    问题系统最近是否进行了上线?
    依赖的系统最近是否有上线?
    业务最近是否有运营变动,业务量是否有波动?
    等等

  • 3.解决问题
    切记:在没有明确原因前,不要使用各种可能的办法来尝试修复问题,这样可能既没有解决问题,还会引出新的问题。

  • 4.消除影响
    除了技术、运营的修复外,还要想好 话术 来安抚客户。

  • 5.回顾问题

  • 6.避免措施

6.3 技术攻关的方法论

首先要考虑的3个问题

  • 最近是否有 变更、升级和上线?
  • 之前是否遇到过相同或者类似的问题?
  • 是否有相关领域的专家?如 安全 性能 数据库 大数据 业务

针对第 1 个问题

  • 上线过程中导致的问题占所有线上问题的 30% 以上
  • 要能够第一时间降级、回滚。每一次上线都要有回滚措施。

针对第 2 个问题

  • 沉淀SOP
  • 积累技术经验

6.6 JVM 提供的监控命令

  • jad
    反向编译

  • btrace

你可能感兴趣的:(分布式服务架构- Java服务的线上应急和技术攻关)