分布式共识简介
共识侧重于研究分布式系统中的节点达成共识的过程和算法,一致性则侧重于研究副本最终的 稳定状态,一致性一般也不会考虑拜占庭容错问题
在分布式系统中,共识就是在一个可能出现任何故障的分布式系统中的多个节点对某个值达成 共识;以数学语言描述,一个分布式系统包含n个进程,每个进程有一个初始值,进程之间互相 通信,设计一种共识算法使尽管出现故障,但进程之间仍能协商出某个不可撤销的最终决定值, 且每次执行都满足以下三个性质:
- 终止性:所有正确的进程最终都会认同某一个值
- 协定性:所有正确的进程认同的值都是同一个值
- 完整性:如果正确的进程都提议同一个值v,那么任何正确进程的最终决定值一定是v
为什么要达成共识?
状态机复制是解决网络不可靠、时钟不一致和节点故障等问题的常规方法 状态机必须具备确定性:多个相同状态机的副本,从同样的初始状态开始,经历相同的输入序列 后,会达到相同的状态,并输出相同的结果 例如,从同一个位置出发的两个人,只要他们按照相同的方向行驶相同的距离,他们将达到相同 的地点
状态机的确定性是实现容错和一致性的理想特性,只要节点数量够多,系统就能识别出哪些节点的 状态机输出是有差异的