1.分布式事务

分布式事务无法完全取代单机事务,因为它存在自己的代价。

2. 分布式事务中的网络

优点:去中心化。因为进程是通过网络通信的,所以使得系统带来水平扩展性;更好的数据安全,提供更多的冗余,从而提高了系统的可用性。
缺点:共享数据变得困难,不使用共享内存而使用消息。在写入的时候冗余一份即消息复制。网络通信导致很大的延迟。而且网络会丢包。

3.基于锁的事务实现中遇到的问题

3.1 从2 phase lock到2 phase commit

所有的数据库操作例如插入删除更新都是采用2PL协议。是在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁。下面例子中对要访问的BOB和SMITH都要先进行封锁。
“两段”锁的含义
事务分为两个阶段:
第一阶段是获得封锁,也称为扩展阶段;
第二阶段是释放封锁,也称为收缩阶段。
所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。事务遵守两段锁协议
是可串行化调度的充分条件,而不是必要条件。可串行化的调度中,不一定所有事务
都必须符合两段锁协议。

在分布式系统中,同时解封锁的时候没法同时解BOB和SMITH的“封锁”。因此就引入了2PC


为了解决以上图中提到的两个问题,我们需要引入“协调器”进行跨机提交。


BOB和SMITH的提交日志会一起提交给协调器,然后协调器再先处理BOB的提交并解锁,再处理SMITH的提交并解锁。在提交前出问题都可以整个事务回滚。(这点与单机时情况类似)

与单机事务不同的是:
协调器处理BOB提交后,再让SMITH提交时,如果超时或者失败,则协调器祖师所有对SMITH账户的任意操作。(这时候BOB已经解锁可见的,但是SMITH账户状态未知。没成功时,BOB是一直封锁的,当进行恢复的时候,SMITH仍然是不可见的,是封锁的,没法根据状态进行回滚,这就与单机事务恢复时的情况不同了)

3.2 分布式日志记录

下图红色字体部分是额外需要记录的日志。

4. 基于MVCC的分布式事务的问题

MVCC使得读写之间可以并行。ORACLE和MYSQL不支持MVCC事务,是因为逻辑时间戳如果用一台机器去分配,这台机器就是单点,存在瓶颈。机器多了,逻辑时间戳去自增的时候,基本到几百台,就会使得这里产生瓶颈。

分布式事务由于延迟变大,可能性能还没有单机事务效率高,必须做更多的优化。