6.2 日志复制状态机

这里的日志与平时应用程序中打印的日志不同,它是最简单的存储抽象。只能追加、按照时间完全有序的记录序列。日志看起来的样子


日志记录了何时发生了什么

在日志的末尾添加记录,读取日志记录则从左到右。每一条记录都指定了一个唯一的顺序的日志记录编号。

对分布式系统,通常有两种方式来处理复制和数据处理:

  • State machine model(active - active):在日志记录这样的一些操作,如“+1”、“-2”等,这样,每个复制节点需要执行这些操作,以保证最后的数据状态是一致的。
  • Primary-back model (active - passive):一个单独的master节点,执行“+1”、“-2”等操作,并且在日志中记录操作的结果,如“1”、“3”、“6”等。


日志记录了何时发生了什么

日志解决了两个问题:更改动作的排序数据的分发

这两个问题在分布式数据系统中更是尤为重要。协商达成一致的更改动作的顺序(或是协商达成不一致做法并去做有副作用的数据拷贝)是分布式系统设计的核心问题之一。

状态机复制原理

如果两个确定的处理过程,从相同的状态开始,按照相同的顺序,接收相同的输入,那么它们将会产生相同的输出,并以 相同的状态结束。

所谓确定性(deterministic),意味着无论何时,只要两个相同的状态机在相同的状态下接收相同的输入,输出和状态转移都会是完全一致的。换句话说,状态机的行为是固定且可预测的,不受随机因素或非确定性事件的影响。

通过下面两个非确定的例子来进一步理解:

  • 不同节点的时钟并非完全同步,时钟的漂移会导致它们对事件发生的顺序理解不同。比如在依赖本地时钟生成的时间戳或顺序号时,时钟偏差可能导致不同节点对相同操作的处理顺序不同。
  • 多线程或多进程系统中,多个任务同时执行时可能存在竞争条件。不同节点在处理并发操作时,可能由于调度顺序不同而出现不一致的状态。如果没有对并发操作进行恰当的同步,分布式系统的各个节点处理顺序会产生差异,进而导致不确定性。
总字数:690
Last Updated:
Contributors: isno