vlambda博客
学习文章列表

开篇词:如何实现自我基础设施新重建-从掌握一致性与分布式事务开始


个人简单自我介绍

你好,我是流沙河,曾经在360公司担任服务器端高级专家,工作14年来(之前在三星,销售易等公司工作过),公司背景既有国际知名大厂,也有创业型公司,业务领域各有不同,但本人一直专注在JAVA服务器端开发领域,比较擅长的有大型的高并发交易系统的架构经验,也有面向SAAS领域的业务平台的开发经验,同时对常见的开源中间件框架有过深入的了解。之前在360技术中台部门从事一些偏基础服务和架构的工作内容。

这么多年来的工作经验总结:虽然我们面临着不同业务场景下的系统千差万别,但是这些系统的研发都有一些基本的共性问题需要我们去解决,其中一个最常见也是最重要的问题就是数据的一致性问题。


学习这门课能够解决哪些问题?

举例说明,比如我在好多年前从事互联网彩票高并发交易系统研发的时候,由于当年的世界杯等赛事很火爆,人们网上购彩的习惯很高涨,我们公司自己研发的彩票核心交易系统一直压力很大,同时涉及账户、订单、支付、出票整体流程以及后面的开奖、算奖和派奖各个环节中都需要数据的强一致性的保证,由于当年的分布式事务解决方案比较少,但是为了应对各种跨服务的数据不一致的情况,就总结出了很多有用的实践经验:用户的账户表中除了余额字段外还要添加一个冻结字段,在用户资金扣款的时候先把余额的资金转到冻结字段里面,走后续的第三方出票流程,如果出票失败将之前冻结的资金进行解冻操作并原路返还,如果出票成功则扣减冻结余额。虽然当时没有所谓的分布式事务的各种模式,但是实际上这个小小的例子就是目前的模式的早期实际应用,目前的很多总结的分布式事务模式的做法也都是早些年就存在了,只是加以总结称之为模式而已。

 

为什么学习这门课有着重要的价值?

一致性问题和分布式事务问题既是在分布式系统架构中所面临的核心和通用性的问题,也是一个高级架构师必须要掌握的核心基础。换句话说,如果不弄明白一致性和分布式事务的各种解决方案就不是一个好的架构师,也不可能解决架构师所面临的其他诸如高并发,高可用,高可扩展性的非功能需求问题,更不可能从实现基础程序或高级程序员跨越到架构师和技术专家这个阶段。本人也是在多年的实践中慢慢总结提炼同时加上多年的持续理论知识学习后才有了一定的领悟和深入的理解。

后面我将带领大家全面梳理并总结各种业务场景下的一致性的问题,并针对分布式事务的场景,全面的系统的介绍各种分布式事务的解决方案。可以说掌握了一致性和分布式事务这个核心问题,处理其他的问题都会迎刃而解,事半功倍,也会真正的提高自己的整体架构能力和技术深度。

适合什么样的人群来学习?

首选提出来一个问题供大家思考,一个应届毕业没多久的程序员如何才能快速的积累贴近实战的工作经验和能力,以避免越来越内卷的职场环境中其他优秀小伙伴的竞争?一个天天研发只写增删改查业务逻辑代码的程序员如何才能提高自己的技能让领导刮目相看?一个中高级程序员如何才能跨越技术门槛迈向大厂架构师和技术专家的行列?计算机研发领域跟其他领域不一样,既要有理论基础又要有实践操作经验,也就是“既要上的厅堂又要下得厨房”。基础理论只有跟实际问题结合并用通俗易懂的语言解释出来才能被大家所吸收掌握,大家看理论书籍的时候是不少感觉看的迷迷糊糊似懂非懂?大家实际编程的时候是否又感觉到没有理论的支撑而茫然不知所措?如何解决这些问题,我将通过接下来这个专题力求用通俗易懂的语言讲解抽象难懂的理论,力求帮助大家在接下来的专栏里将一致性和分布式事务这块专题内容一网打尽。

本门课程有哪些特色呢?

系统性:

本专栏力求全面总结各种应用场景中所涉及的一致性问题,然后对面临的共性问题和各种解决方案进行全面的系统的介绍。只有掌握了各种通用的问题和对应的解决方案,才行在实际的系统架构和研发中做到举一反三、触类旁通,也可以应付面试中的各种苛刻的问题,取得好的成绩。

深度性:

本课程希望总结出数据库事务的ACID原理事务的并发控制等基础知识,同时对分布式架构和微服务环境下的一致性问题和分布式事务给出详细的不同的解决方案,这些方案主要包括如下:CPU的缓存一致性协议,缓存集群的一致性哈希算法,基于消息中间件的本地消息和事务消息,传统的分布式事务理论2PC,XA协议,数据库和缓存一致性架构设计,分布式系统的共识协议ZAB和RAFT等,同时还主要介绍阿里的开源seata框架所涉及的四种分布式事务模式:XA模式、AT模式、TCC模式、SAGA模式,在讲解理论的同时结合实际案例进行深入的原理剖析和实践总结。

课程各模块介绍:

该课程结合微服务架构下和分布式环境中所面临的分布式事务问题进行全面的梳理,从传统的关系型数据库中涉及的事务和ACID理论出发,到分布式系统的各种协议对分布式事务所涉及的知识点进行全面总结,并结合案例进行实践和剖析。

 

模块一:各种一致性问题应用场景和可能遇到的各种问题

微服务架构目前已经成为各大公司的主流架构模式,分布式系统架构又是目前的主流研发和部署模式。在微服务架构和分布式系统的环境中我们可能面临各种一致性问题,这个模块主要列出来各种场景下的一致性问题,以及不同的人对一致性的不同理解,澄清一些一致性概念的滥用情况,各种一致性的问题的解决方案也会大概介绍一下。

模块二:解决这些问题的技术基础和原理剖析

一致性的保障需要很强的理论基础支撑,尤其是关系型数据库的理论基础,而分布式事务的理论基础和解决方案也都是基于传统的数据库事务以及UNDO日志和并发控制之类的基础原理,分布式事务的解决方案也需要本地关系数据库的本地事务的保证,因此关系数据库的本地事务锁涉及的基础理论知识也是非常重要的一个环节和基础。这节掌握之后对于面试数据库相关岗位的同学也是大有裨益。

模块三:分布式解决方案介绍,穿插开源框架(重点模块)

基于关系型数据库的分布式事务是本次课的重点内容,本模块也是重点继详细说明,先介绍理论基础两阶段提交和三阶段提交的理论解决,该理论是后续其他模式的基础理论。

结合Seata框架详细剖析四种分布式事务模式:XA模式、AT模式、TCC模式、SAGA模式的原理和应用场景。

 

模块四:其他场景和问题的技术解决方案

一致性方案对于非关系型数据库根据不同的存储方案需要使用不同的个性化的方案,目前没有通用的解决方案,需要具体问题具体分析,如缓存的一致性问题,基于消息中间件的分布式最终一致性解决方案等。同时对于分布式系统间节点的一致性(Consensus)需要熟悉一些共识协议和分布式分片复制算法的概念和知识,本模块重点讲解这部分的内容,算是对非关系型数据库分布式事务的其他一致性的解决方案的一些总结。

课程大纲

模块一:数据一致性问题产生的背景分析

1.微服务架构的演进过程

2. 概念辨析:分布式共识协议中的一致性和ACID中一致性概念异同

3. 分布式事务产生的场景和背景分析

4. 数据库主从复制之间的一致性问题

5. 关系型数据库分库分表场景下的数据一致性问题

6. 跨数据中心的数据一致性问题

 

模块二:关系型数据库数据一致性的解决方案:事务

1. 事务的本质和ACID特性深入剖析

2. 事务的并发控制深入剖析

3. 事务的隔离级别和Spring框架中事务的传播机制

4.包括三数据异常和两种写数据异常的汇总分析和解决方法

5. 基于封锁的方法进行事务的并发控制深入介绍

6. 基于快照隔离的方法进行事务的并发控制深入介绍

模块三:分布式事务解决方案

1. 强一致性协议之二阶段提交和三阶段提交

2. 分布式事务的常见解决方案之Xa模式

3. 案例:结合seata框架剖析xa模式

4. 分布式事务的常见解决方案之SAGA模式

5. 案例:结合seata框架剖析SAGA模式

6. 分布式事务的常见解决方案之TCC模式

7. 案例:结合seata框架剖析TCC模式

8. 原理分析:结合seata框架剖析AT模式1

9. 深入源码:结合seata框架剖析AT模式2

10. 总结:分布式事务不同解决方案的技术选型和各模式优缺点分析

11.基于消息中间件的本地消息和事务消息是如何解决分布式事务的?

12. 案例:结合分库分表框架sharding-sphere如何解决分布式事务

模块四:分布式一致性协议介绍和一致性协议的应用

  1. 分布式系统之CAP原理和BASE理论

  2. 一致性与可用性的关系探讨

  3. 缓存一致性问题产生背景和缓存集群的一致性哈希算法

  4. 扩展知识:CPU高速缓存的一致性协议分析

  5. 拜占庭将军(Byzantine Generals Problem)问题

  6. ZAB协议、Paxos 协议、Distro协议原理分析(上)

7.ZAB协议、Paxos 协议、Distro协议原理分析(下)

8.深入浅出分析Raft协议细节和应用(上)

9.深入浅出分析Raft协议细节和应用(下)

10.扩展:其他开源分布式数据库TIDB的分布式事务实现介绍

11.面试:分布式事务相关面试点总结

寄语

不想当将军的士兵不是好士兵,这是拿破仑的名言。也是老师寄语年轻程序员新人的一句话,

只要自己有努力学习的欲望加上吸收好的业界经验的指导,做到自己掌握的知识有理论基础支撑,有原理深度专研,有丰富业务场景经验,加上一些自己的诸如沟通能力和抗压能力等软实力,就一定会快速甩开同龄人,尽早迈进架构师和技术专家的行列。