本地事务到分布式事务

1、数据库事务的ACID四大特性数据库

一、一致性:结算合理性,一个转帐这边扣除了1万块,另一边就必定要收到1万块,不能我这边扣除了一万块,那边只收到5千块,这个就不一致了!框架

二、原子性:一连串的动做事务,要么所有执行完毕,要么所有回退,不能够有执行一半留着一半的概念分布式

三、隔离性:两个事务之间相互不干扰,彼此独立隔离!spa

事务的隔离级别:队列

1)事务可能出现的问题以下:事务

脏读:读到别人还未最终提交的数据(可能别人最后回滚),读到的数据就不是准确最终的数据资源

不可重复读:一个事务前后两次读同一行数据都不同(有人在期间更新Update了)。例如:先判断一个主键是否存在,不存在则插入这个主键值1。这个事务中有两个任务,第一任务执行完发现没有这个主键值1,它就立刻准备第二个任务插入这个1,而此时有另外一个事务就在第一任务的时候碰巧插入一个主键值1,这时候若是事务1的第二个任务因为插入重复的主键会报错!!(针对的是 update)消息队列

幻读:同一个事务第一次全盘搜索的时候,原本查到有3条,第二次查询是4次。(幻读)。(一个事务中有两次同样的查询任务,先后两次查不同)it

注意幻读和不可重复读之间的区别(针对的是“insert”和“delete”)io

2)事务隔离级别

因为存在以上的事务风险,因此数据库提供了事务隔离级别:

读未提交(Read Uncommitted)读提交(Read Committed)可重复读(Repeated Read)

串行化(Serializable):

:这是数据库最高的隔离级别,这种级别下,事务“串行化顺序执行”,也就是一个一个排队执行。

四、持久性:事务对数据写入以后,就应当永久存在数据库中。

2、分布式事务

一、CAP理论:只能CP 或者 AP。可用性和一致性互斥。

  • 一致性(Consistency) : 客户端知道一系列的操做都会同时发生(生效)
  • 可用性(Availability) : 每一个操做都必须以可预期的响应结束
  • 分区容错性(Partition tolerance) : 即便出现单个组件没法可用,操做依然能够完成

二、BASE理论:

BA:基本可用:出现了不可预知的故障,但仍是能用

S:软状态:暂时性容许相关副本节点有中间状态

E:最终一致性,不要求强一致性,不过经过一些业务处理,稍微晚一点达到最终一致性便可!!

三、处理分布式事务的几种方法:

1) 2PC/AX  两次提交,资源管理器(MySQL)须要具有兼容AX协议。而且使用特定AX的链接池,如今有一个框架可使用!!

其实反观数据库的事务也会发现也有两次提交的概念!1)先写入数据2)submit/rallback 也都是是这个过程!

2) TCC:TRY/CONFIRM/CANCLE

3)TX-TCN:一种国人开源的解决方案

4) 使用MQ消息队列达到事务最终一致性

相关文章
相关标签/搜索