什么是分布式事务? | 带你读《Spring Cloud Alibaba(2019)》之十八

简介: 本节介绍了分布式事务的背景、定义、主流分布式解决框架等。

上一篇:Sentinel实现热点词限流 | 带你读《Spring Cloud Alibaba(2019)》之十七
下一篇:SpringCloud 解决分布式事务的两种方式 | 带你读《Spring Cloud Alibaba(2019)》之十九

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

分布式事务产生的背景

分情况来定。
1、在单体的项目中,多个不同业务逻辑都是在同一个数据源中实现事务管理,是不存在分布式事务此时出现异常会直接抛出,用户体验不好,可以此时问题,因为同一数据源的情况下都是采用事务管理器,相当于每个事务管理器对应一个数据源。

image.png

2、在单体的项目中,有多个不同的数据源,每个数据源中都有自己独立的事务管理器,互不影响,那么这时候也会存在多数据源事务管理:解决方案jta+ Atomikos

image.png

3、在分布式/微服务架构中,每个服务都有自己的本地的事务,每个服务本地事务互不影响,那么这时候也会存在分布式事务的问题。

image.png

事务的定义

对我们的业务逻辑可以实现提交或者回滚,保证数据的一致性的情况。
所以要么提交,要么回滚。
ACID
A原子性:要么提交 要么回滚
C一致性
I隔离性:多个事务在一起执行的时候,互不影响;
D持久性:事务一旦提交或者回滚后,不会在对该结果有任何影响

Rpc通讯中产生的分布式事务的问题原因

  1. 调用方(订单服务)调用完rpc接口之后,突然程序抛出异常,调用方的事务回滚了,但是被调用方接口没有回滚。
    订单服务回滚了,派单成功,在每个jvm中都有自己的本地事务,每个事务都互不影响。
  2. 被调用方(派单服务)的接口失败的话,调用方可以根据返回的结果,手动回滚调用方本地事务

解决分布式事务的最大核心是什么?

  1. 最终一致性 在分布式系统中, 因为rpc通讯是需要时间的,短暂的数据一致这是允许的,但是最终数据一定要保持一致性;
  2. 全局协调者

Base与CAP理论

这个定理的内容是指的是在一个分布式系统中、Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

一致性C:在分布式系统中,同一时刻所有的节点的数据都是相同的;
可用性A: 集群中部分节点出现了故障,集群的整体也能够给响应;
分区容错性P:分区容错性是指系统能够容忍节点之间的网络通信的故障,意味着发生了分区的情况,必须就当前操作在C和A之间做出选择;

CP:当你网络出现故障之后,只能保证数据一致性,但是不能保证可用性; zk
AP:当你网络出现故障之后,不能保证数据一致性,但是能够保证可用性 eureka

zk集群中所有的写的请求统一交给我们的领导实现,领导将数据写完后,在同步给每个从节点。

每个节点之间的数据同步需要保持数据一致性的问题。

Zk将数据写入完毕之后,zk是如何将数据同步给每从节点保持数据一致性呢

第一节点 准备节点 zk领导会给每个从节点发一个通知,是否可以同步该数据
所有的从节点回复给zk领导同步数据。
第二节点 zk领导收到zk从节点回复的可以同步数据的话,再直接将数据同步给每个从节点。

BASE是Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的缩写

目前主流分布式解决框架

  1. 单体项目多数据源 可以jta+ Atomikos
  2. 基于rabbitmq的形式解决 最终一致性的思想
  3. 基于rocketmq解决分布式事务 采用事务消息
  4. LCN采用lcn模式 假关闭连接 (目前已经被淘汰)
  5. Alibaba的Seata 未来可能是主流 背景非常强大

两阶段提交协议基本概念
两阶段提交协议可以理解为2pc,也就是分为参与者和协调者,协调者会通过两次阶段实现数据最终的一致性的。

2PC和3pc的区别就是解决参与者超时的问题和多加了一层询问,保证数据的传输可靠性。

相关文章
|
1月前
|
负载均衡 Java API
Spring Cloud 面试题及答案整理,最新面试题
Spring Cloud 面试题及答案整理,最新面试题
138 1
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
204 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
147 0
|
8天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
8天前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
24 2
|
23天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
23天前
|
开发框架 负载均衡 Java
Spring boot与Spring cloud之间的关系
总之,Spring Boot和Spring Cloud之间的关系是一种构建和扩展的关系,Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。
18 4
Spring boot与Spring cloud之间的关系
|
24天前
|
SQL 数据库 Windows
SpringCloud集成seata分布式事务控制
SpringCloud集成seata分布式事务控制
16 0
|
28天前
|
敏捷开发 监控 前端开发
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构
66 0
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
65 1

热门文章

最新文章