MIT 6.824 Fault-Tolerant Virtual Machines 论文精读

本文深入探讨MIT 6.824课程中的Fault-Tolerant Virtual Machines设计,重点讲解确定性重播实现、故障检测与响应策略以及实际部署中的挑战,阐述如何构建基于状态机的高可用分布式系统,确保在服务器故障时能够无缝切换并保持数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

本文是MIT 6.824 Lec4的先修内容。

Introduction

实现一个fault-tolerant系统基本上由两种设计思路:

  • 主从备份:这种方法backup server的状态必须时刻与master server保持同步,这样master宕机后,backup才可以立刻变为新的master。但保持相同的状态需要master不断地发送自己地状态信息,需要占用大量带宽。
  • 状态机:这种方法将servers看成是由确定状态组成地状态机。每个server都从相同地初始状态出发,并且保证它们以相同地顺序接受相同地输入。对于不确定性地输入,需要额外地操作来协同servers间地状态。这种方式所需要传送地数据量大大少于第一种方法。

VM设计了一套建立在Hypervisor之上的基于状态机的高容错分布式系统架构。 在物理机上确保确定性执行是困难的,因为其会接收到很多不确定输入( 如定时器中断 )。Hypervisor 对硬件进行模拟和控制,可以捕获到这些不确定输入的所有相关信息,使得 backup 可以重放这些不确定输入 。 因为我们讨论的故障主要是指服务器故障,因此不同的虚拟机要位于不同的物理机上,否则便失去了容错的意义 。

基本FT设计

VM FT的基本架构如下图所示。
在这里插入图片描述
primary vm和backup vm运行在不同的物理机上,并且都可以访问到shared disk server。对于外界来说,只知道primary vm的存在,因此所有的输入(网络,鼠标,键盘等)都发送到primary vm。primary vm收到输入后,通过logging channel的网络连接发送给backup vm,以保证两者的状态相同。backup vm的执行结果与primary vm相同,但是只有primary vm将结果返回给clients,backup vm的执行结果被hypervisor抛弃。系统使用primary vm和backup vm之间的心跳包和logging channel上的流量监控来检测primary vm或backup vm是否存活。必须保证同时只存在一个primary vm,来防止brain split的情况发生。

Deterministic Replay Implementation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值