微服务之分布式事务概念

微服务之分布式事务概念

CAP定理和Base理论

CAP定理

CAP定理在1998年被加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition Tolerance)
    Eric Brewer认为分布式系统无法同时满足这三个指标,这个结论就叫CAP定理。

一致性指的是用户访问分布式系统中的任何一个节点,得到的数据必须一致。即需要考虑分布式系统中的节点如何进行数据同步。
在这里插入图片描述
可用性是用户访问任意一个健康的节点,必须能得到响应,而不是超时或者拒绝。
在这里插入图片描述

分区容错性中的分区指的是是当系统因为网络故障或者某个节点与其它节点失去连接,而形成独立分区时。容错性指的是在集群中出现分区时,整个系统也要能够持续对外提供服务。
在这里插入图片描述
总结一下:分布式系统一定要满足分区容错性,如果不能满足分区容错性,那就和单体系统没有区别了,一旦出现问题,整个系统就不可用了。
分布式系统一定会出现分区问题,即P,这个时候不可能同时满足C和A。

Base理论

Base理论是对CAP的一种解决思路,它包含三个思想:

  • 基本可用:分布式系统出现故障时,允许损失部分可用性,即保证核心可用
  • Soft State:在一定时间内,允许出现中间状态,比如临时的不一致状态;
  • 最终一致性:虽然无法保证强一致性,但是在中间状态结束后,最终达到数据一致性。

分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理和BASE理论:

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

分布式事务概念

在分布式系统下,一个业务的执行可能会跨越多个服务或者数据源,在每一个服务中的执行都是一个事务,要保证所有的事务最终状态一致,这样的事务就是分布式事务。

分布式事务模型

为了解决分布式事务的问题,需要各个子系统能感知到彼此事务的状态,当其中一个系统的事务出现问题时,则所有子系统全部回滚事务;如果子系统的事务没有问题,则再全部提交,这样就能保持状态一致。因此需要一个事务协调者来协调每一个事务的参与者(子系统事务)。

**加粗样式

原子提交协议

原子提交协议是一种分布式事务处理协议,使用这种协议可以保证分布式事务的原子性、一致性、隔离性和持久性。原子提交协议通过协调多个事务参与者,确保事务要么全部成功,要么全部失败。原子提交协议可以基于Paxos算法和基于Raft算法实现。原子提交协议也适用于分布式数据库、分布式文件系统。
常见的原子提交协议有:二阶段提交协议(2PC)和三阶段提交协议(3PC)。
原子提交协议包括两个阶段:

  1. 第一阶段:在准备阶段,协调者向所有参与者发送准备消息,参与者会检查事务是否可以提交,如果可以,则进入提交阶段,否则回滚事务
  2. 第二阶段:协调者根据参与者的响应决定是否提交事务

三阶段提交协议:在第一阶段和第二天阶段之间增加了一个预提交阶段,协调者根据参与者的响应决定是否进入第二阶段。

参考

  1. 5种分布式事务解决方案
  2. Seata官网
  3. 微服务分布式事务4种解决方案实战
  4. 分布式事务(二)之两阶段提交
  5. Spring-Cloud-alibaba版本依赖关系

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

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

相关文章

Vastbase编程利器:PL/pgSQL原理简介

PL/pgSQL是Vastbase提供的一种过程语言,在普通SQL语句的使用上增加了编程语言的特点,可以用于创建函数、存储过程、触发器过程以及创建匿名块等。 本文介绍Vastbase中PL/pgSQL的执行流程,包括PL/pgSQL的编译与运行。 1、编译 PL/pgSQL的编译…

Netty教程之NIO基础

NIO 介绍 NIO 全称java non-blocking IO(非阻塞 I/O),后续提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的。 阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种…

ctf题目

目录 1.文件包含的一道题目,没什么难度, 2.一道sql注入的题目,伪静态 3.限制只能本地访问。 1.文件包含的一道题目,没什么难度, 但是一个点就是它这里去包含的那个文件名就是flag,而不是flag.php也不是f…

CSS实现小车旅行动画实现

小车旅行动画实现 效果展示 CSS 知识点 灵活使用 background 属性下的 repeating-linear-gradient 实现路面效果灵活运用 animation 属性与 transform 实现小车和其他元素的动画效果 动画场景分析 从效果图可以看出需要实现此动画的话,需要position属性控制元素…

学习transformer模型-Dropout的简明介绍

Dropout的定义和目的: Dropout 是一种神经网络正则化技术,它在训练时以指定的概率丢弃一个单元(以及连接)p。 这个想法是为了防止神经网络变得过于依赖特定连接的共同适应,因为这可能是过度拟合的症状。直观上&#…

移动硬盘无法打开?原因与解决方案一网打尽

一、遭遇困境:移动硬盘突然罢工 在数字化日益盛行的今天,移动硬盘无疑是我们储存和转移数据的重要工具。然而,当某一天你突然发现移动硬盘无法打开时,那种焦虑与无助感无疑会席卷而来。插上电脑,硬盘灯闪烁却无响应&a…

软考之零碎片段记录(二)

一、位示图记录磁盘使用情况 1. 计算位示图的大小? 物理块大小4MB, 磁盘容量512GB, 系统字长64位(64位 / 字长) 计算物理块数量 512 * 1024 / 4 256 * 512 131072 每一位记录一个物理块 131072 / 64 2048(字) 二…

科研学习|论文解读——情感对感知偶然信息遭遇的影响研究(JASIST,2022)

原文题目 Investigating the impact of emotions on perceiving serendipitous information encountering 一、引言 serendipity一词最初是由霍勒斯沃波尔创造的,他将其定义为“通过意外和睿智发现你并不追求的事物”。信息研究中大多数现有的偶然性定义从几个角度看…

vue2 el-table指定某些数据不参与排序

vue2 el-table指定某些数据不参与排序 1、需求描述2、配置属性方法3、详细代码如下 1、需求描述 最后一行总计不参与排序 2、配置属性方法 el-table 需要配置 sort-change"soltHandle" 方法 el-table-column 需要配置 sortable"custom"属性3、详细代码如…

单链表的插入和删除

一、插入操作 按位序插入(带头结点): ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 typedef struct LNode{ElemType data;struct LNode *next; }LNode,*LinkList;//在第i 个位置插插入元素e (带头结点) bool Li…

Bridge Champ与Ignis公链:探索Web3游戏的新未来

在数字化和去中心化的浪潮中,Web3游戏与公链的融合为游戏行业带来了新的变革。特别是,Bridge Champ和Ignis公链的结合,展示了一种全新的游戏生态模式,不仅为玩家提供了更加公平、透明的游戏体验,同时也为游戏开发和运营…

Day50:WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

目录 文件包含-原理&分类&利用&修复 文件读取 文件写入 代码执行 远程利用思路 黑盒利用-VULWEB 白盒利用-CTFSHOW-伪协议玩法 78-php&http协议 79-data&http协议 80-81-日志包含 87-php://filter/write&加密编码 88-data&base64协议 …

磐启/PAN7030/2.4GHz 无线收发SOC芯片/ESSOP10/SOP16

1 概述 PAN7030 是一款集成 8 位 OTP MCU 和 2.4GHz 无线收发电路芯片,适合应用于玩具小车、 遥控器等领域。 PAN7030 内置 8 位 OTP MCU,包括 1.25KW 的程序存储器、80 字节数据存储器、16 位定 时器和 8 位/11 位 PWM 定时器、看门狗、电压比较器等…

Ubuntu18.04 下Ublox F9P 实现RTK (利用CORS服务无需自建基站)

本内容参考如下连接:Ubuntu下Ublox F9P利用CORS服务无需自建基站实现RTK-CSDN博客 一、Ublox F9P 硬件模块示意图 图中展示了Ublox F9P的接口,包括串口2(`UART1`和`UART2`),USB1。需要人为通过u-center(Ublox F9P的显示软件)软件设置以下功能: Ublox通过`UART1`向PC端发送…

Go的数据结构与实现【Binary Search Tree】

介绍 本文用Go将实现二叉搜索树数据结构,以及常见的一些方法 二叉树 二叉树是一种递归数据结构,其中每个节点最多可以有两个子节点。 二叉树的一种常见类型是二叉搜索树,其中每个节点的值都大于或等于左子树中的节点值,并且小…

脑机辅助推导算法

目录 一,背景 二,华容道中道 1,问题 2,告诉脑机如何编码一个正方形格子 3,让脑机汇总信息 4,观察图,得到启发式算法 5,根据启发式算法求出具体解 6,可视化 一&am…

centos7.5安装gitlab-runner,配置CI/CD流水线

一般不建议gitlab-server和gitlab-runner装在同一台服务器 第一步:安装gitlab-runner,最好和gitlab实例版本一致 # 下载官方gitlab-runner安装脚本 curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | s…

时序预测 | Python实现VMD-CNN-LSTM时间序列预测

时序预测 | Python实现VMD-CNN-LSTM时间序列预测 目录 时序预测 | Python实现VMD-CNN-LSTM时间序列预测预测效果基本介绍模型描述代码设计预测效果 基本介绍 VMD-CNN-LSTM 是一种混合深度学习模型,结合了变分模态分解(VMD)、卷积神经网络(CNN)和长短期记忆网络(LSTM)的…

【spring】@Autowired注解学习

Autowired介绍 Spring框架是Java领域中一个非常重要的企业级应用开发框架,它提供了全面的编程和配置模型,旨在帮助开发者更快速、更简单地创建应用程序。在Spring框架中,Autowired是一个非常重要的注解,它用于实现依赖注入&#…

Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP

观看视频 Bilibili: https://www.bilibili.com/video/BV1pZ421q7EH/YouTube: https://www.youtube.com/watch?vx0d1_0HQa8o 内容大纲 提前在浏览器打开网址: Chatopera 云服务:https://bot.chatopera.comChatopera 入门教程:https://dwz…