分布式提交协议——2pc&3pc

以前在学习数据库理论时已经接触过事务的概念以及事务ACID特性,对于分布式事务,即涉及多个服务器的事务,其中一个很大的不确定性就是服务器和网络的故障情况。那么在分布式场景下我们有什么手段可以保证事务的原子性?

分布式事务

提起事务的一个很常见的例子便是银行的转账操作,比如A给B转账X元,需要将A的账户先减去X元,然后给B的账户加上X元。这个转账的多个操作便是事务。事务定义了一个服务器的操作序列,服务器需要保证在多个客户端和服务器出现故障时的原子性。

而分布式事务就是涉及到多个服务器的事务。还是以转账例子为例,在单机时数据库系统已经为我们保证了事务操作的原子性,但在分布式场景下,A和B的账户可能分布在不同的服务器上,这时候又该如何保证多个服务器之间的原子性?这便是分布式事务首先必须要解决的问题。

阅读更多