微服务之分布式事务概念

news2024/11/27 22:24:18

微服务之分布式事务概念

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.coloradmin.cn/o/1560677.html

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

相关文章

LLM应用:Prompt flow vs LangChain

背景 Prompt flow和LangChain都是LLM时代,为高效地构建LLM应用而生。 Prompt flow是Microsoft开源的,其诞生时,LangChain已经很有名气了。 所以作为后生的Prompt flow会为我们带来哪些新的东西呢? ​​​​​​​ Prompt flo…

一文了解JAVA的常用API

目录 常用kpimathSystemRuntimeObjectObjectsBigIntegerBigDecima正则表达式包装类 常用kpi 学习目的: 了解类名和类的作用养成查阅api文档的习惯 math 工具类。因为是工具类,因此直接通过类名.方法名(形参)即可直接调用 abs:获取参数绝对…

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例

Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例 文章目录 Docker容器与Serverless的融合:探索《2023腾讯云容器和函数计算技术实践精选集》中的云原生创新案例一、引言二、《2023腾讯云容器和函数计算…

recover 的使用

一旦mayPanic触发了panic,控制流会跳到defer函数中,尝试执行recover。 如果recover捕获到了panic,它会阻止panic继续传播,程序控制流会继续在safeCall函数的defer函数之后进行。 然而,由于panic导致的提前返回&#xf…

Linux---多线程(下)

前情提要:Linux---多线程(上) 七、互斥 临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临…

SuccessFactors-cpi-SAP 错误重复机制

系统做复杂的模型不是全量传输,最复杂的是增量模型,增量模型的设计完善,程序的复杂度几何倍增长,今天就讨论下SuccessFactor与HCM集成的增量原理。 首先我们看看同步步骤,见下图 同步过程中有多次数据交互,…

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

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

探索创新前沿,ATFX出席CriptoSummit峰会,共商数字资产市场生态构建

发现、连接并转变您的数字金融愿景。3月20日,以数字资产生态构建和多元化配置为主题的CriptoSummit峰会在智利首都圣地亚哥盛大召开。大会汇聚了智利和拉丁美洲的领导人、学术专家和数字资产爱好者,历时8小时的深度对话与交流,不仅吸引了500余…

Sublime Text4 4169 安装激活【亲测可用】

此教程用于Windows 下Sublime Text4 4169版本的安装和激活。 无需安装其他软件,无需下载替换文件,无需注册机等。 官网: https://www.sublimetext.com 下载地址 64位:https://download.sublimetext.com/sublime_text_build_41…

使用Redis集合List实现消息队列

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型…

人体姿态识别项目 | 在EdgeTPU平台部署人体姿态识别算法

项目应用场景 面向 EdgeTPU 边缘计算设备平台上部署人体姿态识别算法 项目效果: 项目细节 > 具体参见项目 README.md (1) 安装依赖 sh install_requirements.sh (2) 执行图片检测示例 python3 simple_pose.py (3) 执行视频检测示例 python3 pose_camera.py# …

与鲸同行,智领未来!和鲸科技“人工智能+X”学科建设合作交流会(北京站)圆满结束!

在国家加快发展新质生产力的大背景下,3月25日下午,和鲸科技 2024 年“人工智能X”学科建设合作交流会(北京站)暨“AIX”实验室建设与供应商选型座谈会顺利召开。为提供更为集中和专业的讨论环境,本次会议特别采取闭门审…

JUC:java内存模型(如何保证?可见性、原子性、有序性)

文章目录 java内存模型可见性解决方法 原子性有序性流水线技术 模式之Balking(犹豫) java内存模型 JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。 JMM 体现在以下几个方面 &#x…

从0到1:兼职招聘小程序开发笔记(一)

可行性分析 兼职招聘小程序:为雇主和求职者提供便利的平台,旨在帮助雇主招聘兼职员工,并让求职者寻找合适的兼职工作。提供简单、快捷的方式来匹配兼职岗位和候选人,节省了招聘和求职的时间和精力。其主要功能模块包括&#xff1…

C语言数据结构易错知识点(6)(快速排序、归并排序、计数排序)

快速排序属于交换排序,交换排序还有冒泡排序,这个太简单了,这里就不再讲解。 归并排序和快速排序都是采用分治法实现的排序,理解它们对分支思想的感悟会更深。 计数排序属于非比较排序,在数据集中的情况下可以考虑使…

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

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

LLaMA-Factory微调(sft)ChatGLM3-6B保姆教程

LLaMA-Factory微调(sft)ChatGLM3-6B保姆教程 准备 1、下载 下载LLaMA-Factory下载ChatGLM3-6B下载ChatGLM3windows下载CUDA ToolKit 12.1 (本人是在windows进行训练的,显卡GTX 1660 Ti) CUDA安装完毕后&#xff0c…

HCIP---MGRE和GRE实验

一、配置ip R1: [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [R1-GigabitEthernet0/0/0]int s4/0/0 [R1-Serial4/0/0]ip add 15.1.1.1 24 [R1]ip route-static 0.0.0.0 0 15.1.1.5 R2: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 192.168.2.2…

GROBID库文献解析

1. 起因 由于某些原因需要在大量的文献中查找相关内容,手动实在是太慢了,所以选择了GROBID库进行文献批量解析 2. GROBID介绍 GROBID是一个机器学习库,用于将PDF等原始文档提取、解析和re-structuring为结构化的XML/TEI编码文档&#xff0…

C++第十四弹---模板初阶

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …