分布式系统中的一致性与共识算法
1 问题定义
在分布式系统中,多个进程需要就某个值达成一致,这就是所谓的“共识问题”。共识是许多分布式应用程序的核心需求,例如数据库事务的提交决策。共识问题要求所有无故障的进程必须同意相同的值,并且如果源进程无故障,则所有无故障的进程同意的值必须与源进程的初始值相同。此外,每个无故障的进程最终必须决定一个值。
共识问题的形式化定义如下:
- 一致性 :所有无故障的进程必须同意相同的值。
- 有效性 :如果源进程无故障,则所有无故障的进程同意的值必须与源进程的初始值相同。
- 终止 :每个无故障的进程最终必须决定一个值。
1.1 拜占庭将军问题
拜占庭将军问题是共识问题的一个经典例子。想象四支军队围攻一座城市,每支军队由一位将军指挥。只有当所有军队同时进攻时,才能成功。因此,将军们需要就进攻时间达成一致。通信通过信使进行,但有些将军可能是叛徒,会发送误导性信息。拜占庭将军问题要求在存在叛徒的情况下,忠诚的将军们仍能达成一致。
2 结果概述
共识问题在不同假设下有不同的解决方法。表1总结了在不同故障模型和通信模型下解决共识问题的结果。
故障模型 | 同步系统 | 异步系统 |
---|---|---|
无 |