1. 2PC是什么

保证强一致性的一种分布式事务方案

2. 2PC流程

  • 把事务分成两个阶段

    • 第一阶段:由事务管理器向所有database发送prepare请求
    • 第二阶段根据第一阶段的结果决定。
      • 如果第一阶段全部响应ok那么执行第二阶段的commit;
      • 如果第一阶段有一个database响应fail或者事务管理器等待超时那么执行第二阶段的rollback

3. 2PC的使用场景

  • 适用于强一致性、时间敏感度高、分布式事务可以回滚的业务的处理结果,比如金融转账场景
  • 单个服务多个数据源且数据源都是DB,即传统单体

4. 2PC的问题

  • 性能问题:在阶段1,各个database开始锁定资源,直到第二阶段才释放锁资源。这段期间一直处于同步阻塞状态,性能很差
  • 单点问题:阶段1完成之后,在阶段2如果事务管理器挂了,那么所有database无法收到下一步指令,事务无法继续执行
  • 一致性问题:阶段1完成之后,在阶段2如果任一database挂了没有返回ACK,那么其他database是提交还是回滚无法确定

5. 2PC的实现

  • 每个参与者需要实现3个接口

    • Prepare
    • Commit
    • Rollback

5.1. XA

  • 数据库基于2PC实现的分布式事务,有一个统一标准叫做DTP
  • DTP模型定义了几个角色:
    • AP:我们的微服务
    • TM:全局事务管理者
    • RM:数据库
    • CRM:TM和RM的通信中间件
  • 在该模型中,一个分布式事务(全局事务)可以被拆分成许多个本地事务,运行在不同的AP和RM上。每个本地事务的ACID很好实现,但是全局事务必须保证其中包含的每一个本地事务都能同时成功,若有一个本地事务失败,则所有其它事务都必须回滚。但问题是,本地事务处理过程中,并不知道其它事务的运行状态。因此,就需要通过CRM来通知各个本地事务,同步事务执行的状态。
  • 为了让不同的数据库之间可以通讯,必须有一个标准,因此有了XA。XA就是TM和RM通讯的接口规范

5.2. Seata的XA模式

  • 支持XA事务的数据库。
  • Java 应用,通过 JDBC 访问数据库。

6. 参考

分布式事务-2PC的更多相关文章

  1. 分布式事务 --- 2PC 和 3PC

    文章部分图片来自参考资料,侵删 概述 上一篇我们讲到CAP 理论,分区容错性,一致性,可用性三者不可能同时存在,而分区容错性又是客观存在的,那么为了保证可用性,我们牺牲了一致性,虽然我们保证不了强一致 ...

  2. .Net Core with 微服务 - 分布式事务 - 2PC、3PC

    最近比较忙,好久没更新了.这次我们来聊一聊分布式事务. 在微服务体系下,我们的应用被分割成多个服务,每个服务都配置一个数据库.如果我们的服务划分的不够完美,那么为了完成业务会出现非常多的跨库事务.即使 ...

  3. 分布式事务(3)---RocketMQ实现分布式事务原理

    分布式事务(3)-RocketMQ实现分布式事务原理 之前讲过有关分布式事务2PC.3PC.TCC的理论知识,博客地址: 1.分布式事务(1)---2PC和3PC原理 2.分布式事务(2)---TCC ...

  4. .Net Core with 微服务 - 分布式事务 - TCC

    上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完 ...

  5. .Net Core with 微服务 - 分布式事务 - 可靠消息最终一致性

    前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一 ...

  6. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分 ...

  7. 浅析SQL Server实现分布式事务的两阶段提交协议2PC

    不久之前团队有个新人问我一个很重要的web服务接口如何保证事务的问题.因为涉及到跨库事务,当时我只是回答目前我们的SOA框架都不支持跨库事务.然后就问到了数据库跨库事务是如何实现的,我只能凭印象含糊回 ...

  8. 三:分布式事务一致性协议2pc和3pc

    一:分布式一致性协议--->对于一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是就产生了一系列的一致性协议.--->长期探索涌现出一大批经典的一 ...

  9. 分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型

    1. 柔性事务和刚性事务 柔性事务满足BASE理论(基本可用,最终一致)刚性事务满足ACID理论 本文主要围绕分布式事务当中的柔性事务的处理方式进行讨论. 柔性事务分为 两阶段型 补偿型 异步确保型 ...

  10. 分布式事务之深入理解什么是2PC、3PC及TCC协议?

    导读 在上一篇文章<[分布式事务]基于RocketMQ搭建生产级消息集群?>中给大家介绍了基于RocketMQ如何搭建生产级消息集群.因为本系列文章最终的目的是介绍基于RocketMQ的事 ...

随机推荐

  1. Microsoft.NETCore.App 版本不一致导致的运行失败

    场景重现 今天新建了一个 ASP.NET Core 的项目, 通过 Web Deploy 顺利发布到IIS上后, 但访问时出现如下异常: 异常原因 通过手动执行dotnet命令发现运行框架版本不一致? ...

  2. 《机器人SLAM导航核心技术与实战》先导课:SLAM的应用价值与技术难点

    <机器人SLAM导航核心技术与实战>先导课:SLAM的应用价值与技术难点 视频讲解 [先导课]3.SLAM的应用价值与技术难点-视频讲解 [先导课]3.1.SLAM的应用价值与技术难点-S ...

  3. zk源码—7.ZAB协议和数据存储

    大纲 1.两阶段提交Two-Phase Commit(2PC) 2.三阶段提交Three-Phase Commit(3PC) 3.ZAB协议算法 4.ZAB协议与Paxos算法 5.zk的数据存储原理 ...

  4. fiddler抓包常用辅助工具

    一.过滤器 1.hosts: 只展示内网或外网的hosts,internet(外网),Intranet(内网) 展示下面的hosts/隐藏下面的hosts/:选择后填写需要设置的hosts(地址前面的 ...

  5. nodejs判断文件的字符集编码

    ----------------------------------- 通过前2字节判断: 编码 16进制数 unicode FF FE  或 FE FF utf-8 EF BB 代码: var fs ...

  6. php-ffmpeg保存为.mp4格式时报错

     原文: php-ffmpeg保存为.mp4格式时报错:FFMpeg\Exception\RuntimeException: Encoding failed in - 搜栈网 (seekstack.c ...

  7. jwt的个人理解

    概念: jwt全名json web token,是一种web登录验证和授权技术 官网debug:#debug 应用场景: 授权这是使用JWT最常见的场景.一旦用户登录,每个后续请求将包括JWT,允许用 ...

  8. 2025dsfz集训Day5:最短路与最小生成树

    DAY5 I : 最小生成树 \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特别感谢 此次课的主讲 - Kwling 生成树及最小 ...

  9. Nacos源码—2.Nacos服务注册发现分析二

    大纲 5.服务发现-服务之间的调用请求链路分析 6.服务端如何维护不健康的微服务实例 7.服务下线时涉及的处理 8.服务注册发现总结 5.服务发现-服务之间的调用请求链路分析 (1)微服务通过Naco ...

  10. 鸿蒙NEXT开发实战教程:仿抖音短视频

    今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图:   下面为大家讲解这个项目的详细教程. tabbar Tabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里 ...