FMEA介绍

定义

FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,本文采用“故障模式与影响分析”

历史

FMEA 最早是在美国军方开始应用的,20世纪40年代后期,美国空军正式采用了 FMEA

二十世纪60年代,在开发出将宇航员送上月球并安全返回地球的手段的同时,FMEA 得到了初步的推动和发展

二十世纪70年代后期,福特汽车公司在平托事件之后,出于安全和法规方面的考虑,在汽车行业采用了 FMEA

作用

FMEA 之所以能够在这些差异很大的领域都得到应用,根本原因在于FMEA 是一套分析和思考的方法,而不是某个领域的技能或者工具

FMEA 并不能指导我们如何做架构设计,而是当我们设计出一个架构后,再使用FMEA 对这个架构进行分析,看看架构是否还存在某些可用性的隐患

详解

Failure:假设系统某系组件或者模块出现故障

Mode:故障发生的方式、可能性

Effect:故障的影响

Analysis:分析系统的可能反应,以及如何改进

FMEA什么阶段应用

FMEA技巧

应用步骤

  1. 给出初始的架构设计图,一般是系统架构图和部署架构图
  2. 假设架构中某个Role发生故障,然后分析此故障对系统功能造成的影响
  3. 根据分析结果,判断架构是否需要进行优化

分析维度

业务功能 故障模式 故障影响 严重程度 故障原因 故障概率 风险程度 已有措施 规避措施 解决措施 后续规划
FMEA分析涉及的功能点 系统可能会出现什么样的故障 当发生故障模式中描述的故障时,业务功能具体会受到什么影响 故障对业务的影响程度 导致故障现象发生的原因,不同原因可能导致相同的故障 某个具体故障原因发生的概率 综合严重程度和故障概率来一起判断某个故障的最终等级 针对具体的故障原因,系统现在是否提供了某些措施应对 为了降低故障发生概率或者故障影响采取的一些措施 解决措施指为了能够解决问题而做的一些事情 系统的后续改进规划

不需要记住这11个维度,需要的时候直接用就行

详解

详解1

业务功能

用户角度划分的业务相关的功能点

从用户角度而不是系统角度

例如:对于一个用户管理系统,使用 FMEA 分析时 “登录”“注册”才是功能点,而用户管理系统中的数据库存储功能、Redis缓存功能不能作为 FMEA 分析的功能点

故障模式

系统会出现什么样的故障,包括故障点和故障形式

故障模式并不需要给出真正的故障原因,只需要假设出现某种故障现象即可

故障模式的描述要尽量精确,多使用量化描述,避免使用泛化的描述。例如,推荐使用“MySQL响应时间达到3秒”,而不是“MySQL 响应慢”

故障影响

故障发生后业务功能具体会受到什么影响

常见的影响有:功能点偶尔不可用、功能点完全不可用、部分用户功能点不可用、功能点响应缓慢、功能点出错等

故障影响也需要尽量准确描述。例如,推荐使用“20%的用户无法登录”,而不是“大部分用户无法登录”

详解2-严重程度

从业务角度看故障的影响程度

  1. 一般分为“致命/高/中/低/无”五个档次
  2. 严重程度按照这个公式进行评估:严重程度 = 功能点重要程度 × 故障影响范围 × 功能点受损程度。例如:登录功能比修改用户资料要重要得多,80%的用户比20%的用户范围更大,完全无法登录比登录缓慢要更严重
  3. 团队讨论确定,包括业务、开发、运维等一起讨论,但是要避免业务方有意无意夸大严重程度
  4. 如果争执不下,架构师拍板

详解3

故障原因

导致故障现象出现的原因

故障现象相同,对业务影响相同;故障原因不同,发生概率、检测手段、处理措施不同

例如:

  1. 发生概率:“MySQL bug”的概率要远远低于“没有索引”导致查询慢
  2. 检测手段:磁盘坏道导致 MySQL 响应慢和慢查询的检测手段不同
  3. 处理措施:磁盘坏道要换机器,慢查询要优化索引

故障概率

某个具体故障原因发生的概率

一般分为“高/中/低”三档即可,几个特别注意的现象:

  1. 硬件。硬件随着使用时间推移,故障概率会越来越高,例如,新的硬盘和3年的硬盘
  2. 开源系统。成熟的开源系统 bug 率低,版本3.0比版本0.3要成熟;已经有使用经验和第一次使用
  3. 自研系统。和开源系统类似,成熟的自研系统故障概率会低,而新开发的系统故障概率会高

风险程度

综合严重程度和故障概率来一起判断某个故障的最终等级

风险程度 = 严重程度 × 故障概率

某个故障影响非常严重,但其概率很低,最终来看风险程度就低

例如:“某个机房业务瘫痪”对业务影响是致命的,但如果故障原因是“地震”,如果机房在广州概率就很低,如果机房在东京,概率就高很多

详解4

已有措施

针对具体的故障原因,系统现在是否提供了某些措施来应对

常见措施有:

  1. 检测告警。检测故障并告警,系统自己不针对故障进行处理,需要人工干预
  2. 容错。检测到故障后,系统能够自行应对。例如:Hadoop集群
  3. 自恢复。检测到故障后,系统能够自己恢复。例如,踢出故障的容器节点,创建新的容器

规避措施

为了降低故障发生概率或者故障影响而采取的一些措施

可以是技术手段,也可以是管理手段

例如:

  1. 技术手段:为了避免新引入的 MongoDB 丢失数据,在 MySQL 中冗余一份
  2. 管理手段:为了降低磁盘坏道的概率,强制统一更换服务时间超过2年的磁盘

解决措施

为了能够解决问题而采取的一些措施

一般都是技术手段,例如:

  1. 为了解决密码暴力破解,增加密码重试次数限制
  2. 为了解决拖库导致数据泄露,将数据库中的敏感数据加密保存
  3. 为了解决非法访问,增加白名单控制

如果某个故障既可以采取规避措施,又可以采取解决措施,优先选择解决措施

详解5-后续规划

针对 FMEA 分析表格,查漏补缺,优化系统架构

具体步骤:

  1. 排序,按照风险程度的评估结果排序
  2. 制定改进方案
  3. 对改进后的方案重新应用 FMEA 评估

技巧:

  1. 技术手段、管理手段都可以
  2. 检测、规避、解决手段都可以
  3. 需要考虑成本

落地技巧

技巧 说明
抓住核心 优先针对核心场景进行分析
分工合作 可以安排给初级架构师或者高级开发人员,锻炼架构思维
适可而止 严重程度为高的必须解决,严重程度为中的做好检测和告警

如何用FMEA方法排除架构隐患相关推荐

  1. FMEA方法,排除架构可用性隐患的利器

    我在前面的专栏分析高可用复杂度的时候提出了一个问题:高可用和高性能哪个更复杂,大部分同学都分析出了正确的答案:高可用更复杂一些,主要原因在于异常的场景很多,只要有一个场景遗漏,架构设计就存在可用性隐患 ...

  2. 5.23FMEA方法,排除架构可用性隐患的利器

    date comments categories tags permalink title 2020/3/30 true 软件架构 架构 FMEA 5.23 FMEA方法,排除架构可用性隐患的利器 高 ...

  3. python udp_如何用python方法检测UDP端口

    如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用.网上搜索了一圈后,我得到的个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务. 那么如何 ...

  4. 精彩演讲推荐|智能化变更防控方法、架构与组织实践

    CSDI summit中国软件研发管理行业技术峰会(Software development management industry technology summit)由国内专业咨询机构百林哲匠心打 ...

  5. 国考省考行测:标题选择题,仍然是考主旨,借助关联词、主体、结构、或对策分析法找正确的标题,通过偏颇,片面,无关,过重,空泛的方法排除错误选项

    国考省考行测:标题选择题,仍然是考主旨,借助关联词.主体.结构.或对策分析法找正确的标题,通过偏颇,片面,无关,过重,空泛的方法排除错误选项 2022找工作是学历.能力和运气的超强结合体! 公务员特招 ...

  6. YYCache 源码解析(一):使用方法,架构与内存缓存的设计

    YYCache是国内开发者ibireme开源的一个线程安全的高性能缓存组件,代码风格简洁清晰,阅读它的源码有助于建立比较完整的缓存设计的思路,同时也能巩固一下双向链表,线程锁,数据库操作相关的知识. ...

  7. 面试题之发散思维能力:如何用非常规方法求1+2+···+n

    今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家.   题目:求1+2+···+n,要 ...

  8. 线程同步有几种方法_架构师面试必问的多线程状态切换及常用方法

    架构师面试必问的多线程状态切换及常用方法 一.问题背景 Java架构师面试中,多线程状态切换及常用方法几乎是必问的,要掌握创建多线程的方式和方法. 二.创建多线程的几种方式 2.1方式一继承Threa ...

  9. 用c语言写代码_教你如何用android mvp分层架构优雅写代码

    背景 看了好多android技术博客,写android分层架构的博客越来越多,有mvc.mvp.mvvm.clean等各式各样的,而mvp异常火热,然而每个人对mvp的定义又是不同,写法自然也是千紫万 ...

最新文章

  1. html 中ajax 请求没反应,ajax请求数据成功,页面的数据没有加载出来
  2. 小米电脑做开发java_JAVA学习系列之一-搭建开发环境
  3. 大体了解Android应用安装过程及原理
  4. JDK,JRE,JVM区别与联系
  5. 快递公司快递单号规律总结
  6. tomcat web.xml配置
  7. [蓝桥杯2016初赛]方格填数
  8. 面试题24 二叉搜索树的后序遍历序列
  9. 消息队列(5):RocketMQ
  10. JDK源码解析之java.util.ListIterator
  11. redis数据持久化到mysql_redis 数据持久化的几种方式
  12. php动态写入vue,Vue.js中使用动态组件的方法
  13. Firefox 的about:config
  14. 洛谷2863 [Usaco06JAN]牛的舞会
  15. MATLAB最新官方中文文档
  16. python 节假日_python获取全年节假日
  17. FTP上传文件与服务器的连接被重置,ftp 服务器连接被重置
  18. 什么是论文陈述?论文陈述怎么写?
  19. 8421码 BCD码
  20. Xposed FrameWork v89 安装

热门文章

  1. java泛型有什么用_什么叫泛型?有什么作用?
  2. JAVA - 使用Apache POI生成word(三)设置页边距
  3. JavaScript脚本语⾔基础语法笔记总结
  4. Linux下安装Go及环境配置
  5. 不会读代码的程序员,不是好厨师
  6. 海藻酸钠-peg-环糊精|alginate-peg-Cyclodextrin
  7. 优秀程序员应该具备哪些素质?
  8. 17种求三角形面积的公式,从平面到立体
  9. 如何阅读《数据库查询优化器的艺术:原理解析与SQL性能优化》
  10. 【CTF杂项】常见文件文件头文件尾格式总结及各类文件头