单机场景的事务大家可能都比较了解,对于事务的实现来说,分布式场景相比单机场景要考虑的东西更多一些,比如复杂的网络环境,这也是分布式系统最大的挑战之一,如何确认各个节点的状态,保证一致性等问题都是我们要考虑的。对于分布式事务原理,我们在工作中可能不会经常去使用它,但是它几乎存在于每一个我们接触的分布式系统中,重要性显而易见。
本篇面试内容划重点:分布式 ACID、2PC 的优缺点,3PC 解决的问题。
事务的四大特性 ACID
回顾一下我们熟悉的事务的四个特性(ACID),分布式的场景下,这四个特性依旧成立,只是实现的方式会与单机的场景有所不同。
Atomic(原子性)
事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。在分布式的场景下,为保证原子性,有了 2PC 和 3PC 等协议的出现。
Consistency(一致性)
事务的执行不能破坏数据库数据的完整性和一致性,事务在执行之前和之后,数据库都必须处于一致性状态。这个一致性和 CAP 中的一致性不同,强调状态的一致性,CAP 中的一致是共识问题(consensu),之前的章节也说过了。
Isolation(隔离性)
在并发环境中,并发的事务是相互隔离的