系统故障是不符合其规范的系统行为。失败的后果可能会有所不同。
系统故障可能是由其某些组件(处理器、内存、输入/输出设备、通信线路或软件)的故障(故障)引起的。
组件故障可能由设计、制造或编程错误引起。它也可能由物理损坏、设备磨损、无效输入、操作员错误和许多其他原因引起。
故障可以是随机的、间歇的或永久性的。
重复操作时,随机故障(故障)消失。
例如,此类故障的原因可能是来自经过的有轨电车的电磁干扰。另一个例子是从不同任务访问操作系统的顺序中的罕见情况。
周期性故障在一段时间内频繁重复,然后可能很长一段时间都不会发生。示例 - 接触不良,处理异常完成任务后操作系统的错误操作。
永久性(持久性)故障在其原因消除之前不会停止 - 磁盘损坏、微电路故障或程序错误。
故障根据其表现的性质分为拜占庭式(系统是活跃的,并且可以以不同的方式表现出来,甚至是恶意的)和生命迹象的丧失(部分或全部)。前者比后者更难识别。他们的名字来源于拜占庭帝国(330-1453)的名字,那里阴谋、阴谋和欺骗盛行。
为了确保在系统故障情况下可靠地解决问题,使用了两种根本不同的方法——在系统(或其组件)发生故障后恢复解决方案和防止系统故障(容错)。
7.1。失败后恢复。
恢复可以是直接的(不返回之前的状态)和可返回的。
前向恢复基于及时检测故障并通过将系统的错误状态恢复到正确状态来消除其后果。这种恢复只有在特定的一组预定故障时才有可能。
在回滚恢复中,进程(或系统)从不正确的状态返回到之前的某些正确状态。这引发了以下问题。
(1) 记忆状态、恢复记忆状态和重复先前执行的工作所导致的性能开销可能过高。
(2) 不保证故障恢复后不会再次发生。
(3) 对于某些系统组件,可能无法恢复到以前的状态(自动售货机)。
但是,这种方法更通用,并且比第一种更常用。进一步的考虑将仅限于这种方法。
为了恢复传统计算机中的状态,使用了两种方法(及其组合),基于中间状态固定或执行操作的记录。它们存储的信息量和恢复所需的时间不同。
在分布式系统中使用这种方法会遇到以下困难。
7.1.1. 孤儿消息和多米诺骨牌效应。
该图显示了通过消息交互的三个进程(X、Y、Z)。垂直虚线在时间轴上显示存储过程状态以在发生故障时恢复的时刻。箭头对应于消息并显示它们发送和接收的时刻。
如果进程 X 中断,那么它可以从状态 x3 恢复,而不会对其他进程产生任何影响。
假设进程 Y 在发送消息 m 后中断并返回状态 y2。在这种情况下,消息 m 的接收固定在 x3,但它的发送没有标记在 y2。由于全局状态不一致,不应容忍这种情况(例如 - 一条消息包含从一个帐户转移到另一个帐户的金额)。在这种情况下,消息 m 称为孤立消息。进程 X 必须返回到其先前的状态 x2 并且冲突将得到解决。
现在假设进程 Z 发生故障并恢复到状态 z2。这会将进程 Y 回滚到 y1,然后将 X 和 Z 处理到它们的初始状态 x1 和 y1。这种效应被称为多米诺骨牌效应。
7.1.2. 消息丢失。
假设检查点 x1 和 y1 分别被提交以恢复进程 X 和 Y。
如果进程