# 错误容忍

# 论文

# primary/backup

这篇 paper 提出了一种 VM 错误容忍的方法,简单来说就是设置 Primary/backup。primary 用于提供服务,而 backup 用于做 primary 的备份。如果 primary 挂掉之后,那么 backup 能够自动地接管服务,给外界 client 一种没有发生过故障的错觉。

该方法的核心思想就是保证 primary 和 backup 状态相同,方法也很简单。primary 执行什么操作,backup 也执行什么操作。如果有一个不确定的信息,那么这些信息会被 primary 传送给 backup。这样保证若 backup 和 primary 一直状态相同。

The Design of a Practical System for Fault-Tolerant

# 基本设计

首先是 shared disk 架构,如图所示:

image-20220225110519498

只有 primary 会被暴露在网络中,所以 client 的输入都会输出给 primary。primary 的所有输出都通过 logging channel 给传送给 backup。

确定操作的三个要求:

  • primary 必须捕获确定的和非确定的信息。
  • 确地将输入和不确定信息应用到 backup
  • 不能降低性能

# FT 协议

image-20220225113932596

primary 将 output operation 传递给 backup,并推迟 output,知道 backup 返回确认。但是这也有一个问题,如果 primary 发送 output operation 后立即挂了,那么 output 也会被发送 2 次。但是 tcp 协议可以处理这些重复包。