为什么共识问题在分布式计算中如此重要?


19

在分布式计算中,共识问题似乎是吸引了广泛研究的中心主题之一。特别是,论文“具有一个错误过程的分布式共识的可能性”获得了2001年PODC有影响力论文奖

那么为什么共识问题如此重要?我们在理论上和实践上都能达成共识?

任何参考或说明都会非常有帮助。

Answers:


18

您提到的论文很重要,原因有两个:

  1. 它表明,没有异步的确定性共识算法可以容忍单个崩溃故障。请注意,在同步设置中,存在确定性算法,当进程崩溃时,该算法以轮终止。˚FF+1个F
  2. 它介绍了配置的单价(*),稍后将在许多下限和不可能证明中使用它们。

应用领域

共识问题的一个重要应用是在容错环境中选举协调员或领导者以发起某些全球行动。共识算法允许您即时执行此操作,而无需事先修复“超级节点”(这会引入单点故障)。

另一个应用程序是在分布式网络中保持一致性:假设您有不同的传感器节点监视同一环境。在其中某些传感器节点崩溃(或什至由于硬件故障而开始发送损坏的数据)的情况下,共识协议可确保针对此类故障的鲁棒性。


(*)运行分布式算法是一系列配置。配置是进程本地状态的向量。每个进程执行确定性状态机。任何正确的共识算法都必须最终达到一种配置,在该配置中,每个过程都(不可撤销地)决定了相同的输入值。一个配置1 - 价的,如果,不管对手做什么,所有可能的扩展Ç导致的判决值1。类似地,我们可以定义0 - 。如果两个决策都可以从C获得,则配置C二价的C1个C1个0CC(达到两者中的哪一个取决于对手)。显然,没有任何方法可以决定二价配置,否则我们会达成协议矛盾!因此,如果我们可以构造这种二价构型的无限序列,则表明在这种情况下没有共识算法。C


2
@AJed作为补充:我浏览了莫里斯· 赫利希(Maurice Herlihy)进行的论文同步,现在可以提出共识问题的另一重要理论意义。使用共识数的概念,可以表明同步原语存在无限的层次结构,因此任何一级的原语都不能用于更高级别的任何原语的免等待实现。简而言之,共识问题是定义原始同步操作相对能力的统一理论。优雅
恒新

1
我很难理解FLP不可能结果的证明。你能给我一些提示吗?请参阅[FLP证明](stackoverflow.com/q/15131730/1833118)。谢谢。
恒新

“每个过程都在哪里决定”也许应该是“每个正确过程都在哪里决定”?
nbro

您应该在“无论对手做什么”中说明谁是对手。
nbro

“ C的所有可能扩展”,“ C的扩展”是什么意思?一般来说,什么是配置的扩展?
nbro

7

它表明没有容错确定性算法。相当不错的理论结果,迫使设计人员以不同的方式处理容错,其中一些是同步和随机化。

评论:在我看来,同步是该系统的另一个假设,在实际应用中几乎找不到。

有关参考,请查看Wikipedia链接。另请参阅此博客以了解实际应用


1
是的,我更喜欢随机化而不是同步。从异步性,无限延迟,意外失败和不确定性过多的角度来看,分布式计算所处的环境非常差。只要它不是完美的,我们为什么不使用随机化,在避免过多复杂性的同时获得一些保证。
恒新2012年

1
说到同步,我只是不喜欢理论上的假设。但是,在工业上,经常应用同步或部分同步。例如,谷歌的Spanner是一个全球分布的同步复制数据库。这使我的决定性降低。你有什么意见?
恒新

我想最好看看那里是如何实现同步的。但这是一个非常有趣的参考。-我的意思是,这不是系统的自然功能。必须将其添加到其中。
2012年

通常,您不应该将Wikipedia作为参考。我刚刚读过维基百科的文章:它很不完整,没有组织;这也可能令人困惑。
nbro

5

共识问题很重要的一个原因是它们很简单,并且对于分布式计算系统来说是一种普遍的问题

如果我们可以解决异步分布式系统中的共识问题,则可以使用它来使共享对象上的操作线性化并获得共享对象的线性化能力。

为了简单起见,您能想到多少个问题比就一个价值达成共识更简单?

关于(纯)异步分布式系统中共识的不可能结果告诉我们,如果没有一些其他“东西”,我们就无法解决要在(纯)异步分布式系统中解决的问题。这导致我们可以解决共识的异步模型,例如随机算法,故障检测器,部分同步模型等。

这也是为什么在实践中能够解决共识的算法(例如Lamport的Paxos,Google的Chubby,Apache ZooKeeper和最近的Raft)是分布式系统的核心,我们通常希望在服务器之间复制状态。


0

我只想补充一下,计算的本质正在越来越多地分布在整个堆栈中:许多CPU,一台机器上的许多进程,许多通过LAN连接的机器,许多通过Internet连接的LAN。

这使得常见的(分布式/全局)状态问题变得尤为重要-每种算法都假定某种状态,并且如果要在一个以上的位置执行计算,那么状态也必须是分布式的。

在您引用该论文之后,就发表了该领域的有影响力的论文(Paxos和最近的Raft)。两者都解决了一些失败的共识问题。

在分布式系统中,使用几种方法可以避免拜占庭式错误。

看看Wikipedia关于拜占庭容错的条目


FLP不可能结果甚至适用于最基本的故障(崩溃)设置,因此我不确定该段落中关于避免拜占庭式故障的意义是什么?请注意,如果我们没有失败,那么达成共识就相当容易:一个固定的流程广播其价值,每个流程都在收到价值后立即决定该价值。
卡夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.