我在M2公司做架构之事务管理

一、什么是事务?

事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完。

从中也体现的事务的四大特性,分别为如下:

  • 原子性;
  • 一致性;
  • 隔离性;
  • 持久性。

1.原子性

事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。

2.一致性

事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。

3.隔离性

可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。

4.持久性

一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

二、为什么要有事务?

  • 事务的提出就是为了解决并发情况下保持数据一致性的问题;
  • 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

三、什么是分布式事务?

分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。

四、为什么要有分布式事务?

分布式系统必然会涉及到不同微服务之间的数据交互(数据的CRUD),如果没有分布式事务,那么分布式数据的一致性或者说最终一致性很难实现,数据不一致的情况如果过于频繁,那么对于商业系统而言,将是毁灭性的打击。

我曾写过关于分布式一些基础理论的思考,感兴趣的朋友可以阅读,文章列表如下:
BASE理论之思考

CAP理论之思考

从单体架构到分布式微服务架构的思考

五、分布式现有的解决方案有哪些?

  • 两阶段提交方案(又称2PC);
  • 三阶段提交方案(又称3PC);
  • eBay事件队列方案;
  • TCC补偿模式;
  • 缓存数据最终一致性。

六、基于上面五个解决方案,Java有哪些现成的技术方案可以实现?

而上述方案均可以与分布式项目紧密结合。

去年使用过Tx-LCN作为公司的分布式事务,写了几篇文章,感兴趣的朋友可以阅读:
TX-LCN分布式事务框架使用

LCN 错误: attempts to join the non-existent transaction group

here is no normal TM

分布式事务的解决方案,最重要的一点是:
深度理解业务需求,结合业务的特点,采取适合的分布式事务方案,不同的业务对于数据的一致性是不一样的,有的偏弱,有的偏强,有的简单,有的复杂,一定要具体业务具体分析,并采用合适的技术方案给予实现。当初我采用了Tx-LCN实现分布式事务失败的原因,就是因为我没有结合实际情况,有些为了技术而技术。

文章目录
  1. 一、什么是事务?
    1. 1.原子性
    2. 2.一致性
    3. 3.隔离性
    4. 4.持久性
  2. 二、为什么要有事务?
  3. 三、什么是分布式事务?
  4. 四、为什么要有分布式事务?
  5. 五、分布式现有的解决方案有哪些?
  6. 六、基于上面五个解决方案,Java有哪些现成的技术方案可以实现?