左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

17 | 故障处理最佳实践:应对故障

陈皓 2017-11-28
或多或少我们都会经历线上的故障。在我的职业生涯中,就经历过很多的线上故障。老实说,线上故障是我们技术人员成长中必须要经历的事。从故障中我们可以吸取到很多教训,也能让我们学到很多书本上学不到的知识。坑踩多了,我们会变得越来越有经验,也就成为老司机了。
不过,我看到很多公司处理线上故障的方式并不科学,而且存在很多问题,所以,今天这篇文章就来分享一些我的经验。这些经验主要来自亚马逊和阿里这两家互联网公司,以及我个人的经验总结。希望这套方法能够对你有帮助。

故障发生时

在故障发生时,最重要的是快速恢复故障。而快速恢复故障的前提是快速定位故障源。因为在很多分布式系统中,一旦发生故障就会出现“多米诺骨牌效应”。也就是说,系统会随着一个故障开始一点一点地波及到其它系统,而且这个过程可能会很快。一旦很多系统都在报警,要想快速定位到故障源就不是一件简单的事了。
在亚马逊内部,每个开发团队至少都会有一位 oncall 的工程师。在 oncall 的时候,工程师要专心处理线上故障,轮换周期为每人一周。一旦发生比较大的故障,比如,S1 全部不可用,或 S2 某功能不可用,而且找不到替代方案,那么这个故障就会被提交到一个工单系统里。几乎所有相关团队 oncall 的工程师都会被叫到线上处理问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(25)

  • 左耳朵 置顶
    自动地图生成一般用APM式的系统。开源的可以看看zipkin
    2017-12-05
    53
  • kimi
    2013 年,应该是 8 月吧,和耗子哥一起处理巨石塔上千台服务器宕机的故障,搞到凌晨三四点
    2017-12-02
    1
    71
  • ibrothergang
    “请你来聊聊,你所经历过的线上故障,以及有哪些比较好的故障处理方法。”

    我是一名移动端开发的工程师。移动端的开发工作和前端(线上环境)开发还是有一点区别的。移动端的开发一般在上线前会做测试,严重的问题一般在测试过程就解决了,很少情况发版后出现大面积的奔溃情况。但是线上环境不一样,线上环境发版的周期会大大短于客户端,很多的活动都会频繁的上线和下线。影响的范围也大于移动端。

    遇到过最严重的一次事故是由于服务端的修改引起了移动端的奔溃。而且这个奔溃发生在 app 启动的时候。也就是说用户点了应用图标,起来马上就又闪退了。当时的 app 设计是起来后会去请求服务端的相关配置信息,相信很多的 app 也是这么做的。造成这个故障的原因是由于 app 对异常的处理不够完备,服务器端又恰巧修改了配置数据,导致 app 端拿到了一个引起奔溃的数据结果。后来因为是上班时间,发现问题后大家都在,及时恢复了服务端数据,遏制了事态的进一步发展,但是已经出现奔溃的用户由于在重新请求服务端数据前就奔溃了,只能通过发布新版本解决这个问题。

    一旦服务端和移动端相互影响(往往是服务端影响移动端)引起的奔溃,往往是比较严重的,很多时候不得不通过发布新版本才能解决问题。所以移动端一定要做好服务端的异常处理。
    2017-11-28
    1
    32
  • 金胖子
    最典型的一次,项目组成员在测试版本中加了sleep来debug,结果上线的时候就把版本发布到生产,直接影响我第二天下午没能去看变形金刚
    2018-02-02
    20
  • xpisme
    代码逻辑错误,导致查看分享的人能看到分享者所有信息,记录的上一个人的cookie.

    Session存储在redis, flush db。所有用户重新登陆
    2018-06-25
    6
  • paul.yang
    耗子叔,我是个自学转行做后端的程序员。最近在日活快接近2亿的一个后端团队里面犯了个错误导致某一个功能20分钟不可用,受到了打击,我微博给你留了言,希望能跟你交流下,寻求指导帮助。希望你能看到我的微博留言,呵呵的卫国杨

    作者回复: 微博回了

    2018-07-21
    4
  • Link
    楼上的,类似工具:鹰眼,watchMan,京东的CallGraph
    2018-05-10
    2
    4
  • 小桥流水
    自动生成地图那是有什么工具推荐的吗?
    2017-11-30
    1
    4
  • 故障前的准备工作:
    以用户功能为索引的服务和资源的全视图。
    在地图中设置关键指标,以及运维流程和方案。
    设定故障等级。
    故障演练。
    2018-07-08
    2
  • 林子
    自动生成地图那是有什么工具推荐的吗?同问耗子哥
    2017-12-01
    2
  • 小沫
    之前有一次线上系统出现故障,导致工单无法处理。原因是北向接口服务出现故障,定位起来不太方便。因为接口为集群部署(使用F5)当时没有好的运维工具,只能模拟请求接口,经过一轮验证后才发现接口故障点。想问下耗子叔,对于你文章中说的自动生成地图那是有什么工具推荐的吗?
    2017-11-28
    2
  • edisonhuang
    故障应对方法,分别包括故障发生时的恢复措施,自己故障发生前可做的准备。
    故障发生时最重要的是限制故障影响的范围,尽最大可能保障服务的可用性,包括转发和限流,回滚,降级,服务重启,紧急更新,紧急发布等。
    故障发生前应做好防范,需要以用户功能为索引建立全站服务和资源的地图,利用地图为各个服务生成关键性指标,并建立一套自动化运维的方案和工具。为故障设立等级,知道故障时我在哪,严重程度,进行必要的故障演练,做灰度发布等
    2019-05-28
    1
  • 西北偏北
    凡事预则立,故障诊断和处理不是依赖人员的瞎猜,盲查,而是要在故障前就想好对应的预案,基础系统的研发支持,日志埋点等等。毕竟线上不方便像本地一样debug
    2019-05-10
    1
  • KaitoShy
    遇到的故障还是蛮多的,由于网站是PHP在请求过密的时候,出现502
    2019-03-02
    1
  • Eleven
    故障发生时,我们公司一般按照顺序:重启和限流、紧急更新、版本回退、服务降级.
    2019-02-19
    1
  • Geek_fb3db2
    咨询下耗子叔 文章提到的降级限流有没有有什么成熟的解决方案 目前项目中领导提到了 但是不知道如何做
    2018-11-13
    1
  • 永立
    技术不太够,这章很多内容看的不是很懂。
    2018-09-11
    1
  • 山哥
    大佬,CMDB的服务视图能发出来看下?
    2018-07-21
    1
  • 出现故障时,最重要的不是 debug 故障,而是尽可能地减少故障的影响范围,并尽可能快地修复问题。
    2018-07-08
    1
  • KingPoker
    去年生产遇到不少问题,处理了几次,越来越有思路。
    文章提到的各种工程化的管理,还需要很长的路
    2018-06-17
    1
收起评论
25
返回
顶部