首页 > 解决方案 > 2PC(2阶段提交)和2 PL(2阶段锁定)之间的区别

问题描述

两者有什么区别?表面上的协议看起来不同,但我想了解两者之间真正的不同之处以及它们为什么不等价。

标签: databasedistributedpaxostwo-phase-commit

解决方案


2 Phase locking在单个数据库实例中实现的一种机制,以实现可序列化的隔离级别。可序列化事务级别是最强的隔离,即使并行执行事务,最终结果也与串行执行的事务相同。它的工作原理如下:

每当事务想要更新一个对象/行时,它必须获取一个写/独占锁。当事务想要读取一个对象/行时,它必须获取一个读/共享锁。不是在每次查询后立即释放锁,而是必须保持锁直到事务结束(提交或中止)。因此,在执行事务时,事务持有的锁数会扩大/增长。(读/写锁定行为类似于任何其他读/写锁定机制,因此这里不讨论)

在事务结束时,锁被释放,事务持有的锁数量减少。

由于锁是在一个阶段获得并在另一个阶段释放,即在获取阶段没有锁释放,在释放阶段没有新的锁获取,这称为2阶段锁定。


2 phase commit是一种跨多个数据库实例实现分布式事务的算法,以确保所有节点都提交或中止事务。

它的工作原理是让协调器(可以是启动事务的应用程序中的单独服务或库)发出两个请求 - 准备阶段 1 中的所有节点和提交(如果所有节点在准备阶段返回 OK)或 ABORT(如果返回任何节点NOT OK in PREPARE PHASE) 到阶段 2 的所有节点。

TLDR:

2 phase locking- 用于单个数据库实例中的可序列化隔离

2 phase commit- 跨分布式数据库/数据存储的多个节点的原子提交


推荐阅读