“这是我自学算力大集群相关知识的第3篇笔记。”
摘要
复制(replication)是分布式系统实现容错性的一个关键机制,接下来我们将通过其定义、机制、局限与示例来初步了解复制机制。
- 状态
所谓复制,其实是采用一种冗余的机制,对系统当前的状态进行复制,之后当系统中某些服务器离线时,系统依旧可以保持过往数据的一致性并可继续在线。
这里所指的状态在不同的备份类型中拥有不同的定义,但一般而言,状态指的是:所有的内存和所有机器寄存器的数据信息。
- 复制的类型
针对复制的一致性要求与数据量、系统延迟等不同要求,有两种主流的复制机制类型。
1.复制状态机(replicated state machine)
此类复制机制只会复制发送的外部事件,内容包括来自外部世界的到达输入,备份节点仅需同步以上的信息,即仅仅是备份来自客户端或外部输入或外部事件的操作。
选择此方案需满足操作的大小小于状态的大小的条件,此外,由于不是全量状态的备份所以不适用于对数据一致性要求非常严格的环境和场景(如银行、金融)。但也正因为其非复制全量状态,所以在通讯延迟、系统开销等方面往往表现较好。
2.状态转移(state transfer)
此方案中,主节点将其整个状态(例如,RAM的内容)复制并发送到备份节点,备份系统存储最新的状态。一旦主节点发生故障,备份节点便可利用其获取的最新状态立即接管执行。
由于此方案是全量状态的备份,可能会对系统开销与网络延时响应有较大影响。
另外,在多核处理器情况下,此方案最为稳妥。
- 切换机制
为了应对切换过程中的异常情况,系统直到备份确认它已接收到至此为止的所有日志记录之后主节点才向客户端发送输出结果。
另外,在极端情况下产生重复的输出或可通过tcp协议进行过滤。
- 复制机制的局限
1.适用于单个计算机的“fail-stop”故障。这里指的是如果计算机出现故障,那么计算机就会简单地停止执行,并不会计算出错误的结果;
2.复制机制无法防御软件中的漏洞,也无法防御用于管理复制的任何方案中的漏洞。
示例,VMware FT
有两台或以上的物理机器,每台机器上都运行着一个服务副本的虚拟机客体并通过网络的方式通讯及与客户端相通讯。
主虚拟机接收到网络数据包完成自身应用层更新并同步将数据包发送给备份虚拟机。但数据包所产生的结果只有主虚拟机的生效,备份虚拟机将会丢弃结果数据包。
主虚拟机与备份虚拟机之间的通讯被称为日志通道。当日志通道停止接收日志条目时,则判断主虚拟机故障,需要备份虚拟机接管。同时将未来的客户端请求被导向备份节点而非主节点。
一些特殊情况
1.非确定性事件的处理
1)这里指服务之间仅通过网络进行通信的情况下,来自外部(如客户端)的输入。它们会在任何时候到达,当中断发生时,不能确定究竟是在哪一条指令上发生的;
2)某些非确定性指令,如生成随机数指令;
3)多核并行性。
以上情况下需要将主节点的结果也一同同步给备份节点。
2.主节点和备份节点无法相互通信, 但它们仍能与客户端通信
需引入仲裁者机制,如网络上具备test-and-set 服务的服务器。
3.其他
如考虑业务或系统所需要的同步的延迟程度,综合考虑整体方案的性价比。
以上内容来自对 MIT 《分布式系统 6.824》的学习笔记,前两期也是,在此特别声明。