2PC vs. Paxos

摘自《大规模分布式存储系统

2PC提交协议可能面临两种故障:

总而言之,2PC提交协议是阻塞协议。执行过程中需要锁住其他更新,且不能容错,大部分分布式存储系统都采用敬而远之的做法,放弃对分布式事务的支持。

Paxos协议和2PC协议在分布式系统中所起的作用并不相同。Paxos协议用于保证同一个数据分片的多个副本之间的数据一致性。当这些副本分布到不同的数据中心时,这个需求尤其强烈。2PC协议用于保证属于多个数据分片上的操作原子性。这些数据分片可能分布在不同的服务器上,2PC协议保证多台服务器上的操作要么全部成功,要么全部失败。

Paxos协议有两种用法:一种用法是用它来实现全局的锁服务或者命名和配置服务,比如chubby和zookeeper. 另外一种用法是用它来将用户数据复制到多个数据中心比如megastore和spanner.

2PC协议最大的缺陷在于无法处理协调者宕机问题。如果协调者宕机,那么2PC协议中的每个参与者可能都不知道事务应该提交还是回滚,整个协议被阻塞,执行过程中申请的资源都无法释放。 因此常见做法是将2PC和Paxos协议结合起来 通过2PC保证多个数据分片上操作的原子性,通过Paxos协议实现同一个数据分片的多个副本之间的一致性,另外通过Paxos协议解决2PC协议中协调者宕机问题。当2PC协议中的协调者出现故障时,通过Paxos协议选举出新的协调者继续提供服务。