1. 基本概念 #
- 可靠性工程(Reliability Engineering): 是在产品寿命周期全过程(论证、方案、工程研制、生产和使用)中同产品故障作斗争的一门学科
1.1. 可靠性: 产品在规定的条件下、规定的时间内完成规定的功能的能力,即业界所说的三规。是产品的一种固有属性 #
1) 规定的条件:产品的运行环境 #
- 环境条件:温度,湿度,压力,振动,冲击,电磁场,电磁辐射等等
- 工作条件:工作应力,系统负载,业务模型,人员操作等等
2) 规定的时间:产品的生命周期 #
- 工作时间:时长(小时)、频次(次数)、距离(公里),例如交换机寿命20年,手机寿命5年,手机划盖工作寿命6万次,汽车寿命30万公里
- 非工作时间:待机状态,储存状态等
3) 规定的功能:产品的技术性指标 #
- 指产品标准或产品技术条件中所规定的各项技术性能(技术指标)
1.2. 故障(Fault):系统内的对象实体相对正常状态的偏离(站在这个对象的外部来看)的一种静态状态。例如进程挂死,硬盘坏道,CPU降频,网络丢包,文件系统只读,配置文件丢失等等 #
- 偏离的表现形式称之为故障模式 = 故障对象(主语)+ 故障表现(谓语)
- 故障对象:保证系统运行以及提供业务能力的物理(硬盘、网卡等等)或者逻辑实体(进程、文件、数据等),可以是一个单一实体,也可以是多个单一实体组成的综合实体(主机、集群、站点等),其本质是系统的组成成分,类似于一座房子的墙面,房梁、房檐、砖头、瓦片;也类似于一个人的四肢、眼睛、耳朵、嘴巴等
- 故障表现:偏离于正常状态的表达,一般是动词、形容词来表示,比如只读、退出、掉电、卡慢、崩溃、坏道、高温、泄漏、过载、损坏、丢失、抢占、重启、失败、空间满等等
- 系统是由软件和硬件构成的,所以系统的故障对象就是软件和硬件,其中硬件包含主机(主机本身如主板、机箱等;以及主机上的硬件部件如硬盘、网卡、CPU、电源、风扇、内存、PCIE接口等等)以及网络设备(用于主机之间的连接,例如交换机、路由器、光纤网线、网卡/光模块等),软件包含操作系统(内核、驱动、系统服务等)、系统业务软件(包含进程、服务、容器、虚拟机、数据、文件、开源中间件等等)
- 故障被激活(Active)的时候会产生错误(Error),未被激活的故障就是休眠的/静默的(Dormant)
- 故障来源:
- 对象实体内部自然产生的:例如软件缺陷,硬件的自然损坏等。也叫作内源性故障
- 对象实体外部交互产生的:例如配置类故障(配置项不正确),误操作类故障(误删文件)、交互类故障等、也叫作外源性故障
1.3. 错误(Error):是故障被激活后的一种动态状态,也是会直接导致业务失效的某种状态(State)。典型的错误如消息发送超时(网络丢包被激活导致的),请求无响应(对端进程挂死被激活导致的),配置文件读失败(配置文件丢失被激活导致的),硬盘写超时(硬盘坏道被激活导致的),硬盘读写慢(硬盘坏道被激活导致的)等等 #
- 激活:业务操作路径经过了某个存在故障的对象实体,从而导致该对象实体的某个故障被激活(也就是说故障只有被激活才会对系统产生影响,静默故障是无害的)
- 错误检测:当某个错误信息或者错误信号(Error message or Error signal)未被感知到,该错误就叫做静默错误(Latent Error),例如未感知到超时等
- 错误未被检测或者检测到而未有容错处理的话,就会产生业务失效(中断、性能下降等)
- 错误模式:类似于故障模式,区别是错误对象通常是业务操作而不是系统内部组件,错误表现和故障表现基本上是一样的
1.4. 失效(Failure):系统当前的业务偏离正常业务(Correct Service )的事件 #
- 偏离的表现:未按照规格要求实现或者规格要求本身不完整,通常称之为业务中断(Service Outage)
- 偏离正常业务的表现形式称之为失效模式(Failure Mode) = 失效对象 + 失效表现
- 失效对象:与故障对象不同的是,失效是基于外部客户业务的角度进行描述的,因此失效对象主要为客户的业务类型/模型或者抽象表达,所以描述为业务(数据面-用户业务)、数据(数据面-用户数据)、控制台(管控面)、扩容(运维面)、升级(运维面)、更换(运维面)等等诸如此类
- 失效表现:相对于故障表现而言,会更加聚焦一些,一般也是动词、形容词来表达,主要有中断,卡慢,超时,丢失/错误,失败等
- 失效的行为规律:
- 持续性失效:一直失效直到人为恢复
- 间歇性/周期性失效:周期性或者无规律隔段时间出现一次然后自我恢复
- 偶然性失效:偶然出现一次然后自我恢复
- 失效对客户业务不同的影响程度的等级叫做失效严重程度( Failure Severities ),也叫失效严酷度
- 失效对象对于客户而言就有重要性之分(不同的业务类型有着不同的重要性,比如说数据面业务重要性要大于管控面业务),同时对象本身还隐含着范围的概念(主要是指影响的用户数量,比如是影响了所有用户,还是影响了少部分用户,影响的用户数据范围等)
- 失效表现的角度来看也会有所区分,从两个维度来看,一是失效表现本身对客户的影响大小(比如数据丢失就是业务中断要影响大,中断要比卡慢影响大等等),二是失效表现的关键特征(包括持续时间例如时间越长对客户影响越大、出现次数例如次数越多则对客户影响越大)
- 在其他条件同等下,业务越重要、影响用户越多、影响越深、持续时间越长、发生次数越多则严重程度越高
- 可以是部分业务失效也可以是全部业务失效。部分失效也叫作降级工作状态,表现为业务降速,业务受限,应急状态等
- 失效是在系统的边界处体现出来的非正常的输出表现
1.5. MTBF(Mean Time Between Failure)平均失效间隔时间 #
$$ MTBF = \frac{累计工作时间}{累计故障次数} $$
- 仅适用于可维修产品
- 一般大于设计寿命
1.6. MTTF(Mean Time To Failure)平均无故障工作时间 #
$$ MTTF = \frac{总工作时间}{故障数量} $$
- 针对不可修产品
2. 度量体系 #
2.1. 业务零中断 #
2.2. 数据零丢失 #
2.3. 抗百倍过载 #
2.4. 故障秒级检测与自愈 #
2.5. 事故分钟级恢复 #
2.6. 测试指标 #
- 故障自动检测率
- 故障自动恢复率
- 故障自动检测时长、故障自动恢复时长
- 故障人工恢复时长
- 过载保护评估: 过载倍数下保障正常负载的成功率,如5倍负载保障1倍负载的98%可用
3. 系统可靠性设计 #
3.1. 故障预防 #
1) 人因差错 #
- 防用户出错:例如硬件防用户插反,软件上阻止用户的错误操作(系统不支持的操作),删除操作光标默认在取消键
- 防出错影响:例如硬盘插错服务器了,IP地址冲突了
- 改错误结果:例如用户配置错了,能够修改正确
2) 高危操作 #
- 风险预警:风险说明,用户确认,必要时输入管理员密码
3) 失效检查:导致后续失败的条件,尽早检查,在入口检查 #
- 兼容检查:对于不兼容的软件,硬件,运行环境,给用户提示,不允许下一步操作
- 失败检查:例如升级前检查,导致升级失败的不让升级;文件复制前的存储空间检查
3.2. 故障检测&定位 #
1) 故障检测:将系统内的故障通过业务程序本身或者公共程序感知出来 #
- 业务路径上的故障(Error):业务流程直接感知的会导致业务出现失败的故障,例如消息超时无响应,空间不足,读写错误,发送失败等
- 非业务路径的故障(Fault):业务流程不可直接感知的,但是会潜在的或者直接的导致业务失败的故障,例如进程挂死,网络断开,资源过载、电源损坏,SSD寿命到期等等
2) 故障定位:故障发生的位置 #
- 软件故障:定位到可管理单元(FMU),软件模块(进程,服务,文件等等)
- 硬件故障:定位到可更换单元(FRU),硬盘,网口,光模块,内存(物理位置信息)
3.3. 故障隔离:在软件模块,硬件部件、网络冗余部署的情况下,隔离机制才有效。 #
- 硬件部件:硬件出现整体或者局部的损坏(变慢等),特别是局部的损坏(比如内存有局部损坏,将局部区域隔离,该内存条可以继续使用)价值更大,将该硬件整体或者局部区域(硬件还可以使用)不再使用
- 软件模块:软件模块出现整体无法运行或者频繁启停或者运行缓慢,将该软件模块停止运行并从软件模块集群中分离出来
- 网络连接:网络连接出现中断,闪断、丢包、延迟等现象,将该网络连接断开或者让软件不使用该网络连接
3.4. 故障上报:需要用户介入处理的故障才要上报告警 #
- 故障预警:当前还未产生影响,但是如果不处理,后续可能产生影响。比如资源过载,容量过载,寿命到期之类的故障
- 自动容错:该故障系统有容错措施,未对用户产生业务影响,但是系统无法自动修复该故障本身,需要人工介入恢复,比如进程无法启动,网络断开,硬件损坏等
- 业务失效:该故障已经对用户业务造成了影响,系统无法自动恢复该故障,比如数据损坏,主备倒换失败,主备机同时故障
3.5. 故障恢复&修复 #
1) 业务恢复:用户业务的恢复,包括自动和手动两种方式 #
- 软件模块:自动的机制如故障对象自动重启,故障对象自动切换(双机、集群等),发送方自动重试,发送方重新选择发送路径或者发送对象,备份恢复;手动的机制就是应急处理(人工介入)
- 硬件模块:自动的机制就是切换到另一个冗余部件上去,或者采用隔离技术将局部硬件故障隔离。手动的机制同软件模块
2) 故障修复:故障本身的恢复,也可能会直接产生业务恢复 #
- 软件模块:通过备份进行恢复(文件,数据);升级补丁等
- 硬件模块:硬件维修,硬件更换、硬件拔插
3.6. 冗余设计 #
- 冗余设计是设备故障自动恢复的条件之一
- 软件上的冗余意义不大,同样条件下切换了软件还是会出现问题
- 一般冗余是主机冗余和网络冗余
- 硬件通过冗余可以提升可靠性,但是软件无法通过冗余提升可靠性
1) 主机冗余 #
- 主机冗余一般是两台主机做主备
- 对于主机内部一般是电源、风险、系统盘做冗余,cpu、内存等不做冗余
- 主机冗余一般是考虑故障率和成本的平衡
2) 网络冗余 #
- 一般是网口、交换机等设备的冗余
3.7. 故障管理 #
1) 总体框架 #
- 系统可靠性服务不能耦合被管理对象
- 可靠性服务需要比被管理服务简单,否则无法保障可靠性
2) 故障隔离 #
- 网络平面隔离
- 物理隔离: 不同网络平面采取不同的物理接口
- 逻辑隔离: 使用vlan进行隔离,单平面故障不影响其他平面
- 集群隔离
- 每个集群内部故障只影响本集群的问题,不影响其他集群节点
- 业务平面隔离
- 管理面、控制面和数据面隔离,数据面卡死不影响管理面访问
- 逃生通道、BMC
- 数据隔离
- 用户数据: 不同数据分布在不同硬盘、不同主机、不同站点等
- 系统数据: 配置数据和日志数据放在不同的磁盘分区;配置数据支持备份到第三方系统;元数据和数据放在不同存储介质
- 资源隔离
- 物理隔离: cpu和内存的物理绑定,硬盘分区
- 逻辑隔离: QoS控制机制,cgroup机制,目录配额
3) 过载保护 #
(1) 熔断 #
- 定义目标服务调用慢或超时的熔断阈值,超过阈值定义熔断机制,隔离服务或者其他跳过机制
- 低于阈值后恢复调用
- 熔断是防止雪崩,存在关闭、半熔断、开启三种状态
(2) 限流 #
- 限流是在已有的条件下,最大限度发挥系统效能
- 限流阈值需要基于现有业务和系统进行确定
- 量化限流阈值
- 确定限流策略、算法
- 被限制流量的处理
- 限流算法业界推荐【两窗两桶】:固定窗口、滑动窗口、漏桶、令牌桶
- 实现原则
- 对于进程、服务消耗的资源,需要有约束机制,避免异常超额消耗和超长时间占用
- 要实时监控各种资源的占用情况,在达到即将饱和之前,对接入业务量进行控制
- 发生过载时建议考虑业务/客户优先级,保证高优先级业务/客户优先获得资源
- 控制要尽早,在源头控制,在第一个能识别流量的模块开始控制
- 如果一个业务有多个消息,只要第一个消息进入系统了,后面的消息不要被流控掉
4. 特性可靠性设计 #
4.1. FMEA (Failure Mode and Effects Analysis)失效模式及后果 #
通过对可能发生的失效模式进行分析与判断其可能造成的后果而产生风险程度的一种量化的定性分析计算方法,并根据风险的大小,采取有针对性的改进,从而了解产品设计能力,达成一种事先预防并实施改进措施进行改进的方法工具
1) 行动优先级 AP Action Priority #
行动优先级: 评估每一种失效原因的风险等级以便确定实施改建措施的顺序,AP = S * O * D
- 严重度S(Severity):也叫严酷度,假定失效模式出现后造成的潜在后多程度,对客户业务的影响程度
- 频度O(Occurrence)
- 探测度D(Detection)
AP分为低中高三个级别
2) 总体步骤 #
功能定义 => 失效分析 => 行动排序 => 改进措施
知识补充 #
1. 内存错误 #
- CE(Correctable Error):可恢复错误
- UE(Uncorrectable Error):不可恢复错误
2. 网络 #
2.1. Bond网络模式 #
将多张网卡虚拟为一张,对外显示为一张,共用ip和mac地址。用于做网络硬件层面的冗余,防止单网口应用的单点故障
3. 主机 #
3.1. BMC(Baseboard Management Controller) 板级控制管理器 #
- BMC自有硬件接口(LAN/Serial)和软件(Firmware/Linux);
- 遵循 IPMI 协议,对外提供统一的访问接口;
- 作为服务器特有模块,提供温度,电压,风扇,总线监控;提供管理接口,便于进行远程管理服务器;
- BMC使用独立的Power,在系统关机时依然处于工作状态.
4. 可靠性 #
- 基本可靠性:是指产品在规定的条件下和规定的时间内,无故障工作的能力
- 任务可靠性:是指按要求完成该任务的可能性
- 使用可靠性:是指产品在实际的环境中使用时所呈现的可靠性
- 固有可靠性:计算机控制系统在制造过程中需要进行材料和元件的选择、设计、制造、组装,环境实验等。由这一过程所决定的可靠性是系统的内在可靠性,称为系统的固有可靠性。系统的固有可靠性决定于生产厂家。