《Spring Cloud学习笔记:分布式事务Seata》

1.分布式事务理论基础

1.1.本地事务

本地事务,也就是传统的单机事务,在传统的数据库事务中,必须要满足ACID四个原则:

《Spring Cloud学习笔记:分布式事务Seata》_第1张图片

1.2.分布式事务

分布式事务,就是指不是在单个服务或单个数据库架构下产生的事务。

  • 分布式事务是指涉及多个独立系统或服务的事务处理,在分布式系统中,不同的服务或应用程序可能被部署在不同的服务器上,这些服务需要协同工作来完成一个事务,事务的每个操作步骤都位于不同的节点上,需要保证事务的ACID与特性。 
  • 在传统的单机环境下,事务处理通常由单一的事务管理器(Transaction Manager)来管理,保证事务的原子性、一致性、隔离性和持久性(ACID),但在分布式系统中,由于存在网络延迟、节点故障等问题,事务处理变得更加困难。

每个微服务的本地事务,也可以称为分支事务,每一个分支事务就是传统的单体事务,多个有关联的分支事务一起就组成了全局事务,但全局事务跨多个服务、跨多个数据库,因此全局事务,即分布式事务并未遵循ACID的原则,归其原因就是参与事务的多个子业务在不同的微服务中,跨越了不同的数据库,虽然每个单独的业务都能在本地遵循ACID,但是它们互相之间没有感知,不知道有人失败了,无法保证最终结果的统一,也就无法遵循ACID的事务特性了,所以,我们必须保证整个全局事务同时成功或失败。 

哪些场景会产生分布式事务?

1. 跨数据源或跨数据库实例的分布式事务

比如有以下两个场景:

  • 单体系统下,同一个系统使用了多个数据库源连接不同的数据库
  • 分布式、微服务系统,各系统服务使用不同的数据库

2. 跨服务,即跨JVM进程的分布式事务

  • 分布式、微服务系统,各系统服务使用不同的数据库或者是同一个数据库,都会产生分布式事务,因为它们使用的是不同的数据库连接和事务管理器 

单体系统会产生分布式事务问题吗? 

  • 会,如果一个单体系统使用了多个数据源连接不同的数据库,也会产生分布式事务问题。 

只有一个库,会产生分布式事务问题吗?

  • 分布式、微服务系统,各系统服务使用不同的数据库,或者是同一个数据库,都会产生分布式事务,因为它们使用的是不同的数据库连接和事务管理器。 

分布式事务举例

  • 在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成。

例如电商行业中比较常见的下单付款业务的整体流程,包括下面几个行为:
《Spring Cloud学习笔记:分布式事务Seata》_第2张图片 

你可能感兴趣的:(spring,cloud,学习,笔记)