如何保证数据库分布式事务的强一致性

news/2024/12/15 14:59:47/

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

概要

针对分布式数据库,如何保证分布式事务的强一致性,是分布式数据库的关键。分布式事务的强一致性方案这里介绍两种,一种是GTM(global transaction manager),另一种是基于XA协议的两阶段提交(2PC)。注意,本文是基于MySQL数据库的分析,但是思想是数据库通用的。

GTM

全局事务管理器,思想是将原本集中式数据库的MVCC方案拓展到分布式。

要素

  • GXID:全局唯一递增的事务id。
  • Global Snapshot: 全局事务快照,我个人理解为一个全局版的ReadView。

流程:

如图所示:

  1. 分布式事务开启,gate向GTM申请GXID和Global Snapshot,
  2. 各shard, 开启单机事务,把GXID和Snapshot下发执行。
  3. 各shard读取数据时, 会结合GXID和Snapshot来读取全局一致的数据。
  4. 分布式事务提交或者回滚完成之后,Gate向GTM汇报事务状态,使得GTM可以维护所有的全局事务的状态

基于GTM的MySQL分布式事务强一致性方案:

  1. Global Snapshot(全局快照)   
    1.  global_up_limit_id: 当前未提交的全局事务的最小值        
    2. global_low_limit_id:当前已分配的全局事务号+1;(ReadView中 也成为max_id)
    3. global_trx_ids:当前未提交全局事务id列表
  2. 基于Global Snapshot的可见性判断

     

    1. gxid < global_up_limit_id,对于当前global snapshot都是可见的。
    2. gxid >= global_low_limit_id,对于当前global snapshot都是不可见的。
    3. global_trx_ids 中的事务对于当前global snapshot是不可见的
  3. 数据的读取过程
    1. 从最新版本开始,找到第一个对于当前global snapshot都可见的数据版本
  4. 总结:和单机版的MySQL的MVCC版本控制思想一致,不过是将范围扩大到了全局。
  5. 局限性:
    1. 存在性能瓶颈,无法支撑大规模集群。
    2. 扩展性查,无法满足副本的全局一致性读以及备份和恢复需求。

XA

MySQL的XA协议是一个事务协议,用于实现分布式事务。XA协议包含了两个阶段preparecommit。在prepare阶段,事务协调者(Transaction Coordinator)在所有参与者(Participants)上执行prepare操作。如果所有参与者都成功的执行了prepare操作,那么该事务就可以被提交(commit)。如果有一个参与者在prepare阶段失败,则该事务将被回滚。

在MySQL中,XA协议通常用于在多个MySQL实例之间执行分布式事务。通过实现XA协议,多个MySQL实例可以参与到同一个分布式事务中,并保证事务的ACID特性。

在MySQL中,XA协议需要开启事务支持(transaction support),以及使用XID(transaction identifier)来跟踪事务。

两阶段提交(2PC)

第一阶段:

1. 协调者向参与者发出执行请求执行事务的消息

2. 参与者执行事务, 并将undo 和 redo 信息记录在事务日志中,但不commit, 资源已经被锁定。

3. 参与者向协调者发送投票消息,Agree表示事务执行成功,Abort表示执行失败。

第二阶段:

1. 协调者收到所有参与者的投票信息,所有参与者都返回Agreee,协调者向所有参与者发送commit消息。

2. 参与者收到 ‘commit’消息后,执行提交操作,并释放在第一阶段中申请的资源。

3. 如果任何一个参与者返回“否决”消息,协调者将向所有参与者发送“回滚”

4. 参与者收到“回滚”消息,执行回滚操作,并释放第一阶段中申请的所有资源。

总结:

1. 相较于GTM, XA和2PC的实现很复杂,但是可以支持大规模集群,扩展性也很好,可以实现副本的全局一致性读以及全局一致性的备份和恢复。


http://www.ppmy.cn/news/376698.html

相关文章

腾讯安全发布“数字安全免疫力”模型框架,建设发展驱动安全新范式

随着数字化进程加快&#xff0c;企业数字化体系的边界在不断拓展&#xff0c;安全风险和挑战不断增加&#xff0c;传统被动防御的安全应对常显疲态&#xff0c;数字安全时代亟待建立全新的安全范式。 6月13日&#xff0c;腾讯安全联合IDC在北京发布“数字安全免疫力”模型框架…

【C语言】VScode中配置C语言/C++运行环境(保姆级图文)

目录 省流助手1. 下载安装VScode2. 下载编译器MinGW并解压3. 将MinGW添加至环境变量4. 安装vscode的插件5. 运行代码6. 调整和优化&#xff08;这部分转自零流火星动力猿 2022.4.12&#xff09;总结 欢迎关注 『C语言』 系列&#xff0c;持续更新中 欢迎关注 『C语言』 系列&am…

微星主板更新BIOS能识别U盘但读取不到BIOS文件

记录一次BIOS的更新问题&#xff0c;问题比较尴尬。 本来是更新驱动想着顺便把BIOS也更新一下&#xff0c;就去微星官网下载了BIOS文件&#xff0c;将文件解压到U盘后重启按delete进入BIOS用M-FLASH更新&#xff0c;自动重启后进入U盘选文件界面。 这时候问题来了&#xff0c…

bios 微星click_微星主板CLICK BIOS II BIOS设置软件下载_微星主板CLICK BIOS II BIOS设置软件官方下载-太平洋下载中心...

微星科技独家ClickBIOS II&#xff0c;不但是全球第一个整合UEFI BIOS跟Windows应用程式的系统工具&#xff0c;可以分别在不同的环境下&#xff0c;透过滑鼠甚至是触控面板来调校系统设定&#xff0c;相对于往常产品只能提供UEFI BIOS或者Windows应用程式&#xff0c;ClickBIO…

十代主板改win7_微星(MSI)z490主板装win7系统及bios设置教程(支持10代usb驱动)

[文章导读]我们知道自从z490主板发布后,有很多使用微星主板的网友问,微星z490主板其搭载intel 酷睿10代cpu可以安装安装win7吗?微星z490主板预装的是win10系统,用户还是喜欢win7系统,该微星z490主板可以采用的第十代酷睿i5-10400 CPU安装win7,在安装WIN7过程中USB设备不能…

十代主板改win7_微星h410主板装win7系统及bios设置教程(支持10代usb)

[文章导读]我们知道自从h410主板发布后,有很多使用微星主板的网友问,微星h410主板其搭载intel 酷睿10代i5-10400处理器可以安装安装win7吗?微星h410主板预装的是win10系统,用户还是喜欢win7系统,该微星h410主板可以采用的第十代酷睿i5-10400 CPU安装win7,在安装WIN7过程中…

8代主板装服务器系统,微星B365主板搭配intel 8代cpu安装win7及bios设置教程

就在前不久发布华硕和华擎分别发布了b365主板,近期微星也发布了b365主板,有很多使用微星主板的网友问,微星B365主板其搭载intel 酷睿8代cpu可以安装安装win7吗?微星B365主板预装的是win10系统,用户还是喜欢win7系统,该微星B365主板可以搭配的第八代酷睿安装win7,在安装W…

奔驰S450升级大柏林之声音响系统,享受殿堂级音响

新款奔驰S级&#xff08;W223&#xff09;大柏林之声全车有31个扬声器&#xff0c;而且每个座椅的靠背位置还配备了两个谐振器&#xff01;总功率达到了1750W。31个扬声器搭配8个座椅振荡器&#xff0c;实现4D音响、励磁器包括一个震动物质和一个接触板&#xff0c;如果有音乐或…