在分布式计算中,共识问题似乎是吸引了广泛研究的中心主题之一。特别是,论文“具有一个错误过程的分布式共识的可能性”获得了2001年PODC有影响力论文奖。
那么为什么共识问题如此重要?我们在理论上和实践上都能达成共识?
任何参考或说明都会非常有帮助。
在分布式计算中,共识问题似乎是吸引了广泛研究的中心主题之一。特别是,论文“具有一个错误过程的分布式共识的可能性”获得了2001年PODC有影响力论文奖。
那么为什么共识问题如此重要?我们在理论上和实践上都能达成共识?
任何参考或说明都会非常有帮助。
Answers:
您提到的论文很重要,原因有两个:
应用领域
共识问题的一个重要应用是在容错环境中选举协调员或领导者以发起某些全球行动。共识算法允许您即时执行此操作,而无需事先修复“超级节点”(这会引入单点故障)。
另一个应用程序是在分布式网络中保持一致性:假设您有不同的传感器节点监视同一环境。在其中某些传感器节点崩溃(或什至由于硬件故障而开始发送损坏的数据)的情况下,共识协议可确保针对此类故障的鲁棒性。
(*)运行分布式算法是一系列配置。配置是进程本地状态的向量。每个进程执行确定性状态机。任何正确的共识算法都必须最终达到一种配置,在该配置中,每个过程都(不可撤销地)决定了相同的输入值。一个配置是1 - 价的,如果,不管对手做什么,所有可能的扩展Ç导致的判决值1。类似地,我们可以定义0 - 价。如果两个决策都可以从C获得,则配置C是二价的(达到两者中的哪一个取决于对手)。显然,没有任何方法可以决定二价配置,否则我们会达成协议矛盾!因此,如果我们可以构造这种二价构型的无限序列,则表明在这种情况下没有共识算法。
它表明没有容错确定性算法。相当不错的理论结果,迫使设计人员以不同的方式处理容错,其中一些是同步和随机化。
评论:在我看来,同步是该系统的另一个假设,在实际应用中几乎找不到。
有关参考,请查看Wikipedia链接。另请参阅此博客以了解实际应用
共识问题很重要的一个原因是它们很简单,并且对于分布式计算系统来说是一种普遍的问题。
如果我们可以解决异步分布式系统中的共识问题,则可以使用它来使共享对象上的操作线性化并获得共享对象的线性化能力。
为了简单起见,您能想到多少个问题比就一个价值达成共识更简单?
关于(纯)异步分布式系统中共识的不可能结果告诉我们,如果没有一些其他“东西”,我们就无法解决要在(纯)异步分布式系统中解决的问题。这导致我们可以解决共识的异步模型,例如随机算法,故障检测器,部分同步模型等。
这也是为什么在实践中能够解决共识的算法(例如Lamport的Paxos,Google的Chubby,Apache ZooKeeper和最近的Raft)是分布式系统的核心,我们通常希望在服务器之间复制状态。
我只想补充一下,计算的本质正在越来越多地分布在整个堆栈中:许多CPU,一台机器上的许多进程,许多通过LAN连接的机器,许多通过Internet连接的LAN。
这使得常见的(分布式/全局)状态问题变得尤为重要-每种算法都假定某种状态,并且如果要在一个以上的位置执行计算,那么状态也必须是分布式的。
在您引用该论文之后,就发表了该领域的有影响力的论文(Paxos和最近的Raft)。两者都解决了一些失败的共识问题。
在分布式系统中,使用几种方法可以避免拜占庭式错误。