分布式事务

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

分布式事务

在现代软件开发当中,分布式系统已经变得非常普遍。这样的系统通常会跨越多个数据库、服务或者消息队列,这就带来了��个挑战:如何确保跨多个分布式组件的操作都能保持事务性。分布式事务就是为了解决这个问题而产生的。

什么是分布式事务?

分布式事务 是指事务的操作分散在不同的节点上,需要确保这些节点要么都成功执行,要么都不执行。在分布式事务中,通常需要协调不同节点上的操作,确保它们能够一致地提交或回滚。

常见的分布式事务处理方式

1. 两阶段提交(2PC)

两阶段提交是一种经典的分布式事务协议。其工作原理概括如下:

  • 阶段一(准备阶段):事务协调者询问所有参与者是否准备好提交事务,并等待响应。

  • 阶段二(提交/回滚阶段):如果所有参与者都准备好提交,协调者发出提交请求;如果任何参与者无法提交,协调者则发出回滚请求。

2. 三阶段提交(3PC)

三阶段提交是两阶段提交的改进版,目的是减少阻塞时间,其增加了一个预提交阶段:

  • 阶段一(询问阶段):协调者询问所有参与者是否可以提交事务。

  • 阶段二(预提交阶段):参与者准备数据并锁定资源,准备就绪后通知协调者。

  • 阶段三(提交/回滚阶段):根据参与者的反馈,协调者决定是否提交或回滚事务。

3. 基于补偿的事务(Saga Pattern)

Saga 模式通过将长期事务分解为一系列本地事务来管理分布式事务,每个本地事务都有一个相应的补偿操作(撤销操作)。Saga确保:

  • 所有操作成功完成,则事务成功。

  • 如果某个操作失败,则执行之前成功操作的补偿。

4. 分布式事务中间件

目前市面上有许多分布式事务中间件,如:

  • Apache Dubbo/DubboX

  • Atomikos

  • JTA (Java Transaction API)

这些中间件提供了更为便捷的方式来实现分布式事务管理,而不需要开发人员深入了解底层协议。

分布式事务的挑战

尽管分布式事务很有用,但它们也带来了一些挑战:

  • 性能开销:分布式事务需要更多的系统资源和更长的处理时间。

  • 复杂性:实现和管理一个分布式事务系统往往比单个数据库事务系统更复杂。

  • 一致性与可用性的平衡:在某些情况下,保持一致性会牺牲系统的可用性。

理解和掌握分布式事务是现代软件工程师的一个重要技能,特别是在云计算和微服务架构日益流行的今天。

最后更新于