首页 > 其他分享 >分布式事务

分布式事务

时间:2022-10-09 10:06:33浏览次数:56  
标签:事务 提交 数据源 阶段 本地 分布式


 学习一下分布式事务。

 这篇文章尽可能的压缩篇幅,不做过多的介绍,像什么是事务就不介绍了。


 

# # 什么是分布式事务

  分布式事务一定来源于多数据源。如果只有一个数据源,也就不存在什么分布式事务了。 

分布式事务_多数据源

 

  分布式事务往往来源于,服务拆分后,每个服务都有自己数据库,然后变成了多数据源,本地事务已经不能再去处理事务了。

  来个例子就是:

分布式事务_分布式事务_02

 

# # 为什么会有分布式事务

  区分于本地事务,数据库本来是给我们提供事务支持的。 在多数据源以后,本地事务已经不能不能解决事务的问题。所以有了分布式事务。

  来看一个例子,为什么本地事务解决不了分布式事务的问题,又或者说,用本地事务解决分布式事务有什么问题?

  

分布式事务_分布式事务_03

 在多数据源的时候,一定会有这样的问题可能发生,就是对于两个数据库的操作,相当于是两个本地事务,但是两个本地事务并不能协作。如果 A数据源的事务提交成功了,而 B没有提交成功。 

 

# # 如何去解决分布式事务

 对于分布式事务的解决,像这种两个本地事务不能彼此通信的话,那就只能是通过第三个人,作为统一事务管理者,来协调两个本地事务。

 

# # 先看分布式事务协议

分布式事务_分布式事务_04

 

# # 分布式事务解决方案(理论部分):两阶段提交

  所谓两阶段提交,就是分为:准备阶段,和提交/回滚阶段

  两阶段提交,是基于XA协议的,强一致性的

  找一个中间人,作为分布式事务管理者,分阶段来处理。解决的上边提到的本地事务出现的问题。就是事务提交统一听指挥,最后提交结果都告诉我,都成功就提交,有一个失败就回滚。

  这里为了方便理解,举一个例子,就像是有游戏里边的组队打副本。一般都要有一个队长,开始打之前,对账会发一个通知,准备好打了吗?到队员那里去,所有的队员都有点准备好了。对账看到多有的人都回复了准备开了,就开始进副本了。如果有一个人回复没有准备好,或者迟迟没有回复,那队长就不开副本,并且告知其它队友,有一个货还没准备好,先不开始打,什么时候打,我再通知。

分布式事务_分布式事务_05

 

 

  分析一下两阶段提交的问题:比方说询问的时候,明明事务没有接到 准备的通知,或者事务的参与者准备好了,却发了回了准备好的信息,事务管理者却没有收到。同理,在 commit 阶段 同样会有这样问题。

 

# # 分布式事务解决方案(理论部分):三阶段提交

 三阶段提交就是未来解决两阶段提交的问题,加一个阶段,超时阶段。

 

# #  分布式事务解决方案(理论部分):TCC事务

 TCC 事务是最终一致性,是两阶段提交的一个变种。

 具体实现方案有:本地消息表,MQ

分布式事务_分布式事务_06

 

# #分布式事务解决方案 :saga事务

 ~

 

# # 这么多分布式解决方案,到底选哪一个呢

  其中两阶段提交已经有开源的方案,而阶段提交却没有一个具体的开源方案,因为具体超时的原因不知道,实现没有意义。

分布式事务_多数据源_07

分布式事务_解决方案_08

 

 

 

标签:事务,提交,数据源,阶段,本地,分布式
From: https://blog.51cto.com/u_15812686/5739740

相关文章

  • spring 的相关的事务失效的问题总结
     这一个问题,真的是很有意思。之前不了解的时候觉得会用就行了。但是真的不知道里边这么多坑。不过这些坑都真的很有意思。它推着你去了解底层。推着你看源码,了解实现原理......
  • 详解负载均衡技术及分布式架构
     面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我......
  • day08-MySQL事务
    MySQL事务先来看一个例子有一张balance表:需求:将tom的100块钱转到King账户中执行的操作是:updatebalancesetmoney=money-100whereid=100updatebalanc......
  • Spring事务管理
    Spring事务管理1.1、什么是事务(Transaction)是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql能将逻辑相关......
  • 分布式存储系统之Ceph集群RBD基础使用
    前文我们了解了Ceph集群cephx认证和授权相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16748149.html;今天我们来聊一聊ceph集群的RBD接口使用相关话题;......
  • 分布式服务发现与配置之Consul
    文档: https://www.consul.io/docs/install 一、什么是consul1、Consul是HashiCorp公司推出的开源软件,用于实现分布式系统的服务发现与配置。Consul是分布式的、......
  • jmeter分布式压力测试 - 15
    主控机和远程机需要同时都安装JDK,和同一个版本的jmeter主控机:1、安装JDK和jmeter2、/bin/jmeter.properties中找到remote_hosts修改为remote_hosts=127.0.0.1,192.168.3......
  • 玩转分布式架构下的可观测性
    可观测性背景云原生可观测性是从传统软件监控及数据分析可视化工具中,总结出在云原生领域中,从底层容器基础设施、通用技术组件到业务应用系统全链路监控运维、运营治理等产品......
  • CompletableFuture事务问题
    前段时间写了关于CompletableFuture的使用博客,​​CompletableFuture使用方法详细说明​​​和​​CompletableFuture的thenCompose使用具体说明​​。但在实际中使用的时......
  • CompletableFuture事务问题
    前段时间写了关于CompletableFuture的使用博客,​​CompletableFuture使用方法详细说明​​​和​​CompletableFuture的thenCompose使用具体说明​​。但在实际中使用的时......