分布式事务之理论基础

1、什么是事务? 事务(Transaction)是关系型数据库中,由一组sql组成的一个执行单元,该单元要么整体成功,要么整体失败; 2、事务的ACID特性 事务ACID特性:原子性,一致性,隔离性,持久...

1、什么是事务?

事务(Transaction)是关系型数据库中,由一组sql组成的一个执行单元,该单元要么整体成功,要么整体失败;

2、事务的ACID特性

事务ACID特性:原子性,一致性,隔离性,持久性。这4个属性统称为ACID特性。

原子性:指事务包含的左右操作sql,要么整体成功,要么整体失败。

一致性:事务前的状态和事务后的状态一致;

attachments-2022-06-KZdkOAE762b2cfae6ccf7,png

持久性:指一个事务一旦被提交,那么数据就储存在磁盘里,不丢失;

隔离性:指多个并发独立事务,相互独立、相互隔离、互不影响;

            如果事务没有隔离,会出现3种严重的问题:

             2.1脏读

                       指一个事务的处理过程中,读到了另外一个未提交的事务的数据

attachments-2022-06-5NPkxwtS62b2d02fca7cd,png


2.2不可重复读

                指多次查询却返回了不同的数据值,这是由于查询间隔时,被另外一个事务修改了数据并提交;

attachments-2022-06-FpjSWcZe62b2d05ed6a5d,png


  2.3幻读

                    指当A事务在读取某个范围内的记录时,B事务又在该范围内插入了新的记录,当A事务再次读取该范围内的记录,就产生了幻读;

attachments-2022-06-1UDmrxC862b2d1a1f41c4,png脏读和不可重复读有什么区别?

                           脏读:读到的数据是前一个事务未提交的数据

                           不可重复读:读到的是前一个事务已提交的数据

                幻读和不可重复读有什么区别?

                           相同点:读到是都是前一个事务已经提交的数据

                          不同点:不可重复读:读的是一个数据值

                                         幻读:读的是一批数据

3、本地事务和分布式事务的区别?

     本地事务:关系型数据库中,由一组sql组成的一个执行单元,该单元要么整体成功,要么整体失败;

    分布式事务:指一个业务需要同时操作多个数据库的情况下,而且必须保持ACID的特性,一般应用于微服务的多服务处理;

 

4、什么是分布式CAP定理

attachments-2022-06-LQs0VAiz62b2d1e588885,png

4.1 zookeeper的cap原理

attachments-2022-06-xSPQY9jY62b2d1fe9acdf,png

zookeeper是cp的原理,保证了数据一致性,牺牲了可用性

zk的数据同步原理:例:client1注册给了server1,server1同步给了server2,server2广播同步给了各个follower,为了保证数据的一致性,只有整个过程都成功了,client1才收到注册成功;

当leader故障,整个zk会重新选举leader,在选举期间,client不能注册,即zk不可用,牺牲了可用性;

4.2 eureka的cap原理

attachments-2022-06-wDjreyNs62b2d21bbaa0b,png                                                              eureka是ap原理,保证了可用性,牺牲了一致性


eureka的数据同步原理:client1注册给了server1,server1直接告诉client成功,server1的数据会同步给server2,为了保证服务的可用性,他们是异步同步的

5 什么是分布式BASE定理?

BASE是basically available(基本可用),soft state(软状态),eventually consistant(最终一致性)三个短语的缩写

attachments-2022-06-rU2Drsj862b2d26128f9c,png

基本可用性

             损失响应时间:cap可用性的服务响应时间可能是10ms,但base基本可用性的响应时间为1s

              损失系统功能:允许某个服务出现故障时,采用服务降级等手段保证用户的体验

软状态:不完全符合ACID的原子性,可以通过mq方式进行异步同步;

最终一致性:数据不用即时同步;

 

6、什么是分布式事务DTP模型?

attachments-2022-06-btgO9L7n62b2d27e58519,png

                                                                                                   分布式通信协议XA规范


attachments-2022-06-vmx22byL62b2d2b8eb73f,png

7、两阶段提交与三阶段提交


attachments-2022-06-96XpKFWs62b2d8df3593d,png

attachments-2022-06-7QjpTWY162b2d8f28550b,png

2阶段提交与3阶段的区别?

1、增加了超时机制,同时为协调者与参与者都引入了超时机制

2、在2阶段的第一与第二中间插入一个提交准备的阶段,插入的这个阶段能保证最后提交阶段之前,各个参与节点的状态都是一致的

7.1  2阶段的单点故障和网络脑裂问题

attachments-2022-06-mjRMokaf62b2d92e01cc0,png

attachments-2022-06-ij2ivsB962b2d93e58020,png

attachments-2022-06-48LsVdFL62b2d977251ca,png

7.2  3阶段的单点故障与网络脑裂问题

attachments-2022-06-IziuI03z62b2d9bd61c9e,png

8、刚性事务的致命性问题

性能!!!!事务锁住的时间太长。

因为参与者不能提交事务,要等其他参与者都OK,才能提交,阶段越多,性能越差;

attachments-2022-06-NXFwX4sI62b2d9e007755,png

特别是对于互联网高并发的系统来说是不合适的,全局事务一般适合并发量小的系统。

对于互联网高并发的系统一般采用柔性事务。


  • 发表于 2022-06-22 16:24
  • 阅读 ( 33 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章