导读:运用结构化思维进行故障处理,其目的是为了将故障应急操作标准化,进而提升处理效率。
近期收到朋友赠送的一本书—《深入浅出MySQL》。闲暇之余,阅读了部分章节,书中针对故障处理一节,给我印象颇深。书中提炼出的一些方法论,正是我之前在团队中推广的方法。其目的是为了将故障应急操作标准化,进而提升处理效率。推而广之,这其实是一种结构化思维在具体工作中的体现。而这种思想在某具体工作、乃至个人、团队发展等,均可发挥重要作用。特写下此文。
一、故障处理流程
1.1 示例:数据库故障处理
下面是来自网易的一些经验,整理自《深入浅出MySQL》一书。
1.1.1 事前:故障处理原则
1)沟通
在数据库出现故障时,务必和运维、开发、产品等其他团队保持高效沟通。DBA在遇到故障时,一定不要忘了沟通的重要性,即使时间紧迫,简要的沟通往往也能带来事半功倍的效果。从长远来看,也有利于培养和其他人、其他团队之间的合作和信任关系。
2)关注人为
人为故障占有不小的比例。要通过及时沟通并查看历史记录,确认操作是否有误、要和其他团队沟通是否有特殊操作。当然,解决人为故障好的方法还是将数据库运维自动化、标准化、规范化。
3)快速恢复
在处理故障的时候,要明确的一个思路是要优先恢复服务,确保服务的大可用性,其他的不一定要优先考虑。
4)三思后行
有些故障处理方式,可能对数据库造成难以恢复的影响,务必慎重,并尽量做好备份。对于操作本身不熟悉带来额外的问题,要尽量避免。认真考虑命令可能带来的后果,避免对系统造成二次伤害。
5)服务分级
平时应当对服务、应用、数据库做好分级,一旦出现大面积故障,可以按照服务的优先级来恢复核心业务。
1.1.2 事中:故障处理流程
1)故障发现
OS指标
负载
CPU使用率
磁盘空间
IO使用率
SWAP使用情况
DB指标
数据库存活
连接数
慢SQL
主从延迟
2)故障定位
检查操作
程序发布
在线表变更
在线数据修改
后台任务、数据统计
数据库参数调整
其他误操作
检查OS
系统进程
CPU
内存、SWAP
IO
系统日志
检查DB
连接
慢查询
锁等待
QPS
错误日志
1.1.3 事后:故障解决方法
1)慢SQL
选择条件上没有索引或者索引效率低。
有索引,但没有用到索引,或者选择了错误的索引。
过滤条件不强,结果集太大。
2)SQL执行频率高
恶意攻击
缓存失效
应用实现逻辑不合理
业务量突增
3)锁冲突
大事务
热点问题
4)硬件问题
RAID卡缓存问题
硬件损坏
5)参数不合理
1.2 示例:GP数据库异常处理(我的经验)
下面是我在之前单位总结的,针对GP的异常处理流程。图中的【】部分对应具体的处理步骤(对应脚本或操作文档)。
从上述两个示例可以看出,这是一种"统筹式"的工作方式,而非"应急式"的。它强调的是在出现故障后,按照规划好的原则、步骤进行分析排查,找出核心问题;然后针对既有问题,再按照已有的相关预案进行处理。同时在处理过程中,注意规避风险及沟通协调,以期达到故障的快速解决。 显然这种方式,代表着一种对工作的前瞻力,防患于未然;避免了那种忙于救火,使工作永远处于被动之中。上述其实就是一种"结构化思维"的体现。
二、结构化思维
2.1 什么是"结构化思维"?
思考的时候没有逻辑,大多数时候不知道从哪里下手。
讲话时没有条理,费很多口舌却很难把事说清楚。
处理问题时效率低,东捡西漏,忙得团团转效果却不佳。
当你面临上述窘境时,正是可以考虑训练自己的结构化思维来解决。
结构化思维:是指一个人在面对工作任务或者难题时能从多个侧面进行思考,深刻分析导致问题出现的原因,系统制定行动方案,并采取恰当的手段使工作得以高效率开展,取得高绩效。当你这样做事的时候,你就拥有了结构化思维,这将对你的职场晋升起到巨大的帮助作用。思维决定发展,思维层面不同导致结果不同。简言之,结构化思维指从整体思考到局部,是一种层级分明的思考模式。就是借用一些思维框架来辅助思考,将碎片化的信息进行系统化的思考和处理,从而扩大思维的层次,更全面地思考。
2.2 结构化思维方法
如何进行结构化思考呢,也是有方法论的,总的来说是有两个步骤,首先是“建立中心”,然后再进行“分解”。
1)建立中心
建立中心也就是要定义清楚要解决的问题,要明确目标,也是一种以终为始的思考方式。也就是说,首先要搞清楚why,然后再进行how。建立中心有两种方式:自上而下、自下而上。后面我们会详细说明。
建立中心通常不会是一次成型的,随着对问题理解的变化,对中心的抽象也会进行相应的调整。不同的抽象层次其面对的问题宽度是不一样的。具体要用哪个层次的抽象作为“中心”,要视具体情况而定。抽象层次越高,要解决的问题域就越宽,外延越大。比如面对“系统 bug 多”的问题,向上抽象是“提升代码质量”,向下抽象是“加强测试”,都可以作为中心,选择哪个为中心取决于你当前要解决的问题是什么。
2)结构化分解
使用结构化的思维对问题进行分解。分解策略就是常见的四种逻辑顺序,即演绎顺序、时间顺序、空间顺序和程度顺序。
3)逻辑顺序
下面配图为XMind工具的对应图例。
演绎(因果)顺序
“大前提、小前提、结论”的演绎推理方式就是演绎顺序。比如,经典三段论:所有人都要死,苏格拉底是人,苏格拉底要死。
时间(步骤)顺序
“、第二、第三”,“首先、然后、再者”等,很多的时间顺序同时也是因果顺序。
空间(结构)顺序
“前端、后端、数据”,“波士顿、纽约、华盛顿”,化整为零(将整体分解为部分)等都是空间顺序。在做空间分解的时候,要注意满足 MECE(Mutually Exclusive Collectively Exhaustive,相互独立,完全穷尽)原则。
程度(重要性)顺序
比如“重要、次重要、不重要”等。
2.3 "自上而下"的思考
自上而下的思考,适用于问题比较明确的情况,我们只需要找到问题的核心要素即可,然后进行展开即可。这就是一个非常典型的总分结构化思维的思考方式。先总结,后发散。用这种方式思考,有助于形成、整理和构造思维导图,从而促进大脑自然有序地思考,从而让你更全面地去分析一个问题。下面介绍几种常见的自上而下的思考模型:
1)STAR法则
Situation 背景
Target 目标
Action 行动
Result 结果
2)SWOT 分析方法
Strengths 优势
Weaknesses 劣势
Opportunities 机会
Threats威胁
3)问题解决
分析问题>找到原因>设置目标>提出解决方案>实施
2.4 "自下而上"的思考
对于问题不够明确的情况,需要对多种杂乱的内容,进行分类、剪枝、归纳汇总成一个中心。根据《金字塔原理》“任何事情都可以归纳出中心论点,中心论点可由三至七个论据支撑,每个一级论点可以衍生出其他的分论点。”如此发散开来,就可以形成以下的金字塔结构思考方式。
但是在还没有掌握这种结构化思维方式时,直接用这种思考方式是有一定难度的。这时候我们就可以采用自下而上的思考方式去找结构。
尽可能列出所有思考的要点
找出关系,进行分类
总结概括要点,提炼观点
观点补充,完善思路
总结下就是:先发散,后总结。用这种方式思考,不仅更容易找到逻辑结构,也更容易培养你的结构化思维。举个例子,当我们面临职业发展选择时,如何总结提炼出自己的决策。
2.5 增强 — 扩展性思维
扩展性思维的核心目标是提升思维的广度,可以有三种扩展方向:
举一反三:解决同类型的N个问题
这种思维方式的特征是举一反三,触类旁通,相当于产生批处理的效果,可以大大提升解决问题的效率,避免重复处理。
寻求可能性:拓展解决问题的不同手段
拓展思维常见的手段是:是否能够换更多的理解方式,或者更多的解法。
深挖根源:挖掘问题深层次原因
这种思维方式是要突破现有问题的表面化解决,而是需要深挖原因,探究根本问题。只有这样才能从根本上解决问题。
2.6 示例:我的一次故障经历(深挖原因)
写在后
思维方式有很多种,你可以在实际工作中,尝试使用上面的方法。坚持一段时间后,你会发现想问题时更有逻辑性,说话也更有条理更有说服力。不仅如此,你还可以用这种结构化的思维,去搭建和构造自己的思维体系。
作者:韩锋
于作者个人公号《韩锋频道》。
来源:宜信技术学院