从零开始学架构——FMEA故障模式与影响分析

news2024/11/24 18:46:20

1 FMEA介绍

FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,专栏采用“故障模式与影响分析”,因为这个中文翻译更加符合可用性的语境。
FMEA 是一种在各行各业都有广泛应用的可用性分析方法,通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响。

FMEA 最早是在美国军方开始应用的,20 世纪 40 年代后期,美国空军正式采用了 FMEA。尽管最初是在军事领域建立的方法,但 FMEA 方法现在已广泛应用于各种各样的行业,包括半导体加工、餐饮服务、塑料制造、软件及医疗保健行业。FMEA 之所以能够在这些差异很大的领域都得到应用,根本原因在于 FMEA 是一套分析和思考的方法,而不是某个领域的技能或者工具。

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

2 FMEA 方法

在架构设计领域,FMEA 的具体分析方法是:

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

FMEA 分析的方法其实很简单,就是一个 FMEA 分析表,常见的 FMEA 分析表格包含下面部分。

2.1 功能点

当前的 FMEA 分析涉及的功能点,注意这里的“功能点”指的是从用户角度来看的,而不是从系统各个模块功能点划分来看的。例如,对于一个用户管理系统,使用 FMEA 分析时 “登录”“注册”才是功能点,而用户管理系统中的数据库存储功能、Redis 缓存功能不能作为 FMEA 分析的功能点。

2.2 故障模式

故障模式指的是系统会出现什么样的故障,包括故障点和故障形式。需要特别注意的是,这里的故障模式并不需要给出真正的故障原因,我们只需要假设出现某种故障现象即可,例如 MySQL 响应时间达到 3 秒。造成 MySQL 响应时间达到 3 秒可能的原因很多:磁盘坏道、慢查询、服务器到 MySQL 的连接网络故障、MySQL bug 等,我们并不需要在故障模式中一一列出来,而是在后面的“故障原因”一节中列出来。因为在实际应用过程中,不管哪种原因,只要现象是一样的,对业务的影响就是一样的。

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

2.3 故障影响

当发生故障模式中描述的故障时,功能点具体会受到什么影响。常见的影响有:功能点偶尔不可用、功能点完全不可用、部分用户功能点不可用、功能点响应缓慢、功能点出错等。

故障影响也需要尽量准确描述。例如,推荐使用“20% 的用户无法登录”,而不是“大部分用户无法登录”。要注意这里的数字不需要完全精确,比如 21.25% 这样的数据其实是没有必要的,我们只需要预估影响是 20% 还是 40%。

2.4 严重程度

严重程度指站在业务的角度故障的影响程度,一般分为“致命 / 高 / 中 / 低 / 无”五个档次。严重程度按照这个公式进行评估:严重程度 = 功能点重要程度 × 故障影响范围 × 功能点受损程度。同样以用户管理系统为例:登录功能比修改用户资料要重要得多,80% 的用户比 20% 的用户范围更大,完全无法登录比登录缓慢要更严重。因此我们可以得出如下故障模式的严重程度。

  • 致命:超过 70% 用户无法登录。
  • 高:超过 30% 的用户无法登录。
  • 中:所有用户登录时间超过 5 秒。
  • 低:10% 的用户登录时间超过 5 秒。
  • 中:所有用户都无法修改资料。
  • 低:20% 的用户无法修改头像。

对于某个故障的影响到底属于哪个档次,有时会出现一些争议。例如,“所有用户都无法修改资料”,有的人认为是高,有的人可能认为是中,这个没有绝对标准,一般建议相关人员讨论确定即可。也不建议花费太多时间争论,争执不下时架构师裁定即可。

2.5 故障原因

“故障模式”中只描述了故障的现象,并没有单独列出故障原因。主要原因在于不管什么故障原因,故障现象相同,对功能点的影响就相同。那为何这里还要单独将故障原因列出来呢?主要原因有这几个:

  1. 不同的故障原因发生概率不相同

例如,导致 MySQL 查询响应慢的原因可能是 MySQL bug,也可能是没有索引。很明显“MySQL bug”的概率要远远低于“没有索引”;而不同的概率又会影响我们具体如何应对这个故障。

  1. 不同的故障原因检测手段不一样

例如,磁盘坏道导致 MySQL 响应慢,那我们需要增加机器的磁盘坏道检查,这个检查很可能不是当前系统本身去做,而是另外运维专门的系统;如果是慢查询导致 MySQL 慢,那我们只需要配置 MySQL 的慢查询日志即可。

  1. 不同的故障原因的处理措施不一样

例如,如果是 MySQL bug,我们的应对措施只能是升级 MySQL 版本;如果是没有索引,我们的应对措施就是增加索引。

2.6 故障概率

这里的概率就是指某个具体故障原因发生的概率。例如,磁盘坏道的概率、MySQL bug 的概率、没有索引的概率。一般分为“高 / 中 / 低”三档即可,具体评估的时候需要有以下几点需要重点关注。

  1. 硬件

硬件随着使用时间推移,故障概率会越来越高。例如,新的硬盘坏道几率很低,但使用了 3 年的硬盘,坏道几率就会高很多。

  1. 开源系统

成熟的开源系统 bug 率低,刚发布的开源系统 bug 率相比会高一些;自己已经有使用经验的开源系统 bug 率会低,刚开始尝试使用的开源系统 bug 率会高。

  1. 自研系统

和开源系统类似,成熟的自研系统故障概率会低,而新开发的系统故障概率会高。

高中低是相对的,只是为了确定优先级以决定后续的资源投入,没有必要绝对量化,因为绝对量化是需要成本的,而且很多时候都没法量化。例如,XX 开源系统是 3 个月故障一次,还是 6 个月才故障一次,是无法评估的。

2.7 风险程度

风险程度就是综合严重程度和故障概率来一起判断某个故障的最终等级,风险程度 = 严重程度 × 故障概率。因此可能出现某个故障影响非常严重,但其概率很低,最终来看风险程度就低。“某个机房业务瘫痪”对业务影响是致命的,但如果故障原因是“地震”,那概率就很低。例如,广州的地震概率就很低,5 级以上地震的 20 世纪才 1 次(1940 年);如果故障的原因是“机房空调烧坏”,则概率就比地震高很多了,可能是 2 年 1 次;如果故障的原因是“系统所在机架掉电”,这个概率比机房空调又要高了,可能是 1 年 1 次。同样的故障影响,不同的故障原因有不同的概率,最终得到的风险级别就是不同的。

2.8 已有措施

针对具体的故障原因,系统现在是否提供了某些措施来应对,包括:检测告警、容错、自恢复等。

  1. 检测告警

最简单的措施就是检测故障,然后告警,系统自己不针对故障进行处理,需要人工干预。

  1. 容错

检测到故障后,系统能够通过备份手段应对。例如,MySQL 主备机,当业务服务器检测到主机无法连接后,自动连接备机读取数据。

  1. 自恢复

检测到故障后,系统能够自己恢复。例如,Hadoop 检测到某台机器故障后,能够将存储在这台机器的副本重新分配到其他机器。当然,这里的恢复主要还是指“业务”上的恢复,一般不太可能将真正的故障恢复。例如,Hadoop 不可能将产生了磁盘坏道的磁盘修复成没有坏道的磁盘。

2.9 规避措施

规避措施指为了降低故障发生概率而做的一些事情,可以是技术手段,也可以是管理手段。例如:

  1. 技术手段

为了避免新引入的 MongoDB 丢失数据,在 MySQL 中冗余一份。

  1. 管理手段

为了降低磁盘坏道的概率,强制统一更换服务时间超过 2 年的磁盘。

2.10 解决措施

解决措施指为了能够解决问题而做的一些事情,一般都是技术手段。例如:

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

一般来说,如果某个故障既可以采取规避措施,又可以采取解决措施,那么我们会优先选择解决措施,毕竟能解决问题当然是最好的。但很多时候有些问题是系统自己无法解决的,例如磁盘坏道、开源系统 bug,这类故障只能采取规避措施;系统能够自己解决的故障,大部分是和系统本身功能相关的。

2.11 后续规划

综合前面的分析,就可以看出哪些故障我们目前还缺乏对应的措施,哪些已有措施还不够,针对这些不足的地方,再结合风险程度进行排序,给出后续的改进规划。这些规划既可以是技术手段,也可以是管理手段;可以是规避措施,也可以是解决措施。同时需要考虑资源的投入情况,优先将风险程度高的系统隐患解决。

例如:

  • 地震导致机房业务中断:这个故障模式就无法解决,只能通过备份中心规避,尽量减少影响;而机柜断电导致机房业务中断:可以通过将业务机器分散在不同机柜来规避。

  • 敏感数据泄露:这个故障模式可以通过数据库加密的技术手段来解决。

  • MongoDB 断电丢数据:这个故障模式可以通过将数据冗余一份在 MySQL 中,在故障情况下重建数据来规避影响。

3 FMEA实战

下面以一个简单的样例来模拟一次FMEA分析。假设我们设计一个最简单的用户管理系统,包含登陆和注册两个功能,其初始架构是:
在这里插入图片描述
初始架构很简单:

  • MySQL 负责存储
  • Memcache 负责缓存
  • Server 负责业务处理

该架构通过FMEA分析后,能够有什么样的发现,下表是分析的样例。

功能点故障模式故障影响严重程度故障原因故障概率风险程度已有措施规避措施解决措施后续规划
登陆MySQL无法访问当MC中无缓存时,用户无法登陆,预计有60%的用户MySQL服务器断电增加备份MySQL
登陆MySQL无法访问同上Server到MySQL的网络连接中断MySQL双网卡连接
登陆MySQL响应时间超过5秒60%的用户登陆时间超5秒慢查询导致MySQL运行缓慢慢查询检测重启MySQL不需要
登陆Memcache无法访问所有用户都到MySQL查询信息,MySQL压力会增大,响应变慢低,虽然慢,但用户还是能够登录Memcache服务器断电Memcache集群
注册MySQL无法访问用户无法注册低,因为新注册的用户每天大约只有100个MySQL服务器断电无,因为即使增加备份机器,也无法作为主机写入
注册Memcache无法访问无影响,用户注册流程不需要MemcacheMemcache服务器断电不需要

经过上表的FMEA分析,将“后续规划”列的内容汇总一下,我们最终得到了下面几条需要改进的措施:

  • MySQL 增加备机。
  • Memcache 从单机扩展为集群。
  • MySQL双网卡连接。

改进后的架构如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高并发的程序设计-系统设计层面

高并发的程序设计-系统设计层面 目录概述需求: 设计思路实现思路分析1.主要指标二、处理高并发的方案 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better …

ChatGPT写文章效果-ChatGPT写文章原创

ChatGPT写作程序:让文案创作更轻松 在当前数字化的时代,营销推广离不开文案创作。然而,写作对许多人来说可能是一项耗时而枯燥的任务。如果您曾经为写出较高质量的文案而苦恼过,那么ChatGPT写作程序正是为您而设计的。 ChatGPT是…

gitlab安装与使用(图文详解超详细)

一 找最新的安装镜像 推荐用清华源 目前最新版本是15.95 二 在/opt 下创建gitlab文件夹 [rootlocalhost ~]# mkdir /opt/gitlab [rootlocalhost ~]# 三 在gitlab目录下写一个 shell脚本 vim int.sh给它加上执行权限 chmod ux int.sh运行这个脚本 ./ins.sh出现这个截图 安…

three.js之摄像机

本节将在上一节的基础上进一步介绍一下摄像机功能。 three.js的摄像机主要包括两类:正交投影摄像机和透视投影摄像机。 透视投影摄像机:THREE.PerspectiveCamera,最自然的视图,距离摄像机越远,它们就会被渲染得越小。…

【编程问题】解决 mapper.xml 文件的 resultType 爆红问题:Cannot resolve symbol ‘xxx‘

解决mapper.xml文件的resultType爆红问题:Cannot resolve symbol xxx 1.问题描述2.问题分析3.问题解决3.1 配置注解(推荐)3.2 配置全类名3.3 删除插件 4.事件感悟 系统:Win10 JDK:1.8.0_333 IDEA:2022.2.4 …

HCIP之MPLS中的VPN

目录 HCIP之MPLS中的VPN 定义 例图 解读 流程 双层标签技术 控制层面 数据层面 配置 HCIP之MPLS中的VPN 定义 VPN --- 虚拟网专用 --- 是一种运营商提供的,专门解决虚拟专线安全及宽带问题的综合解决方案 例图 解读 站点 --- 可以理…

Day936.如何重构过大类 -系统重构实战

如何重构过大类 Hi,我是阿昌,今天学习记录的是关于如何重构过大类的内容。 在过去的代码里一定会遇到一种典型的代码坏味道,那就是“过大类”。 在产品迭代的过程中,由于缺少规范和守护,单个类很容易急剧膨胀&#…

婴儿尿布台出口美国CPC认证

什么是尿布台?尿布台上架亚马逊要怎么做?咱们接着往下看。 什么是尿布台? 尿布台:尿布台是一种自立式抬升结构,通常设计用于承托体重不超过 13.61 千克(30 磅)的儿童。儿童采用平躺姿势&#…

Forest-声明式HTTP客户端框架-集成到SpringBoot实现调用第三方restful api并实现接口数据转换

场景 Forest 声明式HTTP客户端API框架,让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层, 是封装调用第三方restful api client接口的好帮手,是retrofit和feign之外另一个选择。 通过在接口上声明注解的方式配置HTTP请求接…

echarts中横坐标显示为time,使用手册

需求: 后端传递(两段数据,不同时间间隔)的24h实时数据,前端需要根据24小时时间展示,要求:x轴为0-24h,每个两小时一个刻度 误区: 刚开始通过二维数据的形式秒点&#xff…

Python入门到精通12天(迭代器与生成器)

迭代器与生成器 迭代器生成器 迭代器 迭代器是可迭代的对象,即可以进行遍历的对象。列表、字符串、元组、字典和集合这些都是可迭代的对象,都可以进行遍历。 迭代器是一种访问序列元素的方式,它可以通过next()函数逐个返回序列中的元素。并…

mybatis3源码篇(1)——构建流程

mybatis 版本:v3.3.0 文章目录 构建流程SqlSessionFactoryBuilderXMLConfigBuildertypeAliasesElementtypeHandlerElementmapperElementMapperRegistry MappedStatementMapperAnnotationBuilderXMLMapperBuilderMapperBuilderAssistant SqlSessionFactorySqlSession…

【录用案例】1区SCI仅36天录用,新增多本1-2区SCI,CNKI评职好刊发表案例

我处上周(2023年4月8日-2023年4月14日)经核实,由我处Unionpub学术推荐的24篇论文已被期刊部录用、20篇见刊,5篇检索: ✔新增1区纳米与环境类SCI&EI,仅36天录用,录用后17天见刊;…

前端canvas截图酷游地址的方法!

前情提要 想在在JavaScript中&#xff0c;酷游专员KW9㍠ㄇEㄒ提供用HTML5的Canvas元素来剪取画面并存成SVG或PNG。 程式写法(一) 首先&#xff0c;需要在HTML中创建一个Canvas元素<canvas id"myCanvas"></canvas> 在JavaScript中&#xff0c;使用canv…

【Java面试】ArrayList、LinkedList 查找数据哪个快

ArrayList、LinkedList查找数据哪个快 这里有几种不同情况 1、是不是有序的&#xff1f; 2、说的查找是什么意思&#xff1f;是调用get(1)&#xff0c;还是调用的contains(o)方法&#xff1f; 根据上面的问题&#xff0c;我们可以分开讨论&#xff1a; 1、数据是有序的 指定…

Apifox自动生成接口文档

1、安装 1.1 Apifox安装 官方文档&#xff1a;Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具&#xff0c;接口自动化测试工具&#xff0c;接口Mock工具&#xff0c;API文档工具&#xff0c;API Mock工具&#xff0c;API自动化测试工具 1.2 IDEA 插件安装…

Vue 复学 之 状态管理 Vuex

Vuex是vue中的一种状态管理模式&#xff0c;就是一个 状态仓库&#xff0c;仓库做什么&#xff1f;存储状态、管理状态&#xff08;数据&#xff09;的变化、提供状态获取窗口。 本文中一些测试用例基于vue/composition-api1.7.1 &#xff0c; vuex3.6.2&#xff0c; vue2.6.1…

【unity实战】随机地下城生成1——随机生成地下城初稿(含源码)

先看看实现的最终效果 #用到的素材 https://download.csdn.net/download/qq_36303853/87712757 导入素材 导入房间图片素材,配置图片信息信息 点击sprite Editor,开始切割图片 随机创建基本房间 已一个白底图片模拟房间预设体 思路:建立一个空的 GameObject 用来做…

C++中的STL容器

文章目录 一、序列式容器1.vector2.array3.deque4.list5.forward_list 二、关联式容器1.set、multiset、unordered_set和unordered_multiset2.map、multimap、unordered_map和unordered_multimap STL中的容器将一些应用最为广泛的数据结构实现了出来&#xff0c;它主要分为序列…

使用python下载wallpaper Engine订阅的壁纸/视频

一、为什么想下载wallpaper Engine的壁纸 在游戏平台steam上&#xff0c;有一个壁纸软件wallpaper Engine&#xff0c;人称小红车&#xff0c;里面有各种好看的动态壁纸和视频&#xff0c;可以给我们的电脑设置动态桌面&#xff0c;非常好用。   用过几次后&#xff0c;我有了…