The design of a practical system for fault-tolerant virtual machines 阅读笔记

首发于:https://github.com/rsy56640/paper-reading/tree/master/分布式/The design of a practical system for fault-tolerant virtual machines

The design of a practical system for fault-tolerant virtual machines 阅读笔记

介绍

容错思路是 primary / backup,那么就保证两者尽可能同步就好,但是同步内存和IO等操作消耗巨大,所以转变思路:
假设 primary / backup 初始状态相同,那么只需要同步状态迁移操作即可。(为了达成这么nice的property,我们需要证明它是一个“确定性状态机”,即 deterministic state machine)
因此使用 VM 来保证确定性状态机的性质:因为所有操作都是经过 VM 控制的。对于本身就确定的操作,直接 sync log 然后 replay 即可;对于非确定性的操作,VM 采用一些手段 sync 到 backup。

基本设计

在这里插入图片描述

primary 与 backup 的执行是一样的,但 backup 的 output 被 hypervisor 抛弃掉。
检测 fail:心跳消息;监控 logging channel。
防止 split brain:atomic lock

Deterministic Replay Implementation

目标:在不影响性能的情况下,捕获所有输入和非确定性操作并正确地执行于 backup。

主要细节在 ReTrace: Collecting Execution Trace with Virtual Machine Deterministic Replay

把输入和非确定性以日志流形式记录
对于非确定性事件:记录发生时的具体指令

FT protocol

Output Requirement:如果 backup 接替 primary 执行,backup 的执行必须满足 与 primary 之前向外界的输出完全一致。

Output Rule:为了满足 Output Requirement,primary 必须延迟向外界 output,直到 backup ack 生成 output 的 log

在这里插入图片描述

无法保证所有 output 只 produce 一遍,因为 backup 无法得知 primary fail 前是否 produce output。不过有网络机制可以解决dup问题。

故障检测与相应

  • UDP 心跳消息
  • 监控 logging traffic

对于 network partition 造成的 split-brain 问题,使用 shared storage 上的自旋锁,保证最多只有一个 VM go live

实现

VM 的启动与恢复

Fast transparent migration for virtual machines

Logging Channel

在这里插入图片描述

primary buffer 满了之后就 stop,对外界有影响;backup buffer 满了之后就 stop,对外界无影响。

record log 和 replay 的开销大致相同。

为了 replay 用时少,控制 primary 和 backup 之间的 lag。

VM 管理 disk IO,并串行化;使用 bounce buffer 控制 IO。

Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值