聊聊什么是分布式事务

聊聊,什么,分布式,事务 · 浏览次数 : 341

小编点评

**分布式事务** 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。 **跨JVM进程产生分布式事务的场景** * 微服务架构:微服务之间通过远程调用完成各自的事务操作。 **跨数据库实例产生分布式事务的场景** * 用户信息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息,需要分别删除用户信息及用户的订单信息,由于数据分布在不同的数据实例,需要通过不同的数据库链接去操作数据,此时产生分布式事务。 **多服务访问同一个数据库实例订单微服务和库存微服务的场景** * 远程调用让Service B成功了,由于网络问题远程调用并没有返回,此时本地事务提交失败就回滚了Service A的操作,此时Service A与Service B的数据就不一致了。

正文

概述

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,以上是百度百科的解释。

简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证数据库中的数据一致性以及原子性。

分布式事务产生的场景

查询了下,发现网上有很多人已经总结了,这里我先搬过来,然后在分析下,因为我觉得说的不清晰。

跨JVM进程产生分布式事务

典型的场景就是微服务架构:微服务之间通过远程调用完成各自的事务操作。比如:订单微服务和库存微服务,下单的同时订单微服务请求库存微服务减少库存。

image

跨数据库实例产生分布式事务

单体系统访问多个数据库实例当单体系统需要访问多个数据库(实例)时就会产生分布式事务。比如:用户信息和订单信息分别在两个MySQL实例存储,用户管理系统删除用户信息,需要分别删除用户信息及用户的订单信息,由于数据分布在不同的数据实例,需要通过不同的数据库链接去操作数据,此时产生分布式事务。

image

多服务访问同一个数据库实例

订单微服务和库存微服务即使访问同一个数据库也会产生分布式事务,不过这情况比较少,只有在跨服务访问的时候才会出现。

image

分布式服务调用链路

第一种,事务嵌套

image

第二种,事务分离

image

这两种是事务调用的最常见也是最典型的场景,但是都有一个问题,也是导致在多服务访问同一个数据库实例中出现分布式事务的场景:当远程调用让Service B成功了,由于网络问题远程调用并没有返回,此时本地事务提交失败就回滚了Service A的操作,此时Service A与Service B的数据就不一致了。

所以,不管是多数据库还是多应用服务的场景下的应用分布式部署,对于某一个业务下(比如订单扣减),一旦有异常,都需要回滚,一旦事务都成功了,都需要成功;而这中间有一个最大的影响因素,就是远程调用。由于远程调用的阻碍性,Serivce A与Service B并不能感知到彼此的事务是否执行成功,也就不能正确的回滚或是提交。而对于分布式解决方案的应用,其解决的就是这层远程调用的态势感知;即,根据各服务事务(分支事务)的执行情况来具体判断是否事务可以提交,而不是被远程调用所影响。

Seata的AT模式就是中间加了一层协调器TC,管理分支事务的执行状态;而Sagas模式则是通过事务的执行状态在事务间的传递来控制分支事务的提交与回滚。

参考:《分布式事务》

与聊聊什么是分布式事务相似的内容:

聊聊什么是分布式事务

### 概述 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,以上是百度百科的解释。 简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失

聊聊分布式事务一致性与本地消息表

我个人比较推崇本地消息表模式来实现最终一致性。首先本地消息表的设计不仅可以解决事务一致性的问题,对于消息队列常见问题中的消息丢失与消息幂等其实都是可以通过本地消息表来解决;其带来的好处是多重的。 ### 什么是分布式事务一致性 大白话就是对数据源进行拆分后,多库多机器的多数据库事务一致性问题。因为此

聊聊Seata分布式解决方案AT模式的实现原理

### 什么是Seata分布式事务解决方案 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。 ### AT模式 AT模式目前来看是Seata框架独有的一种模式,其它的分布式框架上

聊点琐碎,分享人生常态

大家有有没有这种感觉,就是怎么学习都学不会。感觉学的特别的吃力? 学自动化那会报了个班,大家也知道松勤这个线上机构吧。我报了,并且自动化代码也敲了5,6遍,很多问题也问过老师,也回答的很敷衍,也嫌我笨。那时就自我怀疑我是不是真的很笨。后来自我怀疑到我是不是不适合干这行。也很想知道大家的学习方式是什么

聊一聊 C# 弱引用 底层是怎么玩的

一:背景 1. 讲故事 最近在分析dump时,发现有程序的卡死和WeakReference有关,在以前只知道怎么用,但不清楚底层逻辑走向是什么样的,借着这个dump的契机来简单研究下。 二:弱引用的玩法 1. 一些基础概念 用过WeakReference的朋友都知道这里面又可以分为弱短和弱长两个概念

关于数智融合,看看这20位专家都聊了什么

摘要:由创原会与福佑卡车联合举办的2023年首场畅聊云原生活动在福佑卡车北京总部举办。 本文分享自华为云社区《畅聊云原生·第八期 | 关于数智融合,看看这20位专家都聊了什么》,作者:创原会。 畅聊云原生[第八期]探讨的话题选择了大家热议的“数智融合“,活动荣幸地邀请到福佑卡车技术合伙人陈冠岭、软通

Flask 上下文是什么 ?

哈喽大家好,我是咸鱼。今天我们来聊聊什么是 Flask 上下文 咸鱼在刚接触到这个概念的时候脑子里蹦出的第一个词是 CPU 上下文 今天咸鱼希望通过这篇文章,让大家能够对 Flask 上下文设计的初衷以及应用有一个基本的了解 Flask 上下文 我们在使用 Flask 开发 web 程序的时候,通常

什么是IPD项目管理模式?聊聊IPD下的产品研发流程

IPD(集成产品开发)涵盖了产品从创意提出到研发、生产、运营等,包含了产品开发到营销运营的整个过程。围绕产品(或项目)生命周期的过程的管理模式,是一套生产流程,更是时下国际先进的管理体系。IPD(集成产品开发)以产品成功、用户满意为最终目标,通过构建一套科学、持续、稳定、可重复、高质量的管理模式。

聊聊 QianKun JS 沙箱的那些事

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:空山 什么是沙箱 沙箱即 SandBox,它是一种安全机制,用于严格控制访问资源。通过在程序中创建一个独立的运行环境,把一些来源不可信、具有破坏力或者又是无法

计算机网络那些事之 MTU 篇

哈喽大家好,我是咸鱼 今天我们来聊聊计算机网络中的 MTU (Maximum Transmission Unit) 什么是 MTU ? MTU(Maximum Transmission Unit)是指数据链路层中的最大传输单元 通俗点来讲,MTU 是指数据链路层能够传输的最大数据帧的大小(以字节为单