首页 > 其他分享 >分布式事务:理论方案与技术实现

分布式事务:理论方案与技术实现

时间:2024-07-14 23:08:21浏览次数:7  
标签:方案 事务 数据库 try cancel 一致性 分布式

分布式事务与本地事务的区别

与本地事务不同的是,分布式事务需要有网络IO的交互达到对一个或多个数据库读写的效果。

在经典的本地事务中,一般情况下我们只需要transaction注解即可实现:

begin transaction

#数据库操作1

#数据库操作2

commit transaction

但是在分布式事务的情况下,数据库操作涉及网络通信。而这种时候我们再使用传统的本地事务,网络通信实现的数据库操作会难以回滚,即失去了事务的原子性。

理论方案:

CAP理论:即一致性,可用性,分区容忍性

一致性:即不管怎么访问都是最新数据,这里是强一致性而非最终一致性;

可用性:任何时候访问都会有数据可以看,但是不能保证是最新的

分区容忍性:分布式架构时由于IO异常导致请求中断,消息丢失。但系统仍会对外提供服务

CAP理论中P是必定满足的,CA只能满足一个,一般情况下我们会选择满足A,让C保持最终一致性即可

以AP为基础,又提出了BASE理论,即基本可用BA,软状态:S,最终一致性E

基本可用:当系统无法保证满足全部可用的时候,保证核心业务可用即可,比如XX充值系统蹦了,但是商城还是可以买皮肤的

软状态:指可存在的中间状态,例如:外卖配送中,打印中,生成中.....

最终一致性:一些操作可能会有延迟,但是绝对不会迟到。比如xx宝退款两小时内到账

技术实现:

实现CP,保证一致性:

seata提供的两种方法(XA就不提了)

  • AT:rm(资源管理器)注册分支事务,做完SQL就提交,但是会生成undo-log。如果有问题需要回滚就启动undo-log,没问题就删除
  • TCC:try-confirm-cancel,
    • try:会尝试执行业务逻辑,同时预留必要的业务资源。try不会真正的提交事务,而是根据成功与否进入二阶段:Confirm OR cancel
    • confirm:try是没问题的,释放try的资源,更新事务状态为已提交
    • cancel:try是有问题的,撤销预留资源,更新事务状态为已撤回

实现AP,保证可用性:

  • 利用MQ,发送失败后会自动重试,达到一定次数后转人工。
  • 利用Task调度,定时执行数据同步

标签:方案,事务,数据库,try,cancel,一致性,分布式
From: https://www.cnblogs.com/kun1790051360/p/18302173

相关文章

  • 如何实现一个分布式锁
    如何实现一个分布式锁本篇内容主要介绍如何使用Java语言实现一个注解式的分布式锁,主要是通过注解+AOP环绕通知来实现。1.锁注解我们首先写一个锁的注解/***分布式锁注解*/@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})@Documentedpub......
  • 合法方案数(dp)
    https://www.luogu.com.cn/problem/CF1606E第3题   合法方案数 查看测评数据信息有n个人,他们要进行下面的进程:每轮设存活i个人,那么每个存活的人会对其他人造成1点血量的代价,血量小于等于零就会被淘汰,现在需要你给他们每个人设置一个在[1,x]之间的初始血量,使得某轮游戏结......
  • T113-i系统启动速度优化方案
    背景:        硬件:T113-i+emmc        软件:uboot2018+linux5.4+QT应用        分支:longan问题:        全志T113-i的官方系统软件编译出的固件,开机启动时间10多秒,启动时间太长,远远超过行业内linux系统的开机速度,需要进一步优化。T1......
  • 对于分布式的理解
    在Java中,“分布式”通常指的是分布式系统或分布式计算的概念。我们可以把它想象成一个团队合作的情景:在一个大型项目中,不同的团队成员可能分布在不同的地点,但他们需要协同工作,共享信息,以完成整个项目的构建。同样的,分布式系统就是由多台计算机(节点)组成,这些计算机通过网络连接在一......
  • 深入解析淘客返利系统中的分布式数据库选型与优化
    深入解析淘客返利系统中的分布式数据库选型与优化大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.介绍分布式系统的核心挑战之一是数据存储与管理。在淘客返利系统中,高效的分布式数据库选型及优化是确保系统稳定性和性能的重要因素。本文将深入......
  • Android Viewpager2 remove fragmen不生效解决方案
    一、介绍在如今的开发过程只,内容变化已多单一的fragment,变成连续的,特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动,到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓存,导致想立马生效出现问题,不符合国内的业务场景。......
  • 监狱AI视频分析监控算法方案 YOLOv3
    监狱AI视频分析监控算法方案可以对现场人员行为及物体状态进行实时分析识别,监狱AI视频分析监控算法方案对监控画面中特殊区域入侵监测、睡岗脱岗监测、越界监测、人员异常徘徊监测、视频骤变监测、攀高识别、跌倒检测、夜间起床识别、打架斗殴检测、异常速度监测、遗留物监测等......
  • 第二部分:关键技术领域的开源实践【分布式版本控制系统Git】
    企业源代码管理的重要性体现在多个方面,它不仅关乎软件开发的效率和质量,也是保护企业核心资产和维持竞争优势的关键。以下是一些主要的重要性点:版本控制:源代码管理确保每一次代码的修改都被记录和保存,这使得开发团队可以追踪任何变更,回滚到以前的状态,或者比较不同版本之间的差异......
  • mongoDB 报错 MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017 : 一个可行的
    今天启用mongoshell时发现报错如下:尝试数据指令mongod启动服务器也没有作用,上网查询解决方案后发现是没有在service里面启动mongodb服务,启动该服务后再键入mongosh命令即可正常运行mongoshell。具体操作如下:STEP1:win+R➡️输入services.msc➡️确定 STEP2:找到MongoD......
  • 单向/双向V2G 环境下分布式电源与电动汽车充电站联合配置方法(Matlab代码实现)
     ......