分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
6039 人已学习
课程目录
已完结 31 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
学习路径 | 分布式协议与算法你应该这么学
理论篇 (5讲)
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如何实现指令执行的原子性?
实战篇 (5讲)
16 | InfluxDB企业版一致性实现剖析:他山之石,可以攻玉
17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?
18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?
19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?
20 | 基于Raft的分布式KV系统开发实战(二):如何实现代码?
结束语 (2讲)
结束语 | 静下心来,享受技术的乐趣
结课测试 | 这些分布式协议与算法的知识,你都掌握了吗?
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | TCC如何实现指令执行的原子性?

韩健 2020-06-28
你好,我是韩健。
在上一讲我提到,虽然 MySQL XA 能实现数据层的分布式事务,解决多个 MySQL 操作的事务问题,但我现在负责的这套业务系统还面临别的问题:在接收到外部的指令后,我需要访问多个内部系统,执行指令约定的操作,而且,还必须保证指令执行的原子性(也就是事务要么全部成功,要么全部失败)。
那么我是如何实现指令执行的原子性呢?答案是 TCC。
在我看来,上一讲中,基于二阶段提交协议的 XA 规范,实现的是数据层面操作的事务,而 TCC 能实现业务层面操作的事务。
对你来说,理解了二阶段提交协议和 TCC 后,你可以从数据层面到业务层面,更加全面理解如何实现分布式事务了,这样一来,当你在日常工作中,需要实现操作的原子性或者系统状态的一致性时,就知道该如何处理了。
那么为了帮助你更好地理解 TCC,咱们还是先来看一道思考题。
我以如何实现订票系统为例,假设现在要实现一个企鹅订票系统,给内部员工提供机票订购服务,但在实现订票系统时,我们需要考虑这样的情况:
我想从深圳飞北京,但这时没有直达的机票,要先定深圳航空的航班,从深圳去上海,然后再定上海航空的航班,从上海去北京。
因为我的目的地是北京,所以如果只有一张机票订购成功,肯定是不行的,这个系统必须保障 2 个订票操作的事务要么全部成功,要么全部不成功。那么该如何实现 2 个订票操作的事务呢?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • dra
    良心课程,老师用心了。专栏虽完结,还在不停加餐,为学员提供知识服务
    2020-06-28
    1
    2
  • hello
    老师,请教您一个问题,您文中举例操作1,操作2,操作3这三个操作都各自实现TCC(预留操作、确认操作、撤销操作),那TCC都是针对单个操作(如针对操作1、操作2、操作3)实现,那要实现操作1+操作2+操作3这三个操作要么全成功,要么全失败如如何达到的?
    2020-06-29
    2
    1
  • 林绍灏
    老师讲得真的很好,终于弄通了TCC
    2020-07-08
  • 欧阳
    受益匪浅!感谢老师!
    2020-07-01
  • Psyduck
    非常感谢老师,之前在看 TCC 时还是很模糊的感觉,通过这篇文章的讲解感觉清晰多了。
    2020-07-01
  • Corner
    首先感谢老师长久以来坚持持续加餐和优化。然后有一个问题需要请教一下,在预留阶段有哪些常用的数据处理手段呢?是否数据上都要为预留操作增加相应的字段标记。
    2020-06-30
  • Dovelol
    老师好,想问下,如果有3个服务调用,都会涉及到update数据库等操作,那预留资源具体是怎么预留的呢?开启事务,修改,不commit?然后等着commit请求过来后在commit数据库事务吗?
    2020-06-29
  • hello
    老师,再请教您一个问题,TCC有什么好的开源实现可供借鉴没?
    2020-06-29
收起评论
8
返回
顶部