4

我已经阅读了许多文章并感到困惑。

意见 1:2PC 非常高效,交换的消息数量最少,延迟低。资料来源: http ://highscalability.com/paper-consensus-protocols-two-phase-commit

意见 2:分布式事务很难扩展到高水平,而且它们会降低吞吐量。作为 2PC 保证 ACID 由于其复杂的协调算法,它带来了很大的负担。资料来源:http: //ivoroshilin.com/2014/03/18/distributed-transactions-and-scalability-issues-in-large-scale-distributed-systems/

意见 3:“一些作者声称两阶段提交太昂贵而无法支持,因为它带来了性能或可用性问题。我们认为最好让应用程序程序员在出现瓶颈时处理由于过度使用事务而导致的性能问题,而不是总是围绕缺乏事务进行编码。在 Paxos 上运行两阶段提交可以缓解可用性问题。” 资料来源:http ://courses.cs.washington.edu/courses/csep552/13sp/lectures/6/spanner.pdf

意见 4:2PC 协调器也代表单点故障,这对于关键系统来说是不可接受的——我相信它是一个协调器。资料来源: http: //www.addsimplicity.com/adding_simplicity_an_engi/2006/12/2pc_or_not_2pc_.html

前 3 种观点相互矛盾。我认为第4个是正确的。请澄清什么是错误的,什么是正确的。给出事实为什么会这样也很好。

4

1 回答 1

4

第 4 个陈述是正确的,但可能不是您阅读它的方式。在 2PC 中,如果协调器失败,系统将无法进行。因此,通常需要使用像 Paxos 这样的容错协议(例如,参见Gray 和 Lamport),这将允许系统在出现故障时安全地运行。

意见 3 应结合 Spanner 论文的其余部分阅读。作者说他们开发了一个允许在分布式数据库中进行高效事务的系统,并且他们认为这是系统用户的正确默认权衡。Spanner 的做法在论文中有详细介绍,值得一读。请注意,Spanner 只是一种组织协调的方式(一种巧妙的方式,被授予),这是实现可序列化事务所固有的要求。参见Gilbert 和 Lynch了解协调限制的一种方法)。

意见 2 是一个普遍的信念,在现实世界的分布式系统中,确实存在可用性和事务语义丰富性之间的权衡。然而,目前的研究表明,这些权衡并不像过去描述的那样可怕。有关研究方向之一,请参阅Peter Bailis 的演讲。如果您想要最严格意义上的真正可串行化或线性化,则需要遵守某些协调下限才能实现它们。

意见 1 在技术上是正确的,但对你引用它的方式不是很有帮助。2PC 在某种意义上是最佳的,但由于可用性权衡而很少天真地实施。许多解决这些权衡的临时尝试导致了不正确的协议。其他的,比如 Paxos 和 Raft,以一些复杂性为代价成功地解决了这些问题。

于 2014-04-08T04:45:30.420 回答