分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
5865 人已学习
课程目录
已完结 29 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (4讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
04 | BASE理论:CAP的碱,追求可用性
协议和算法篇 (17讲)
05 | Paxos算法(一):如何在多个节点间确定某变量的值?
06 | Paxos算法(二):Multi-Paxos不是一个算法,而是统称
07 | Raft算法(一):如何选举领导者?
08 | Raft算法(二):如何复制日志?
09 | Raft算法(三):如何解决成员变更的问题?
10 | 一致哈希算法:如何分群,突破集群的“领导者”限制?
11 | Gossip协议:流言蜚语,原来也可以实现一致性
12 | Quorum NWR算法:想要灵活地自定义一致性,没问题!
13 | PBFT算法:有人作恶,如何达成共识?
加餐 | PBFT算法:如何替换作恶的领导者?
14 | PoW算法:有办法黑比特币吗?
15 | ZAB协议:如何实现操作的顺序性?
加餐 | ZAB协议(一):主节点崩溃了,怎么办?
加餐 | ZAB协议(二):如何从故障中恢复?
加餐 | ZAB协议(三):如何处理读写请求?
加餐 | MySQL XA是如何实现分布式事务的?
加餐 | TCC如何实现指令执行的原子性?
实战篇 (6讲)
16 | InfluxDB企业版一致性实现剖析:他山之石,可以攻玉
17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?
18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?
加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?
19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?
20 | 基于Raft的分布式KV系统开发实战(二):如何实现代码?
结束语 (1讲)
结束语 | 静下心来,享受技术的乐趣
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | MySQL XA是如何实现分布式事务的?

韩健 2020-06-22
你好,我是韩健。
相信很多同学都知道 MySQL 支持单机事务,那么在分布式系统中,涉及多个节点,MySQL 又是怎么实现分布式事务的呢?
这个和我最近遇到的问题很类似,我现在负责的一个业务系统,需要接收来自外部的指令,然后访问多个内部其他系统来执行指令,但执行完指令后,我需要同时更新多个内部 MySQL 数据库中的值(比如 MySQL 数据库 A、B、C)。
但又因为业务敏感,系统必须处于一个一致性状态(也就是说,MySQL 数据库 A、B、C 中的值要么同时更新成功,要么全部不更新)。不然的话,会出现有的系统显示指令执行成功了,有的系统显示指令尚未被执行,导致多部门对指令执行结果理解混乱。
那么我当时是如何实现多个 MySQL 数据库更新的一致性呢?答案就是采用 MySQL XA。
在我看来,MySQL 通过支持 XA 规范的二阶段提交协议,不仅实现了多个 MySQL 数据库操作的事务,还能实现 MySQL、Oracle、SQL Server 等支持 XA 规范的数据库操作的事务。
对你来说,理解 MySQL XA,不仅能理解数据层分布式事务的原理,还能在实际系统中更加深刻的理解二阶段提交协议,这样一来,当你在实际工作中,遇到多个 MySQL 数据库的事务需求时,就知道如何通过 MySQL XA 来处理了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • ppyh
    这个和我最近遇到的问题很类似,我现在负责的一个业务系统,需要接收来自外部的指令,然后访问多个内部其他系统来执行指令,但执行完指令后,我需要同时更新多个内部 MySQL 数据库中的值(比如 MySQL 数据库 A、B、C)。
    不过,虽然 MySQL XA 能实现数据层的分布式事务,但在我现在负责的这套业务系统中,还面临这样的问题:那就是在接收到外部的指令后,我需要访问多个内部系统,执行指令约定的操作,而且,我必须保证指令执行的原子性,也就是说,要么全部成功,要么全部失败,那么我应该怎么做呢?答案是 TCC,这也是我在下一讲想和你聊一聊的。



    这两句话有区别吗,怎么第一句话就可以用mysql xa,第二句话就得用tcc啊

    作者回复: 加一颗星:),第一个问题是如何实现多个MySQL间的操作事务,第二问题,是实现多个业务系统(包括非数据库系统)的操作事务,这时要考虑TCC了。

    2020-06-26
  • ξ!
    老师,raft是不是在保证有状态节点间的内存中数据一致性,而XA在保证数据持久化后的一致性
    2020-06-23
    2
  • 侧耳倾听
    既然是多数据库场景,首先,需要搞清楚的是为什么引入多数据库?如果是基于性能的考虑,并发量大,需要考虑的是读多写少,还是写多读少?如果是读多写少,那么可以采用一主多从,主库负责写,以及引入缓存机制来提高数据的实时性。如果是写多读少,问题有些复杂,如果读的实时要求不高,可以考虑采用队列的形式,后台线程负责写入数据库。如果是基于业务的拆分,要搞明白是不是需要拆分?是在现有硬件基础上解决不了并发的写入,还是仅仅是因为模仿。如果是后者,不妨先考虑将业务表的表空间分不到不同的磁盘,避免单磁盘的写入,可以提高一定的数据写入效率。在这个过程中还需要考虑数据库各种缓存的大小设定,比如chang buffer,redolog文件。争取做到单点优化做到无突破,再考虑横向或者纵向的扩展。一旦牵扯进分布式架构,就不再是一个数量级的问题展现。
    2020-06-23
  • hello
    课程都完结好长一段时间了,老师还在时不时加餐,给老师点赞。

    作者回复: 感谢一路相伴,多交流:)

    2020-06-23
  • 槑·先生
    老师,有个问题不太理解。事务不就包含原子性吗?分布式事务不是也应该包含指令的原子性吗,为什么会存在最后那个指令原子性的问题。
    2020-06-22
收起评论
5
返回
顶部