常青笔记

  • 初始状态一致 + 执行命令顺序一致 = 相同结果。类比无状态函数
  • 状态机复制的应用,特别要注意的就是要求顺序一致性。如有个数据x=2。有2个操作。+5和*; 先+后* 结果是不一样的。
  • 一般会定时快照 + 操作log集合的方式。比如git的归档日志的应用的。

概念

状态机有个特性: 任何初始状态一样的状态机,如果执行的命令序列一样,则最终达到的状态也一样。如果将此特性应用在多参与者进行协商共识上,可以理解为系统中存在多个具有完全相同的状态机(参与者),这些状态机能最终保持一致的关键就是起始状态完全一致和执行命令序列完全一致。 根据状态机的特性,要让多台机器的最终状态一致,只要确保它们的初始状态是一致的,并且接收到的操作指令序列也是一致的即可,无论这个操作指令是新增、修改、删除抑或是其他任何可能的程序行为,都可以理解为要将一连串的操作日志正确地广播给各个分布式节点。广播指令与指令执行期间,允许系统内部状态存在不一致的情况,即并不要求所有节点的每一条指令都是同时开始、同步完成的,只要求在此期间的内部状态不能被外部观察到,且当操作指令序列执行完毕时,所有节点的最终的状态是一致的,这种模型就被称为状态机复制(State Machine Replication)

保证复制到各个服务器上的日志的一致性正是分布式一致性算法的工作. 一致性算法保证所有状态机副本上的操作日志具有完全相同的顺序, 如果状态机的任何一个副本在本地状态机上执行了一个操作, 则绝对不会有别的副本在操作序列相同位置执行一个不同的操作.