分布式金融架构课
任杰
eBay 支付账务系统负责人,前蚂蚁金服架构师
2444 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
02 | 原理解读:如何理解第三方支付的业务逻辑和系统组件?
13 | 正确性分级(中):多机无容灾有哪几种不同的一致性实现?
15 | 分布式正确性的存在性(上):什么情况下不存在分布式共识算法?
课程目录
已完结/共 30 讲
开篇词 (1讲)
开篇词 | 如何成为金融级人才?
金融业务与系统 (6讲)
01 | 业务初探:扫了二维码之后发生了什么?
02 | 原理解读:如何理解第三方支付的业务逻辑和系统组件?
03 | 产品大观:不同金融业务都有哪些技术实现要点?
04 | 领域驱动设计(上):如何设计金融软件顶层架构?
05 | 领域驱动设计(下):如何设计统一的金融业务模型?
答疑集锦(一) | 思考题解析与外汇架构知识拓展
系统正确性保障 (7讲)
06 | 计算输入的正确性:怎么选择正确时间的数据?
07 | 计算过程的正确性:如何设计正确的数据处理架构?
08 | 计算结果的正确性:怎么保证计算结果是正确的?
09 | 数据传输的质量:金融业务对数据传输有什么要求?
10 | 数据存储的合理性:金融业务可以不用关系型数据库吗?
11 | 系统优化:如何让金融系统运行得更快?
答疑集锦(二) | 思考题解析与账务系统优化
分布式正确性及高可用 (11讲)
12 | 正确性分级(上):单机无备份有哪几种不同的一致性?
13 | 正确性分级(中):多机无容灾有哪几种不同的一致性实现?
14 | 正确性分级(下):多机有容灾有哪几种不同的一致性?
15 | 分布式正确性的存在性(上):什么情况下不存在分布式共识算法?
16 | 分布式一致性(下):怎么理解最简单的分布式一致性算法?
17 | 正确性案例(上):如何实现分布式的事件溯源架构?
18 | 正确性案例(中):常见分布式数据方案的设计原理是什么?
19 | 正确性案例(下):如何在运行时进行数据系统的动态分库?
20 | 容灾(上)如何实现正确的跨机房实时容灾?
21 | 容灾(下):如何通过混沌工程提高系统稳定性?
答疑集锦(三) | 思考题解析与数据库底层实现
春节策划 (3讲)
春节策划第1期 | 分布式金融系统知识,你掌握了多少?
春节策划第2期 | 读书如抽丝,为你推荐一些我读过的好书
春节策划第3期 | 如何运用架构知识解读春运买票和手游案例?
结束语 (2讲)
结束语 | 金融之道,与你同行,虽远尤欣
结课测试|这些金融架构的问题,你都掌握了么?
分布式金融架构课
15
15
1.0x
00:00/00:00
登录|注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。

12 | 正确性分级(上):单机无备份有哪几种不同的一致性?

你好,我是任杰。从今天开始,我们进入到最后一个模块:分布式正确性及高可用。
在前面两个模块里,我们一起学习了金融业务,以及如何实现正确的金融系统架构。不过我们前面所讲的正确性,主要侧重点是金融业务实现的正确性。但是这些正确性还远远不够,你原来正确的代码运行在多线程或者分布式环境下,依然有可能出错。
所以,这一个模块我们主要探讨的内容是如何保证与业务无关的正确性。按照从简单到复杂的顺序,我们先来看看单机情况下会出现哪些不正确的情况。

冲突

如果一个东西永远都不会变,那么我们在使用它的时候一定不会出错,这就是我们在第 8 节课说过的函数式编程优势。
可惜现实并不完美,程序的状态还是会被修改。如果多个人在没有良好沟通的情况下独自修改状态,这样就可能会出错,而这种错误就叫冲突。
当然了,这么定义太过于模糊,我们还需要对冲突做准确的定义。为了方便后面做分析,我们先对要研究的问题做一些假设。
我们假设机器上存在着一些共享资源,用 xyz 表示,对这些资源有读和写两种操作,用 RW 来表示。对资源的读操作不会改变资源的状态,但是写操作会改变。
有很多人会对这些资源做读或者写的操作。每个人的操作叫作事务,我们用 T来表示。所以一个事务T里会有一系列读写操作。下面是一个时序图,展示了两个事务随着时间推移的情况:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
02 | 原理解读:如何理解第三方支付的业务逻辑和系统组件?
13 | 正确性分级(中):多机无容灾有哪几种不同的一致性实现?
15 | 分布式正确性的存在性(上):什么情况下不存在分布式共识算法?
18 | 正确性案例(中):常见分布式数据方案的设计原理是什么?
21 | 容灾(下):如何通过混沌工程提高系统稳定性?
春节策划第2期 | 读书如抽丝,为你推荐一些我读过的好书
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录 后留言

精选留言(5)

  • luke
    这里不仅仅指单机,还是单进程吧?事务隔离和一致性感觉是两个概念。我理解后面讲的共识算法才是解决一致性的问题,而单机这里其实就是并发问题
    2021-04-07
    1
  • tt
    快照隔离是依赖数据的版本号(我理解就是修改数据时的事务ID)来完成的。

    正好乐观锁也是依赖于版本号: 在提交的时候判断版本号是否发生了变化,如果没有就提交,如果有变化就回滚。

    所以可串行化快照隔离也是使用类似的机制吧。

    作者回复: 是的。这两者在理论上都使用了数据的逻辑时间。

    2021-01-20
    1
  • LiJiao
    感觉这一章的题目应该是:《单机数据操作的正确性怎样保障?》。对单机上的数据进行操作时,要考虑两个问题。

    第一个问题:操作到一半时发生故障,数据只改写了一半,另一半未改写。解决方法是提供「原子操作」功能,要么成功要么失败,不存在中间态。

    第二个问题:「实际由多个步骤组成」的原子操作并发执行时,结果是怎样的?解决方法是给出了四种隔离级别,即给出了四个不同的规定和实现承诺。

    就是,「单机上的数据操作」应该称为一致性还是正确性。。迷惑了。。掉入词眼里了。。。
    2021-10-12
  • LiJiao
    看完14章《多机容灾有哪几种不同的一致性?》后,对这章的内容感到困惑了。假定下面的理解是正确的:本章和13章讲的是单机事务和分布式事务的一致性,14章讲解的是多副本中的「数据一致性」。但是本章的内容看来看去,讲的都是事务的隔离级别,和一致性有啥关系?

    「数据库事务的一致性」在wiki上的定义不是很具体,于是到mysql的文档中找到了innodb对ACID的理解:

    The database remains in a consistent state at all times — after each commit or rollback, and while transactions are in progress. If related data is being updated across multiple tables, queries see either all old values or all new values, not a mix of old and new values.
    // https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_acid

    如果Innodb对ACID中的一致性的理解是对的,一致性的定义是:要么读到新数据,要么读到旧数据,不能两者兼有。本章好像没讲一致性 ,讲的都是事务隔离,怎么和一致性连系起来?
    2021-10-12
  • 木头发芽
    这节课可以当做是Innodb引擎的事务的隔离级别的实现原理的简洁版.用的最多的还是RR级别,特别是涉及到用户之间发红包转账业务,必须在事务一开始就对用户ID的账号进行锁行,然后读取和修改余额数值.最后commit提交或回滚
    2021-05-18
收起评论
5
返回
顶部