Spring Cloud Alibaba个人总结之Seata(分布式事务)

Spring Cloud Alibaba -Seata(分布式事务)​ 和钱有关的可以保证强一致性,可以不保证可用性。学习目标#事务的概念 #分布式事务的概念#2pc流程#2pc 和 3pc区别 #3pc流程 #Seata配置一. 前言:事务回顾1.事务的概念一组SQL对数据库的操作 要么全部执行 要么全部不执行 这是一个不可分割的执行单元2.事务的特性
摘要由CSDN通过智能技术生成

Spring Cloud Alibaba -Seata(分布式事务)

和钱有关的可以保证强一致性,可以不保证可用性。

学习目标

#事务的概念 
#分布式事务的概念
#2pc流程
#2pc 和 3pc区别       
#3pc流程 
#Seata配置

一. 前言:事务回顾

1.事务的概念

一组SQL对数据库的操作 要么全部执行 要么全部不执行 这是一个不可分割的执行单元

2.事务的特性

        a.原子性
			一个事务的操作要么全部操作 要么全部不操作
		b.一致性
			银行转账 A/B账号转账前和后 两个账号总额要相同
		c.隔离性
			多个进程不能收到各自的影响 各自隔离
		d.持久性
			事务提交后 出现任何事故都不能导致数据回滚 持久到数据库中的数据

二 . 分布式事务问题

1. 概念:

	由多个本地事务组成的事务 叫做分布式事务

​ 2.如何解决分布式事务问题

3.XA协议解决方案

a.2pc
            第一阶段
				事务协调者向事务参与者发起一个prepare请求 
				各个参与者收到请求后 各自执行各自的本地事务 
				各个参与者完成各自本地事务之后给协调者一个done的命令
			第二阶段
				如果第一阶段没有问题 协调者发送一个commit请求 给事务参与者提交各自本地事务
				如果第一阶段出现问题 协调者发送一个abort请求 给事务参与者回滚各自本地事务
b.2pc遇到的问题
1).性能问题
				在分布式事务没有进行提交的时候 单个节点会一直占用资源
			2).协调者单点故障问题
				老大没啦 小弟慌的不行
			3).丢失消息导致的不一致问题
				如果在第二阶段 某个节点挂了 收不到数据 就不能保证数据一致性
c.3pc
1).协调者单点故障问题
				事务协调者和参与者都设置一个超时机制
				超时过后 它会自动提交本地事务 顺便也解决了性能问题
			2).依然没有解决消息不一致问题
d.如何解决消息不一致问题

每个服务内部的数据一致性由本地事务来保证, 但是全局的数据一致性问题,没法保证.

一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用就会产生分布式事务问题

痛点 : 全局的数据一致性问题,没法保证

采用消息中间件 rabbitmq

4.CAP定理

​ a.可用性(Availability)
​ b活着,就是少了一些数据,无伤大雅,影响不大
​ 勉强可用,修复网线之后,数据恢复正常,系统一切恢复正常
​ b.一致性(Consistency)
​ 数据对应我们系统运行非常重要,数据如果不一致,会出现严重的问题,此时
​ 只有等待A机器恢复
​ c.分区容错性(Partition tolerance)
​ 节点被隔离,运行系统容错
​ d.如何选择
​ CP 一定要保障数据一致性 只能等待网络恢复 ,系统不可用
​ AP 保证系统可用性 不要求数据一致性
​ CA 没有这种组合(单机节点)

三 Seata 简介

1. 是什么

Seata 是一款开源的分布式事务解决方案 , 致力于在微服务架构下提高性能和简单应用的分布式事务服务.

2. 流程(面试题)

在这里插入图片描述

  • - 事务协调器 TC :  维护全局和分支事务的状态,指示全局提交或者回滚。
    - 事务管理者 TM :  开启、提交或者回滚一个全局事务。  
    - 资源管理者 RM(数据库) :  管理执行分支事务的那些资源,向TC注册分支事务、上报分支事务状态、控制分支事务的提交或者回滚。
    

白话解图

TM(班主任任老师) TC(张强授课老师) 微服务(小组,一个组20人) RM(各位同学)

① TM 请求 TC, 开始一个新的全局事务,TC 会为这个全局事务生成一个 唯一XID

班主任任老师找张老师. 申请开班, 张老师会在网络平台上建立网络教室并生成一个网络ID. (XID)  并回滚给班主任

②XID 通过微服务的调用链传递到其他微服务。

班主任把 XID 通过微信消息 发给各个小组,并上下文传播.

③ RM 向TC 注册分支事务, 将其纳入XID 对应全局事务的管辖 ;

各位同学上网课,(张三,李四)向张老师报道,并加入张老师管理.

④TM 请求 TC 对这个 XID 进行提交或回滚

班主任统计人数情况, 人已到齐并通知张老师可以开始上课了, 从头到尾控屏全班都能听到.

⑤ TC 指挥这个 XID 下面的所有分支事务进行提交、回滚。

张老师在这个XID的网络教室授课, 结课提交通知下课

4. 怎么用

本地 : @Transactional------>Spring的

全局: @ GlobalTransactional ------>Spring Cloud

四 Seata使用

1. 引入依赖

<!--Seata依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-seata</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

2 registry.conf 配置文件

在 fescar-api 工程的resource 文件夹下面,新建 registry.conf 配置文件, TC 存储RM注册信息的文件配置

registry {
   
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "file"
nacos {
   
    serverAddr = "localhost"
    namespace = "public"
    cluster = "default"
  }
  eureka {
   
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight =
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值