分布式事务——CAP理论 解决分布式事务的思路 Seata组件初识 和 部署

news2024/11/20 11:30:41

在这里插入图片描述

前言

事务(TRANSACTION)是一个不可分割的逻辑单元,包含了一组数据库操作命令,并且把所有的命令作为一个整体向系统提交,要么都执行、要么都不执行。

事务作为系统中必须考虑的问题,无论是在单体项目还是在分布式项目中都需要进行处理,而尤其在分布式微服务调用的情况下,事务的处理就变得复杂。

本篇博客介绍分布式事务产生的场景,阐述了CAP理论,分析了分布式事务的解决思路,初步介绍了Alibaba分布式事务组件Seata,给出了部署方法。

目录

  • 前言
  • 引出
  • 一、分布式事务
  • 二、CAP定理
    • 1、Consistency(一致性)
    • 2、Availability(可用性)
    • 3、Partition tolerance(分区容错性)
  • 三、解决分布式事务的思路
  • 四、Alibaba分布式事务组件Seata
  • 五、部署Seata
    • 准备工作
    • 启动
  • 总结

引出


1.介绍分布式事务产生的场景,阐述了CAP理论;
2.分析了分布式事务的解决思路;
3.初步介绍了Alibaba分布式事务组件Seata,给出了部署方法。

一、分布式事务

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

  • 跨数据源的分布式事务
  • 跨服务的分布式事务

在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成。例如电商中比较常见的下单付款案例

  • 创建新订单
  • 扣减商品库存
  • 扣减会员积分

完成上面的操作需要访问三个不同的微服务和三个不同的数据库。
订单的创建、库存的扣减、扣减会员积分在每一个服务和数据库内是一个本地事务,可以保证ACID原则。

但是当我们把三件事情看做一个"业务",要满足保证“业务"的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,此时ACID难以满足,就需要分布式系统下的事务管理

二、CAP定理

解决分布式事务问题,需要一些分布式系统的基础知识作为理论指导。

1998年,加州大学的计算机科学家Eric Brewer提出,分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错性)

1、Consistency(一致性)

用户访问分布式系统中的任意节点,得到的数据必须一致。

比如现在包含两个节点,其中的初始数据是一致的。用户向节点1发起一个写操作,将其改为data1=2。

在这里插入图片描述

接下来,用户的读操作就会得到2。这就叫一致性。

在这里插入图片描述

问题是,用户有可能向节点2发起读操作,由于节点2的值没有发生变化,因此返回的是dta1=1。节点1和节点 2读操作的结果不一致,这就不满足一致性了。

在这里插入图片描述

为了让节点2也能变为2,就要在节点1写操作的时候,让节点1向节点2发送一条消息,要求节点2也改成data1=2。

在这里插入图片描述

这样的话,用户向节点2发起读操作,也能得到data1=2。因此要想保住一致性,就必须实现节点1到节点2的数据同步。

2、Availability(可用性)

用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝

如图,有三个节点的集群,访问任何一个都可以及时得到响应:

在这里插入图片描述

当有部分节点因为网络故障或其它原因无法访问时,代表节点不可用,但其他可用节点可以继续提供服务。

在这里插入图片描述

3、Partition tolerance(分区容错性)

Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

Tolerance(容错):容错表示在集群出现分区时,整个系统也要持续对外提供服务。

在这里插入图片描述

在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务又必须对外保证服务。因此分区容错性不可避免。

当节点接收到新的数据变更时,就会出现问题了:

在这里插入图片描述

如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那节点1、节点2与节点3之间就会出现数据不一致。

综上所述,无法同时做到一致性和可用性。系统设计时只能选择一个目标,在P一定会出现的情况下,A和C之间只能实现一个。这就是CAP定理。

CP: 强一致性,弱可用性,牺性部分机器的可用性,保证数据一致性,如zookeeper、es
AP: 强可用性,弱一致性,牺牲一致性,保证可用性,如Eureka

三、解决分布式事务的思路

分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理,有两种解决思路:

  • AP模式:各子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施恢复数据即可,实现最终一致。
  • CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致。但事务等待过程中,处于弱可用状态。

但不管是哪一种模式,都需要在各个子系统事务之间互相通讯,协调事务状态,也就是需要一个事务协调者

在这里插入图片描述

这里的子系统事务,称为分支事务,如上图中的订单服务、库存服务都为一个子事务,有关联的各个分支事务组织在一起称为全局事务

四、Alibaba分布式事务组件Seata

http://seata.io/zh-cn

在这里插入图片描述

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。

1、Seata提供了四种不同的分布式事务解决方案:

  • XA 模式:强一致性分阶段事务模式,牺性了一定的可用性,无业务侵入
  • TCC模式:最终一致的分阶段事务模式,有业务侵入
  • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
  • SAGA模式:长事务模式,有业务侵入

无论哪种方案,都离不开事务协调者

2、Seata事务管理中有三个重要的角色:

  • TC(Transaction Coordinator))·事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM(Transaction Manager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM(Resource Manager)-资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

在这里插入图片描述

具体的执行流程如下:

在这里插入图片描述

五、部署Seata

http://seata.io/zh-cn/docs/download

准备工作

创建数据库

在这里插入图片描述

用seata提供的MySQL脚本进行数据库表的创建

在这里插入图片描述

进行seata的配置,在1.4版本下主要修改下面两个文件

在这里插入图片描述

修改registry.conf文件,主要设置注册方式为nacos,配置nacos相关的地址,组名,用户名密码等,让seata注册到nacos中

在这里插入图片描述
)

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  # 第一步 把type="file"修改为nacos
  # 第二步 除了nacos之外的注册配置都删除
  # 第三步 修改nacos的配置
  type = "nacos"
  loadBalance = "RandomLoadBalance"
  loadBalanceVirtualNodes = 10

  nacos {
    application = "seata-server"
    serverAddr = "119.3.162.127:8848" # http://119.3.162.127/
    group = "DEV"
    namespace = "my-tianju"
    cluster = "default"
    username = "naocsPet5620"
    password = "nacos"
  }
}
# 第四步,删除除fi1e以外的配置
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "file"
  file {
    name = "file.conf"
  }
}

修改file.conf文件,配置事务日志的存储方案,这里设置为MySQL数据库,需要设置url,用户名和密码登参数

在这里插入图片描述

## transaction log store, only used in seata-server
# 第一步修T改mode="file"为db
# 第二步删除除db以外的配置
# 第三步修改db的配置
store {
  ## store mode: file、db、redis
  mode = "db"

  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.cj.jdbc.Driver"
    url: "jdbc:mysql://192.168.150.101:3306/seata?serverTimezone=GMT%2B8"
    user = "root"
    password = "123"
    minConn = 5
    maxConn = 100
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }
}

启动

在bin目录下有两个启动的脚步,bat格式为window下启动,sh格式为Linux中启动

在这里插入图片描述

window下启动的后台打印信息

在这里插入图片描述

seata注册在nacos中成功

在这里插入图片描述

访问seata前端页面

在这里插入图片描述


总结

1.介绍分布式事务产生的场景,阐述了CAP理论;
2.分析了分布式事务的解决思路;
3.初步介绍了Alibaba分布式事务组件Seata,给出了部署方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android WMS——概述(一)

Android 中的 WMS 指的是 Window Manager Service(窗口管理服务)。WMS 是 Android 系统中的核心服务,主要分为四大部分,分别是窗口管理,窗口动画,输入系统中转站和 Surface 管理 。负责管理应用程序窗口的创建、移动、调整大小和显示等操作。 一、功能简介 WMS 的职责可…

YOLO目标检测——红外人员数据集【含对应voc、coco和yolo三种格式标签+划分脚本】

实际项目应用:红外热像仪进行安全监控数据集说明:红外人员检测数据集,真实场景的高质量图片数据标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签&#xff…

华为OD机试 - 德州扑克 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述1、判断牌型2、说明 二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAV…

自动化学报格式 Overleaf 在线使用 【2023最新教程】

自动化学报格式 Overleaf 在线使用 摘要 2023年10月26日19:28:17(云南昆明) 今天课程老师要我们期末提交一篇论文,以自动化学报格式提交。因此,去官网发现只有 latex 格式,下载下来发现各种格式不兼容;由于…

postgresql14管理(二)-用户与角色

介绍 查看 SELECT rolname FROM pg_roles;postgres是系统初始化时默认创建的角色,为超级管理员。 \duList of rolesRole name | Attributes | Member of ------------------------------------------------------…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

墨西哥专线大型工程设备海运

随着全球经济一体化的不断推进&#xff0c;国际贸易日益繁荣&#xff0c;跨国物流需求不断增长。墨西哥作为拉美地区的经济大国&#xff0c;拥有丰富的资源和庞大的市场&#xff0c;吸引了许多中国企业的投资。然而&#xff0c;由于地理位置的原因&#xff0c;许多大型工程设备…

23种设计模式【创建型模式】详细介绍之【建造者模式】

建造者模式&#xff1a;构建复杂对象的精妙设计 设计模式的分类和应用场景总结建造者模式&#xff1a;构建复杂对象的精妙设计建造者模式的核心思想建造者模式的参与者Java示例&#xff1a;建造者模式 设计模式的分类和应用场景总结 可以查看专栏设计模式&#xff1a;设计模式 …

Anaconda-2023版 下载安装配置(国内镜像+图文详解)

1、Anaconda 下载 1.1 国内镜像下载 Anaconda 是跨平台的&#xff0c;版本众多&#xff0c;小伙伴们按需下载。本文是Win11系统 下载途径一&#xff1a;官方网站 https://www.anaconda.com/download/ 下载途径二&#xff1a;国内清华镜像 https://mirrors.tuna.tsinghua.…

嵌入式基础

本篇文章主要转载自 嵌入式复习&#xff0c;便于自己复习使用。 1 基本概念 嵌入式系统概念&#xff1a;以应用为中心&#xff0c;以计算机为基础&#xff0c;软件、硬件可裁剪&#xff0c;功能、可靠性、成本、体积、功耗严格要求的专用计算机系统&#xff08;国内&#xff0…

Power BI 傻瓜入门 12. 抽取报表

本章内容包含&#xff1a; 设置报表采用各种报表过滤方法探索高级报表功能消化报表发布过程 将您可以使用Power BI创建的每个可视化视为为为数据集提供不同的见解。可视化也可以是独立的&#xff0c;也可以与许多其他可视化相结合。无论哪种方式&#xff0c;可视化的输出都是…

使用Typecho搭建个人博客网站,并内网穿透实现公网访问——“cpolar内网穿透”

使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问 文章目录 使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 …

linux中断(中断一)

中断是操作系统中至关重要的机制&#xff0c;它能够显著提高系统的响应性能和并发处理能力。   中断是指在 CPU 正常运行期间&#xff0c;由外部或内部事件引起的一种机制。当中断发生时&#xff0c;CPU会停止当前正在执行的程序&#xff0c;并转而执行触发该中断的中断处理程…

drawio特性

drawio的特性 drawio是领先的基于Web技术的草图和图表功能功能的应用。 保证数据的安全 集成了各种不同的平台&#xff0c;和提供了在线的免费编辑器&#xff0c;可以使用app.diagrams.net来方案&#xff0c;drawio本身不会存储用户的数据。 随着互联网时代的发展&#xff0…

死锁是什么?如何避免?如何排查?为什么这样排查 详细总结

1.死锁是什么 多个线程访问资源 线程加锁不当 会造成死锁。导致所有线程被阻塞&#xff0c;且无法解开 2.死锁的产生原因 1.加锁后忘记解锁 2.重复加锁&#xff0c;造成死锁 3.B锁内部调用函数A &#xff0c;A运行是又加锁 导致A,B均无法运行 3.如何避免死锁 多检查…

【vector题解】杨辉三角 | 删除有序数组中的重复项 | 只出现一次的数字Ⅱ

杨辉三角 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1…

操作系统【OS】死锁

常考点 系统资源不足不是系统产生死锁的原因&#xff0c;资源不足只会对进程造成“饥饿”【详见王道操作系统书P153第4题】 A&#xff1a;资源不足和资源分配不足还是有区别的啦~ 死锁是什么&#xff1f; 死锁是多个进程因为竞争资源而造成的一种互相等待 为什么会出现死锁&…

软考系统架构师知识点集锦二:软件工程

一、考情分析 二、考点精讲 2.1 软件过程模型 &#xff08;1&#xff09;原型模型 典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。可以分为[抛弃型原型]与[演化型原型] 原型模型两个阶段: 1、原型开发阶段;2、目标软件开发阶段。 &#x…

Unity报错:Microsoft Visual C# Compiler version

Unity报错:Microsoft Visual C# Compiler version 问题解决方案总结 问题 Microsoft Visual C# Compiler version 2.9.1.65535 (9d34608e) Copyright © Microsoft Corporation 切换版本或者使用老项目的时候可能会出现这个报错&#xff0c;这个报错就是项目设置的问题 …

计算机起源(三)

一、前言 计算机在完成了硬件和操作系统的构建后&#xff0c;最重要的一件事情就是要处理数据。在现代意义的数据库出现之前(20世纪60年代)&#xff0c;人们通过人工和文件系统的方式来存储、管理数据。在人工管理时期&#xff0c;人们常使用穿孔纸带来管理数据 &#xff0c;虽…