微服务之分布式事务概念

微服务之分布式事务概念

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版本依赖关系

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Taro 关于微信订阅消息的调用

requestSubscribeMessage 是微信提供的方法 封装的调用requestSubscribeMessage的方法 示例图如下 import {getWechatTemplates,postSubscribeNotice } from /magic-sdk/apis/wechat-service; import {WechatTemplateType,SubscribeNoticeObjTypeOptions,WechatTemplateEvent…

详细分析Mysql中的STR_TO_DATE基本知识(全)

目录 前言1. 基本知识2. Demo3. 实战Demo4. Sql彩蛋4.1 LPAD函数4.2 SUBSTRING_INDEX函数 5. Java彩蛋 前言 对于该知识点,主要因为数据库类型为String(类似2024-03-26),放置于后端操作后,需要自定义比较,…

做了盲/埋孔,PCB还有必要做盘中孔吗?

在PCB设计中,过孔类型可分为盲孔、埋孔和盘中孔,它们各自有不同应用场景和优势,盲孔和埋孔主要用于实现多层板之间的电气连接,而盘中孔是元器件的固定及焊接。如果PCB板上做了盲孔和埋孔,那么有必要做盘中孔吗&#xf…

java的Class文件分析

文章目录 1. 简介2. Class文件分析 1. 简介 Java有一个著名的口号一次编译,处处运行,这就凸显出来Java程序的一个特点平台无关性。Java的平台无关性是基于各种不同平台的Java虚拟机,以及所有平台都统一支持的程序存储格式—字节码实现的。在…

B端管理系统:UI设计师为什么没有话语权?

一、六大因素,导致了UI设计师话语权缺失。 专业性差异: UI设计师主要负责界面设计和用户体验,而在B端管理系统中,功能性和操作流程往往更为重要,需要产品经理和开发人员更多的参与,他们对于系统的功能和技…

Springboot Thymeleaf 实现数据添加、修改、查询、删除

1、引言 在Spring Boot中使用Thymeleaf模板引擎实现数据的添加、修改、查询和删除功能,通常步骤如下: 在Controller类中,定义处理HTTP请求的方法。创建Thymeleaf模板来处理表单的显示和数据的绑定。 2、用户数据添加 1、 在Controller类中…

尚医通day1

1 创建项目 doc 窗口 pnpm create vite 填写项目名 vue-syt选择框架 vuetypeScript 2整理项目 删除 /src/assets/vue.svg 文件,删除 /src/components 下的 helloWorld.vue删除app.vue内容,快捷键v3ts 生成模板内容去掉 /src/style.css 样式文件&…

格雷希尔G10系列L150A和L200A气动快速连接器,在新能源汽车线束线缆剥线后的气密性测试密封方案

线束线缆在很多用电环境都有使用,比如说新能源汽车,从电池包放电开始,高低压、通讯都开始进行工作,线束在连接的地方需要具有较高的气密性和稳定性,才能保证车辆在不同环境下能够正常的运行。 线束在组装铜鼻子前需要剥…

【Linux】开始掌握进程控制吧!

送给大家一句话: 我并不期待人生可以一直过得很顺利,但我希望碰到人生难关的时候,自己可以是它的对手。—— 加缪 开始学习进程控制 1 前言2 进程创建2.1 fork函数初识2.2 fork函数返回值2.3 写时拷贝2.4 fork常规用法2.5 fork调用失败的原因…

高阶DS---AVL树详解(每步配图)

目录 前言: AVL树的概念: AVL树节点的定义: AVL树的插入(重点) AVL树的旋转: (1)新节点插入较高左子树的左侧---右单旋 (2)新节点插入较高右子树的右侧---左单旋 …

(九)Docker的认识

1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…

【更新】单细胞联合MR这样筛选靶点|衰老+NK细胞+免疫浸润

今天给大家分享一篇JCR一区,单细胞MR的文章:Unraveling the mechanisms of NK cell dysfunction in aging and Alzheimer’s disease: insights from GWAS and single-cell transcriptomics 标题:揭示NK细胞在衰老和阿尔茨海默病中功能失调的…

Pangolin_FOUND to FALSE so package “Pangolin“ is considered to be NOT FOUND.

修改CMakeLists.txt如下: 在find_package(Eigen3 REQUIRED)后加NO_MUDULE, find_package(Eigen3 REQUIRED NO_MODULE)编译成功:

挖一挖:PostgreSQL Java里的double类型存储到varchar精度丢失问题

前言 大概故事是这样的,PostgreSQL数据库,表结构: create table t1(a varchar);然后使用标准的Java jdbc去插入数据,其基本代码如下: import java.sql.*; public class PgDoubleTest {public static void main(Stri…

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

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

狐臭的等比数列

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; const int N 1e6;co…

乡村智慧化:数字乡村助力农村可持续发展

目录 一、数字乡村的内涵与特征 二、数字乡村助力农村可持续发展的路径 &#xff08;一&#xff09;提升农业生产效率 &#xff08;二&#xff09;推动农村产业融合发展 &#xff08;三&#xff09;优化乡村治理模式 &#xff08;四&#xff09;促进乡村生态文明建设 三…

基于ssm校园活动管理平台论文

摘 要 使用旧方法对校园活动信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动管理平…

Python学习笔记-Flask接口创建与测试

服务端: 1.引包 导入 from flask import Flask, request, render_template, redirect Flask: Flask 是一个类&#xff0c;用于创建 Flask web 应用的实例。每个 Flask 应用都从创建这个类的实例开始。示例&#xff1a;app Flask(__name__) request: request 是一个全局对象…

【BlossomConfig】什么是配置中心?以及如何实现一个配置中心?

文章目录 什么是配置中心&#xff1f;如何自己设计一个配置中心&#xff1f; 网关项目源码 RPC项目源码 配置中心项目源码 什么是配置中心&#xff1f; 在单体架构的时候我们可以将配置写在配置文件中&#xff0c;但有⼀个缺点就是每次修改配置都需要重启服务才能生效。 当应用…