AntDB 事务机制

全局一致性

AntDB 的集群架构包括,一个 GTM(Global Transaction Manager)、多个Coordinator(CN)、多个 Datanode(DN)。其中 GTM 负责给其他的 DN 和CN 分发集群全局唯一的事务号和集群当前判断可见性的 SnapShot。CN 为计算节点,负责接收客户端连接,并且做词法、语法和语义分析,还会判断语句或者执行计划需要发送到哪些 DN。DN 为存储节点,负责存储最终的数据信息。
AntDB 采用与 PGXC 一样的 2PC 两阶段协议来保证分布式数据库一致性。假设用户A 向用户 B 转账,用户A 需要转账 50 元给用户B。用户 A 的数据分片在 DN1 上,用户 B 的数据分片在 DN2 上。CN1 连接到 DN1 和 DN2,分别对用户A 数据减去 50,用户 B 数据加上 50,最终 CN1 需要commit 提交的时候, 需要分别到 DN1 和 DN2 上做两阶段提交。

2PC协议和Paxos协议

在数据库领域,提到分布式系统,就会提到分布式事务。Paxos 协议与分布式事务并不是同一层面的东西。分布式事务的作用是保证跨节点事务的原子性,涉及事务的节点要么都提交(执行成功),要么都不提交(回滚)。分布式事务的一致性通常通过 2PC(Two-Phase Commit)来保证,这里面涉及一个协调者(CN)和若干个参与者(DN)。第一阶段,协调者询问参与者事务是 否可以执行,参与者回复同意(本地执行成功),回复取消(本地执行失败)。第二阶段,协调者根据第一阶段的投票结果进行决策,当且仅当所有的参与者同意提交事务时才会提交,否则回滚。2PC 的最大问题是,协调者是单点(需要有一个备用节点),另外协议是阻塞协议,任何一个参与者故障,都需要等待(可以通过加入超时机制)。

Paxos 协议用于解决多个副本之间的一致性问题。比如日志同步,保证各个节点的日志一致性,或者选主(主故障情况下),保证投票达成一致,选主具有唯一性。简而言之,2PC 用于保证多个数据分片上事务的原子性,Paxos 协议用于保证同一个数据分片在多个副本的一致性,所以两者是互补的关系, 而不是替代关系。对于 2PC 协调者单点问题,可以利用 Paxos 协议解决,即当协调者出问题时,选一个新的协调者继续提供服务。工程实践中,Google Spanner、Google Chubby 就是利用 Paxos 来实现多副本日志同步。当前 AntDB 还尚未引入 Paxos 协议,下一步考虑使用 Paxos 协议来实现分布式模式下“一主多备”的高可用。

2PC 流程在 AntDB 内部流程如图 3-6 所示。
(1)CN1 从 GTM 请求并获得,集群全局,SnapShot。
(2)CN1 从 GTM 请求并获得,集群全局唯一 TransactionID ,事务号 100。
(3)CN1 到 DN1 上对用户 A 减去 50,同时到 DN2 上对用户 B 加上 50。
(4)CN1 分别操作用户 A 和用户 B 的数据成功后,需要提交该事务。两阶段的第一阶段,分别到 DN1 和 DN2 预提交。即 prepare transaction T100。
(5)DN1 和 DN2 都能预提交成功并且成功返回 ACK。
(6)CN1 本地结束事务号 100。
(7)CN1 分别到 DN1 和 DN2 上进行两阶段的第二阶段,真正地提交
T100。
(8)DN1 和 DN2 提交成功并且成功返回 ACK。

如果第(5)步,任何一个节点返回预提交失败,第(6)、(7)步分别需要本地 rollback 和两阶段第二阶段 rollback prepared T100。这样就能实现两个或多个节点,同时成功或同时失败。

AntDB 5.0 优化了 GTM 事务号和 SnapShot 分发流程,减少了 CN 和 GTM的实时交互,并实现了一种 CN 在本地获取 SnapShot 的方法。AntDB CN/DN申请和结束事务号流程如图 3-7 所示。

(1)Client CN1 某一个连接进程需要获取事务号,发送请求给本地进程SnapRcv。SnapRcv 与 GTM SnapSender 有 TCP 长连接。SnapRcv 发送申请事务号请求给 GTM SnapSender 获取事务号。
(2)GTM SnapSender 收到申请事务号请求,在本地获取集群全局唯一事务号,返回给 SnapRcv,同时放入待分发事务号列表中,触发 GTM SnapSender 去处理待分发和待结束事务号列表。
(3)Client CN1 SnapRcv 收到返回的事务号后,通知 Backend 服务进程,
Backend 继续处理。
(4)GTM 处理事务号分发列表,把 CN1 申请的事务号发送给所有的SnapRcv Client。所有的 SnapRcv 收到 GTM SnapSender 分发的事务号,放入SnapRcv 活跃事务号列表中。
(5)Backend 结束事 务 号,SnapRcv 发送结 束事务号 请求到 GTM SnapSender。
(6)GTM SnapSender 收到 SnapRcv 请求,把要结束的事务号放入待结束事务号列表,立即返回给 Client,同时触发 GTM SnapSender 处理分发和结束事务号列表。
(7)CN1 SnapRcv 收到结束事务号返回,结束该 Backend 进程等待。
Backend 继续处理。
(8)GTM SnapSender 发送结束事务号消息到所有的 SnapRcv。SnapRcv
收到消息后,从活跃事务号列表中剔除要结束的事务号。
SnapRcv 发送包括申请和结束事务号消息,为Backend 进程服务。SnapRcv 接收申请事务号和结束事务号相对应,返回给等待的 Backend 进程。SnapRcv 接收 GTM SnapSender 分发和结束的事务号列表,来更新到本地共享内存中。SnapRcv 维护集群活跃事务号列表,提供给本地 Backend 获取 Snapshot。

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

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

相关文章

你知道微信的转账是可以退回的吗

微信作为当今最受欢迎的即时通讯软件之一,其转账功能得到了广泛的应用。在使用微信转账时,我们可能会遇到一些问题,例如误操作、支付失败或者需要退款等等。 首先需要注意的是,微信转账退回的操作只能在“一天内未确认”时进行。如…

2023年天猫618淘宝大赢家每日1猜:哪系列是NB夏日潮流必备?今日答案是什么?淘宝天猫618红包口令怎么领取?

2023年6月13日天猫618淘宝大赢家今日答案 问题:哪系列是NB夏日潮流必备 答案:2002R (注:R必须为大写) 2023年淘宝天猫618超级红包怎么领取? 从2023年5月29日开始持续到6月20日,每天都可以打…

UniApp全局弹窗

一、设计思路 1、创建一个弹窗页面组件 2、配置page.json,使页面跳转是在当前界面展示 3、定义uni全局全局属性 4、解决多个弹窗同时使用的冲突问题 注意:此方案不支持多个弹窗并存,有且仅有一个会展示,当前弹窗展示并关闭上一个弹…

1740_使用Python+ImageMagick实现图像的批量压缩

全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com) 前些年使用Linux的时候为了能够方便地往网络上上传照片,使用shell ImageMagick的组合进行照片的批量压缩一直觉得比较方便。不过,那时候即使这么简单的…

SQL注入总结

Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的。 sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲注和布尔型的盲注 基于user-agen…

汽车仪表中控开发中视频相关的一些知识点

前言: 做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高清电视接口。ITU-R BT.601/6…

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我,歌曲的歌词和评论怎么生成词云图,想买代码… 当时我就拒绝了,直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例,要对《青花瓷》歌词…

DDP分布式训练中遇到的一些问题

1:所有forward的输出必须参与到loss计算并回传 2:类似于layer_norm这样的操作是无需进行分布式通信的,也无法进行分布式通信,所以在DDP的时候必须把find_unused_parameters设置为True 3:当报错形式为如下时&#xff…

Linux基础知识3

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载! 用户与用户组管理 Linux系统下的3类用户和功能; 答: root用户(或称根用户、超级用户):Linux的内置用户,权限最高,具有…

Qt学习06:QPainter绘画

文章首发于我的个人博客:欢迎大佬们来逛逛 Qt学习06:QPainter绘画 Qt绘图 Paint System Qt的绘制系统支持在屏幕和打印设备上使用相同的API进行绘制,主要基于QPainter、QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作&#xff…

KYOCERA Programming Contest 2023(AtCoder Beginner Contest 305)(A、B、C、D)[施工中]

文章目录 A - Water Station(模拟)B - ABCDEFG(模拟)C - Snuke the Cookie Picker(模拟、暴力)D - Sleep Log(二分,前缀) A - Water Station(模拟) 题意:在[0,100]所有 x % 5 0的地方设置一个水站&#x…

有效延缓痴呆症:延世大学发现梯度提升机模型能准确预测 BPSD 亚综合征

内容一览:随着人口老龄化程度不断加剧,痴呆症已经成为公共健康问题。目前医学界治疗该病还只能通过药物缓解,尚未发现治愈的有效方法,因此,预防痴呆症尤为紧迫。在这一背景下,延世大学的研究人员开发了多个…

【每日挠头算法题(5)】重新格式化字符串|压缩字符串

欢迎~ 一、重新格式化字符串思路1:构造模拟具体代码如下: 思路2:双指针法具体代码如下: 二、字符串压缩思路1:简单替换 总结 一、重新格式化字符串 点我直达~ 思路1:构造模拟 1.遍历字符串,…

2023-6-12-第三式单例模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

HTTPS

HTTP 协议内容都是按照文本的方式明文传输的。 这就导致在传输过程中出现一些被篡改的情况。为了保证安全,现在大多数网站都采用HTTPS协议。HTTPS协议是在HTTP协议的基础上引入了一个加密层SSL。 目录 HTTPS的加密流程对称加密非对称加密为什么引入非对称加密&…

Python处理办公自动化的10大场景

在编程世界里,Python已经是名副其实的网红了。Python最大优势在于容易学,门槛比Java、C低非常多,给非程序员群体提供了用代码干活的可能性。当然Python能成为大众编程工具,不紧是因为易学,还因为Python有成千上万的工具…

抖音电商发展路径:从外链种草到达人/品牌直播

复盘抖音电商发展,可以总结出以下几点发展特征: 策略重心的变化 以种草为核心,给电商引流站外成交(2019 年及之前)→ 力推达人直播但效 果一般(2020 上半年)→ 推品牌自播并彻底闭环&#xff0…

Redis.conf 详解

我们启动 Redis,一般都是通过 Redis.conf 启动。 因此,我们必须了解 Redis.conf 的配置,才能更好理解和使用 Redis。 单位 单位注意事项:当需要内存大小时,可以指定为1k 5GB 4M等 通常形式: 1k > 1000字…

谈谈几个常见数据结构的原理

数组 数组是最常用的数据结构,创建数组必须要内存中一块 连续 的空间,并且数组中必须存放 相同 的数据类型。比如我们创建一个长度为10,数据类型为整型的数组,在内存中的地址是从1000开始,那么它在内存中的存储格式如…

【lvs集群】HAProxy搭建Web集群

HAProxy搭建Web集群 一、 HAProxy简介1.1HAProxy主要特性1.2HAProxy负载均衡策略非常多,常见的有如下8种1.3LVS、Nginx、HAproxy的区别1.4常见的Web集群调度器 二、Haproxy搭建 Web 群集haproxy服务器部署节点服务器部署 三、定义监控页面与定义日志3.1定义监控页面…