常用¶
状态转移(State Transfer):
以同步为代表的数据复制方法,叫做 状态转移(State Transfer)。
这类方法属于比较符合人类思维的可靠性保障手段,但通常要以牺牲可用性为代价。
操作转移(Operation Transfer):
系统高可用和高可靠之间的矛盾,是由于增加机器数量反而降低了可用性带来的。
为缓解这个矛盾,在分布式系统里主流的数据复制方法,是以 操作转移(Operation Transfer)为基础的。
我们想要改变数据的状态,除了直接将目标状态赋予它之外,还有另一种常用的方法,就是通过某种操作,把源状态转换为目标状态。
状态机(State Machine):
能够使用确定的操作,促使状态间产生确定的转移结果的计算模型,在计算机科学中被称为状态机(State Machine)。
状态机有一个特性:
任何初始状态一样的状态机,如果执行的命令序列一样,那么最终达到的状态也一样。
基于此特性:
要让多台机器的最终状态一致
只要确保它们的初始状态和接收到的操作指令都是完全一致的就可以。
多机器的同步问题变成: 将一连串的操作日志正确地广播给各个分布式节点。
状态机复制(State Machine Replication):
广播指令与指令执行期间,允许系统内部状态存在不一致的情况,但要求在此期间的内部状态不能被外部观察到,
且当操作指令序列执行完成的时候,所有节点的最终的状态是一致的。
这种模型,就是状态机复制(State Machine Replication)。
Quorum 机制:
在分布式环境下,考虑到网络分区问题,所以采用的是 “少数服从多数” 的原则。
也就是说:
一旦系统中超过半数的节点完成了状态的转换,就可以认为数据的变化已经被正确地存储在了系统当中。
这样就可以容忍少数(通常是不超过半数)的节点失联,使得增加机器数量可以用来提升系统整体的可用性。
在分布式中,这种思想被叫做 Quorum 机制。
协商共识(Consensus):
需要设计出一种算法,能够让分布式系统内部可以暂时容忍存在不同的状态,但最终能够保证大多数节点的状态能够达成一致;
同时,能够让分布式系统在外部看来,始终表现出整体一致的结果。
这个让系统各节点不受局部的网络分区、机器崩溃、执行性能或者其他因素影响,能最终表现出整体一致的过程,
就是各个节点的协商共识(Consensus)
共识(Consensus)与一致性(Consistency)的区别:
一致性指的是数据不同副本之间的差异,而共识是指达成一致性的方法与过程。
把故障(不响应)的情况称为“非拜占庭错误”,恶意响应的情况称为“拜占庭错误”(对应节点为拜占庭节点)。 非拜占庭错误的情况,一般包括 Paxos、Raft 及其变种。 要能容忍拜占庭错误的情况,一般包括 PBFT 系列、PoW 系列算法等 从概率角度,PBFT 系列算法是确定的,一旦达成共识就不可逆转;而 PoW 系列算法则是不确定的,随着时间推移,被推翻的概率越来越小。