加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

再问你一遍,你真的相识漫衍式事宜吗?

发布时间:2020-02-28 05:50:34 所属栏目:编程 来源:站长网
导读:副问题#e# 图片来自 Pexels 当地事宜 事宜 Transaction 由一组 SQL 构成,具有四个 ACID 特征: Atomicity:原子性,组成事宜的一组SQL,要么所有见效,要么全不见效,不会呈现部弟子效的环境。 Consistency:同等性,数据库颠末事宜操纵后从一种状态转变为
副问题[/!--empirenews.page--]

再问你一遍,你真的相识漫衍式事宜吗?

图片来自 Pexels

当地事宜

事宜 Transaction 由一组 SQL 构成,具有四个 ACID 特征:

Atomicity:原子性,组成事宜的一组SQL,要么所有见效,要么全不见效,不会呈现部弟子效的环境。

Consistency:同等性,数据库颠末事宜操纵后从一种状态转变为另一个状态。可以说原子性是从举动上描写,而同等性是从功效上描写。

Isolation:断绝性,事宜操纵的数据工具相对付其他事宜操纵的数据工具彼此断绝,互不影响。

Durability:耐久性,事宜提交后,其功效就是永世性的,纵然产生宕机(非磁盘破坏)。

事宜实现

对付 MySQL 数据库(InnoDB 存储引擎)而言,断绝性是通过差异粒度的锁机制来实现事宜间的断绝。

原子性、同等性和耐久性通过 redo log 重做日记和 undo log 回滚日记来担保的。

redo log:当数据库对数据做修改的时辰,必要把数据页从磁盘读到 buffer pool 中,然后在 buffer pool 中举办修改。

那么这个时辰 buffer pool 中的数据页就与磁盘上的数据页内容纷歧致,称 buffer pool 的数据页为 dirty page 脏数据。

假如这个时辰产生非正常的 DB 处事重启,那么这些数据还没在内存,并没有同步到磁盘文件中(留意,同步到磁盘文件是个随机 IO),也就是会产生数据丢失。

假如这个时辰,可以或许在有一个文件,当 buffer pool 中的 data page 改观竣事后,把响应修改记录记录到这个文件(留意,记录日记是次序 IO)。

那么当 DB 处事产生 crash 的环境,规复 DB 的时辰,也可以按照这个文件的记录内容,从头应用到磁盘文件,数据保持同等。

undo log:undo 日记用于存放数据被修改前的值,假如修改呈现非常,可以行使 undo 日记来实现回滚操纵,担保事宜的同等性。其它 InnoDB MVCC 事宜特征也是基于 undo 日记实现的。

undo 日记分为 insert undo log(insert 语句发生的日记,事宜提交后直接删除)和 update undo log(delete 和 update 语句发生的日记,因为该 undo log 也许提供 MVVC 机制行使,以是不能再事宜提交时删除)。

题目引入

CAP 理论

再问你一遍,你真的相识漫衍式事宜吗?

CAP 原则又称 CAP 定理,指的是在一个漫衍式体系中的同等性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。

CAP 原则指的是,这三个要素最多只能同时实现两点,不行能三者分身。但因为在漫衍式体系中,分区容错性肯定存在,以是只能在同等性和可用性妥协。

传统的 DBMS,如 MySQL 着实 CA 组合,在主从架构下,读写疏散的环境下,是捐躯必然的同等性的(主从耽误)。

Base 理论:

base available,根基可用,漫衍式体系在呈现妨碍时,应承丧失部门可用成果,担保焦点成果可用。

soft state,软状态,应承体系中存在中间状态,这个状态不影响体系可用性。

eventually consistent,最终同等性,体系的中间状态颠末短暂的时刻后达到同等状态。

怎样办理

场景举例

思量这样一种营业场景,体系 A 挪用体系 B 的退款处事举办退款,体系 A 变动内部退款状态,接着挪用体系 C 的短信处事关照用户。

在这样的一个场景下,因为收集不行靠的肯定存在,存在 A、B、C 三个体系之间同等性的题目。

当地表

针对上述场景,计划两张表:退款记录表和短信发送记录表以及响应的赔偿 Job。

详细实现进程:

新增退款记录表,状态为处理赏罚中。

挪用体系 B 的退款处事举办退款。

更新退款记录状态为对应的状态(乐成/失败)。

假如退款乐成,则新增短信发送记录,记录状态为待发送。

挪用体系 C 的短信处事,发送短信。

更新短信发送记录为已发送。

退款赔偿 Job,查询退款记录表中处理赏罚中的记录,挪用体系 B 的退款处事,退款乐成处理赏罚:

新增短信发送记录,记录状态为待发送。

挪用体系 C 的短信处事,发送短信。

更新短信发送记录为已发送。

短信关照赔偿 Job,查询短信发送记录中待发送的记录,挪用体系 C 的短信处事:

挪用体系 C 的短信处事,发送短信。

更新短信发送记录为已发送。

留意:

体系 B 和体系 C 必要按照挪用方传的 uuid 支持幂等。

体系 A、B、C 会呈现短暂的纷歧致,但最终同等。

事宜动静

可以将其视为两阶段提交动静实现,以确保漫衍式体系中的最终同等性。事宜性动静可确保当地事宜的执行和动静的发送可以原子方法执行。

可是因为事宜动静异步的特征,挪用方拿不到斲丧方的处理赏罚功效,合用于不体谅对方的返回功效/对方认真担保处理赏罚乐成。

再问你一遍,你真的相识漫衍式事宜吗?

针对上述场景,增进两个事宜动静的方法办理同等性题目,体系 A 通过发送事宜动静的方法与体系 B 和体系 C 举办交互。

详细实现进程:

发送退款的事宜动静。

新增退款记录,状态为:处理赏罚中。

Commit 退款事宜动静。

提供 MQ 事宜 callback:

退款 callback 查询:有退款记录且为处理赏罚中则 Commit;其他则 Rollback。

发送短信 callback 查询:有退款记录且乐成则 Commit;其他则 Rollback。

退款同步 Job,查询退款记录表中处理赏罚中的记录,挪用体系 B 的退款查询接口同步状态,个中退款乐成处理赏罚:

发送短信的事宜动静

更新退款记录为乐成

Commit 短信事宜动静

相干理论

二阶段提交

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读