两阶段提交:可用性、可伸缩性和性能问题



我读了很多文章,很困惑。

意见1:2PC非常高效,交换的消息数量很少,延迟很低。来源:http://hilicalability.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条是正确的。请说明什么是错的,什么是对的。如果能给出原因就更好了

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

意见3应放在Spanner论文其余部分的上下文中阅读。作者说,他们已经开发了一个系统,允许在分布式数据库中进行高效的事务处理,他们认为这对系统用户来说是正确的默认权衡。Spanner的方法在论文中有很详细的描述,值得一读。请注意,Spanner只是一种组织协调的方法(一种聪明的方法,承认),这种协调是实现可序列化事务所固有的。参考吉尔伯特和林奇的一种看待协调限制的方法)。

意见2是一种普遍的信念,在现实世界的分布式系统中,事务语义的可用性和丰富性之间确实存在权衡。然而,目前的研究清楚地表明,这些权衡并不像过去所描述的那样可怕。请看Peter Bailis的演讲了解其中一个研究方向。如果你想要真正的序列化性或线性性,在最严格的意义上,你需要服从协调的某些下界,以实现它们。

观点1在技术上是正确的,但你引用它的方式不是很有帮助。在某种意义上,2PC是最优的,但由于可用性的权衡,很少天真地实现。许多处理这些折衷的临时尝试会导致不正确的协议。其他的,如Paxos和Raft,成功地解决了这些问题,但代价是一定的复杂性。

最新更新