我读了很多文章并感到困惑。
意见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个是正确的。请澄清什么是错的,什么是正确的。给出事实原因也很好。
答案 0 :(得分:4)
第四种说法是正确的,但也许不是你读它的方式。在2PC中,如果协调器失败,则系统无法进行。因此,通常需要使用像Paxos这样的容错协议(例如,参见Gray and Lamport),这将允许系统在出现故障时安全地进行。
意见3应该在Spanner论文的其余部分的背景下阅读。作者说,他们开发了一个系统,允许在分布式数据库中进行有效的交易,并且他们认为这是系统用户的正确默认权衡。 Spanner的做法在论文中非常详细,值得一读。请注意,Spanner只是组织协调的一种方式(一种聪明的方式,被授予),这是实现可序列化事务所必需的。有关协调限制的一种方法,请参阅Gilbert and Lynch。
意见2是一个普遍的看法,在现实世界的分布式系统中,事务语义的可用性和丰富性之间确实存在权衡。然而,目前的研究表明,这些权衡并不像过去描绘的那样可怕。有关其中一个研究方向,请参阅this talk by Peter Bailis。如果你想要在最严格的意义上真正的可串行化或线性化,你需要遵守某些协调的下限以实现它们。
意见1在技术上是正确的,但对你引用它的方式不是很有帮助。 2PC在某种意义上是最优的,但由于可用性权衡,很少天真地实现。许多adhoc试图解决这些权衡导致协议不正确。其他人,比如Paxos和Raft,以一些复杂的代价成功地解决了这些问题。