分布式事务seata

文章目录

    • CAP理论
    • BASE 理论
    • seata解决分布式事务
    • seata重要对象
      • XA模式
      • AT模式
      • TCC模式
      • saga模式

CAP理论

CAP理论指出在分布式系统中三个属性不可能同时满足。
Consistency 一致性:在分布式的多个节点(副本)的数据必须是一样的(强一致)
Availability 可用性:调用系统的每个都必须有正常的响应(即使请求到不正常的节点也要能响应)
Partition tolerance 分区容错:系统在遇到网络分区故障的时候 部分节点于集群失去联系形成了独立的分区;容错是指在分区的时候系统仍然可以提供服务。
首先P一定要保证的,要不然就是只能把所有的节点放在同一台服务器上,“所有的节点同生共死”,这显然就不是分布式了,也违背了分布式的初衷。
在保证分区容错的基础上 A和C能不能共存呢
假设我们首先保证一致性:
N1和N2两个节点,当数据写入N1节点的时候,数据还没同步到N2节点,这时N2节点就不能对外提供服务,请求N2节点需要等待或者超时这时N2就牺牲了可用性,必须等到N2和N1的数据完全同步后才可以对外提供服务
假设我们优先保证可用性:
N1和N2两个节点,当数据写入N1节点的时候,数据还没同步到N2节点,
请求N2节点,N2节点保证正常的影响,但是这时响应的数据就不是最新的数据,牺牲了一致性。
我们无法同时确保一致性和可用性达到理想状态。二者就像是天平的两端,提升一方就意味着另一方的妥协。要根据实际业务需求和容忍度来决定在 CAP 三要素中如何取舍

BASE 理论

base理论是cap理论的基础上演化出来的
Basically Available 基本可用
在发生分区容错的时候,系统保证基本可用,只是相比较正常的系统而言,可能会有响应时间上的损失,或者功能上的降级。
Soft State 软状态
允许数据在各个节点的数据在一定时间内可以不一致,存在中间状态,中间状态不影响服务整体的可用性。
Eventually Consistent 最终一致性
软状态可以出现,但是不能一直是软状态,最终数据还是要一致的。
分布式事务也是基于这个理论其前提来设计的。

seata解决分布式事务

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 XA 、AT、TCC、SAGA 事务模式.
官方网站 https://seata.apache.org/zh-cn

seata重要对象

TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
在这里插入图片描述

XA模式

原理:XA规范是X/Open 组织针对二阶段提交协议的实现做的规范。目前几乎所有的主流数据库都对XA规范提供了支持。
seata的XA模式依赖数据库本身对XA模式的一种支持,在数据库的基础上做了一些封装。
优点:强一致性,简单对代码没有入侵
缺点:一阶段锁定资源一直持有数据库锁二阶段才能释放锁,性能比较差
数据库必须支持XA模式
在这里插入图片描述

AT模式

同样采用的是分阶段提交的事务模型,解决了XA模式中锁定资源时间过长的缺陷,使用的比较多。
在这里插入图片描述
AT模式于XA模式区别:
XA模式一阶段 锁定资源不提交事务,AT模式一阶段直接提交事务
XA模式依赖数据库的事务滚回,AT模式依赖的数据库快照回滚
XA模式是强一致性,AT模式是最终一致性。

AT模式的写隔离
在这里插入图片描述
优点:
一阶段完成直接提交事务,释放资源,性能比较好
利用全局事务实现读写隔离
没有代码入侵,框架自动进行数据的回滚
缺点:
两阶段之间是软状态,最终一致性
框架的快照回复功能会影响性能,但也比XA模式性能好很多

TCC模式

TCC模式与AT模式相似每个阶段都是独立的事务,不同的是TCC是通过人工编码来实现数据恢复的
在这里插入图片描述

1.try 资源的检测和预留
2.Confirm 执行业务操作,要求try成功 confirm一定也要成功
3.cancel 预留资源的释放,可以理解成try的反向操作
这种模式比较适合修改操作 修改余额 修改库存等 这种需要预留资源,如果是insert就不适用,类似保存订单这种就不适合用TCC
空回滚:其中一个分支事务的try阻塞没有执行,所以在执行回滚的cancel 没有预留的资源
业务悬挂:try阻塞没有执行,执行了回滚的cancel,回滚执行完成之后,try的阻塞消失了,又开始执 行try。
编写代码注意事项:允许空回滚,避免业务悬挂,在try之前判断没有回滚过才执行,在执行回滚之前要先判断该分支事务的try已经执行了。
优点:不需要全局锁性能好;不依赖数据库的事务机制,nosql数据库也支撑
缺点:有代码入侵

saga模式

是一种长事务的解决方案,也是分为两阶段提交
一阶段:直接提交本地事务
二阶段:成功则什么都不做,失败则通过手动的补偿来回滚
优点:事务的参与者可以基于事件的驱动实现异步调用,吞吐量高;
无锁性能好;不需要TCC编写那么多的代码
缺点:没有隔离性,可能会有脏写;软状态持续时间长,中间时间不确定

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

展锐平台的手机camera 系统开发过程

展锐公司有自己的isp 图像处理引擎,从2012 年底就开始在智能手机上部署应用。最初的时候就几个人做一款isp的从hal 到kernel 驱动的完整软件系统,分工不是很明确,基本是谁擅长哪些就搞哪些,除了架构和编码实现之外,另外…

软硬件项目运维方案(Doc原件完整版套用)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范…

【数据结构】排序算法---基数排序

文章目录 1. 定义2. 算法步骤2.1 MSD基数排序2.2 LSD基数排序 3. LSD 基数排序动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 ⚠本节要介绍的不是计数排序 1. 定义 基数排序(英语:Radix sort)是一种非比较型的排序算法&…

秋招常问的面试题:Cookie和Session的区别

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

LeetCode[中等] 3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 思路:滑动窗口,设置左右指针left与right,maxLength存储长度 利用HashSet性质,存储滑动窗口中的字符 如果没有重复的,那么right继续向…

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

无人机企业合法运营必备运营合格证详解

无人机企业运营合格证,是由国家相关航空管理部门(如中国民用航空局或其授权机构)颁发的,用于确认无人机企业具备合法、安全、高效运营无人机能力的资质证书。该证书是无人机企业开展商业运营活动的必要条件,标志着企业…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

同为TVT设备主动注册协议接入SVMSPro平台

同为设备主动注册协议接入SVMSPro平台 步骤一&#xff1a;进设备网页或者NVR配置界面&#xff0c;进功能面板&#xff0c;网络&#xff0c;平台接入 接入类型&#xff1a;平台软件&#xff0c;勾选启用主动上报 服务器地址&#xff1a;平台服务IP 端口&#xff1a;12009 ID&…

高级算法设计与分析 学习笔记6 B树

B树定义 一个块里面存了1000个数和1001个指针&#xff0c;指针指向的那个块里面的数据大小介于指针旁边的两个数之间 标准定义&#xff1a; B树上的操作 查找B树 创建B树 分割节点 都是选择正中间的那个&#xff0c;以免一直分裂。 插入数字 在插入的路上就会检查节点需不需要…

RabbitMQ 高级特性——持久化

文章目录 前言持久化交换机持久化队列持久化消息持久化 前言 前面我们学习了 RabbitMQ 的高级特性——消息确认&#xff0c;消息确认可以保证消息传输过程的稳定性&#xff0c;但是在保证了消息传输过程的稳定性之后&#xff0c;还存在着其他的问题&#xff0c;我们都知道消息…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取

1. 创建基础的scrapy项目 1.1 基础项目 在pycharm中安装scrapy框架 pip install scrapy 创建项目 scrapy startproject 项目名称 我们现在可以看到整体文件的目录&#xff1a; firstBlood ├── firstBlood # 项目跟目录 │ ├── init.py │ ├── items.py # 封装数…

【网络】高级IO——select版本TCP服务器

目录 前言 一&#xff0c;select函数 1.1.参数一&#xff1a;nfds 1.2.参数二&#xff1a; readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…

数据结构之二叉树遍历

二叉树的遍历 先序遍历 先输入父节点&#xff0c;再遍历左子树和右子树&#xff1a;A、B、D、E、C、F、G 中序遍历 先遍历左子树&#xff0c;再输出父节点&#xff0c;再遍历右子树&#xff1a;D、B、E、A、F、C、G 后序遍历 先遍历左子树&#xff0c;再遍历右子树&#xff0c;…

SpringBoot设置mysql的ssl连接

因工作需要&#xff0c;mysql连接需要开启ssl认证&#xff0c;本文主要讲述客户端如何配置ssl连接。 开发环境信息&#xff1a; SpringBoot&#xff1a; 2.0.5.RELEASE mysql-connector-java&#xff1a; 8.0.18 mysql version&#xff1a;8.0.18 一、检查服务端是否开启ssl认…

微信公众号开发入门

微信公众号开发是指开发者基于微信公众平台&#xff08;WeChat Official Accounts Platform&#xff09;所提供的接口与功能&#xff0c;开发和构建自定义的功能与服务&#xff0c;以满足企业、组织或个人在微信生态中的应用需求。微信公众号开发主要围绕公众号消息处理、菜单管…

K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布

重要更新 1. 腾讯全球数字生态大会与9月5日-6日举行&#xff0c;发布“5T”战略&#xff0c;包括TDSQL、TencentOS、TCE&#xff08;专有云 &#xff09;、TBDS&#xff08;大数据&#xff09;、TI &#xff08;人工智能开发平台&#xff09;等 ( [2] ) ; 并正式向原子开源基金…

初始分布式系统和Redis特点(

&#xff08;一&#xff09;认识redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperlog…