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

分布式事务

时间:2023-12-10 16:55:38浏览次数:27  
标签:事务 分库 数据库 XA 操作 分布式

什么是分布式事务?

  对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题。

  简单的说,在分布式系统上,一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务节点上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

  举个例子:在电商网站中,用户对商品进行下单,需要在订单表中创建一条订单数据,同时需要在库存表中修改当前商品的剩余库存数量,两步操作一个添加,一个修改,我们一定要保证这两步操作一定同时操作成功或失败,否则业务就会出现问题。

  任何事务机制在实现时,都应该考虑事务的ACID特性,包括:本地事务、分布式事务。对于分布式事务而言,即使不能都很好的满足,也要考虑支持到什么程度。

 

典型的分布式事务场景:

1. 跨库事务

  跨库事务指的是,一个应用某个功能需要操作多个库,不同的库中存储不同的业务数据。

2. 分库分表

  通常一个库数据量比较大或者预期未来的数据量比较大,都会进行水平拆分,也就是分库分表。

  对于分库分表的情况,一般开发人员都会使用一些数据库中间件来降低sql操作的复杂性。进行了分库分表后,开发人员希望将1号记录插入分库1,2号记录插入分库2。所以数据库中间件要将其改写为2条sql,分别插入两个不同的分库,此时要保证两个库要不都成功,要不都失败,因此基本上所有的数据库中间件都面临着分布式事务的问题。

3. 微服务化

  Service A完成某个功能需要直接操作数据库,同时需要调用Service B和Service C,而Service B又同时操作了2个数据库,Service C也操作了一个库。需要保证这些跨服务的对多个数据库的操作要不都成功,要不都失败,实际上这可能是最典型的分布式事务场景。

  分布式事务实现方案必须要考虑性能的问题,如果为了严格保证ACID特性,导致性能严重下降,那么对于一些要求快速响应的业务,是无法接受的。

 

分布式事务有哪些解决方案?

什么是分布式的XA协议?

  XA协议是一个基于数据库分布式事务协议,其分为两部分:事务管理器本地资源管理器。事务管理器作为一个全局的调度者,负责对各个本地资源管理器统一号令提交或者回滚。二阶提交协议(2PC)三阶提交协议(3PC)就是根据此协议衍生出来而来。主流的诸如Oracle、MySQL等数据库均已实现了XA接口。

  XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。也就是说,在基于XA的一个事务中,我们可以针对多个资源进行事务管理,例如一个系统访问多个数据库,或即访问数据库、又访问像消息中间件这样的资源。这样我们就能够实现在多个数据库和消息中间件直接实现全部提交、或全部取消的事务。XA规范不是java的规范,而是一种通用的规范

 

 

 

 

 

 

 

 

标签:事务,分库,数据库,XA,操作,分布式
From: https://www.cnblogs.com/cjhtxdy/p/17892860.html

相关文章

  • 分布式锁
    为什么需要分布式锁?在多线程环境中,如果多个线程同时访问共享资源(例如商品库存、外卖订单),会发生数据竞争,可能会导致出现脏数据或者系统问题,威胁到程序的正常运行。我们需要使用互斥操作对共享资源进行保护,即同一时刻只允许一个线程访问共享资源,其他线程需要等待当前线程释放后......
  • 架构核心技术之分布式消息队列
    Java全能学习+面试指南:https://javaxiaobear.cn今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。主要介绍以下内容:同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型和发布订阅模型......
  • 基于Docker容器搭建hadoop完全分布式集群环境
    简介物理机:windows10宿主机:Centos7虚拟机,需要安装Docker服务hadoop集群节点:3个centos7的容器,hadoop1、hadoop2、hadoop3组件:容器镜像:Centos7DockerCE24.0.7JDK1.8.0_181Hadoop3.1.31.新建虚拟机安装CentOS72.安装Docker2.1安装docker服务yum-yinstalldocke......
  • 分布式ID
    1.分布式ID什么是ID?日常开发中,我们需要对系统中的各种数据使用ID唯一表示,比如用户ID对应且仅对应一个人,商品ID对应且仅对应一件商品,订单ID对应且仅对应一个订单。简单来说,ID就是数据的唯一标识。什么是分布式ID?分布式ID是分布式系统下的ID。举一......
  • MySQL事务出现死锁的原因
    竞争同一资源:当两个或多个事务同时需要同一资源时,它们会互相等待对方释放资源,从而产生死锁。事务顺序不一致:考虑两个事务A和B。如果A先锁定了资源1,并试图锁定资源2,而B已经锁定了资源2并试图锁定资源1,这时就发生了死锁。隐式锁定:在某些情况下,MySQL会隐式地锁定某些......
  • 分布式学习记录,第三天
       在分布式学习的探索之旅中,我们继续深入学习并实践了分布式学习的核心概念和技巧。第三天,我们主要关注于分布式学习中的同步和异步策略,以及如何优化通信开销以进一步提高学习效率。    首先,我们讨论了分布式学习中的同步策略。同步策略是指在所有计算节点上同时进......
  • 分布式架构和微服务架构的概念理解
    分布式架构相当于物理上的拆分,微服务架构相当于逻辑上的拆分。比如一个互联网平台有mes系统,wms系统,把mes系统单独部署在一个服务器上,把wms系统单独部署在另一个服务器上,这就相当于是一个物理拆分的分布式架构。如果mes的生产模块会有大量的请求此时只能针对整个mes系统进行集群部署......
  • Redis基础(七)-Redis6的事务操作
    Redis的事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis的事务作用Redis事务的主要作用就是串联多个命令防止别的命令插队。Multi、Exec、discard从输入Multi命令开始,输入的命......
  • Mysql的事务操作问题
    什么是数据库事务?一组sql语句组成的数据库逻辑处理单元,在这组的sql操作中,要么全部执行成功,要么全部执行失败。事务支持是在引擎层实现的。MySQL原生的MyISAM引擎不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。你能说一说Redo/Undo机制吗?Redo/Undo机制比较简单,它们将所......
  • 解密 ArcGraph 分布式一致性:Raft 协议与分布式事务实现丨技术专栏
    导读:本文提出了一种将事务日志和Raft日志融合在一起的机制,从而实现了分布式事务和数据一致性的场景。01背景介绍分布式系统是伴随着互联网的高速发展而出现的。其出现为了应对单机系统无法解决的高并发、高可用性、容错性等问题。分布式系统将传统的系统扩容模式,从scaleup......