为什么需要分布式事务
相对于 本地事务(单个数据源上进行数据访问和更新) 而言,分布式事务是跨越多个数据源进行数据的访问和更新,即,事务的发起者、参与者、数据资源服务器以及事务管理器分别位于分布式系统的不同节点上。
分布式事务的目的是保障分布式环境下的数据一致性。
CAP
说到一致性,我们都知道,分布式系统有一个著名的CAP定理,即:一致性、可用性和分区容忍性无法同时满足,最多只能实现两点。
Consistency
一致性 - 所有节点在同一时间的数据完全一致。
按照CAP定理的取舍,有三类一致性模型:
- 强一致性
更新完成后,任意时刻读取到的所有节点中的数据都是一致的。一般采用加锁同步的方式实现,对性能影响较大,会牺牲可用性。
- 弱一致性
更新完成后,系统不承诺可以立即读到最新写入的值,也不承诺具体多久之后可以读到。
- 最终一致性
弱一致性的一种形式,更新完成后,系统不承诺可以立即返回最新写入的值,但是保证最终会返回上一次更新操作的值。
注:CAP的C特指强一致性,弱一致性和最终一致性是为了弥补AP之下的数据一致性。
Availability
可用性 - 即,服务可用,能正常的接收请求并及时给予响应,不出现操作失败或访问超时等影响体验的情况。
注:这里的可用性不是通常所说的高可用,而是指服务器虽然在线,但却不能对外提供写入服务。
Partition Tolerance
分区容忍性 - 在遇到部分节点或网络分区故障时,仍能对外提供满足一致性或可用性的服务。
网络分区是指独立的机器无法在期望的时间内完成数据交换,这不仅仅指网络断开,还可能有其他情况产生网络分区,比如宕机、网络延时等。