Amazon Aurora以及ZK论文学习
论文理解
ZK的论文里面的东西感觉很多都是和ETCD相似的,之前也写过ZK的一些不同的点,原理上,毕竟其也是基于raft协议的,操作上相似感觉比较合理。
Aurora,这里面还是有很多东西的,不管是基于MySQL的改造(canal搬运log感觉很像),另外还有quorum因地制宜的使用,数据库服务与存储层服务的分层设计,简化副本复制,采用链式复制等,对这种大型服务的设计能力可见一斑。
资料
思维导图文件:
https://pan.baidu.com/link/zhihu/79hWzOuMhjikTJ1ER3Xw1XZmQCW0JESwdsBT==
思维导图中有很多链接,以及我附带的一些文章附件,用于帮助理解。
论文翻译的地址:
【译】Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases 上篇https://link.zhihu.com/?target=https%3A//xie.infoq.cn/article/09849d56c3b18064af6c7f857)
Mysql binlog的理解
只依靠binlog是没有crash-safe能力的,所以InnoDB使用另外一套日志系统——也就是redo log来实现crash-safe能力。
这两种日志有以下三点不同。
- redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
- redo log是物理日志,记录的是“在某个数据页上做了什么修改”( a1 — > a2 );binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。
- redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
Binlog有两种模式,statement 格式的话是记sql语句, row格式会记录行的内容,记两条,更新前和更新后都有。
图中浅色框表示是在innodb内部执行的,深色框表示是在执行器中执行的。
两阶段提交是指redo log类似于事务写日志的方式,只有在确认binlog 被实际落盘时,才会出现提交redo log的情况。
分阶段失败
1 prepare阶段 2 写binlog 3 commit
当在2之前崩溃时
重启恢复:后发现没有commit,回滚。 备份恢复:没有binlog 。
结果:一致
当在3之前崩溃
重启恢复:虽没有commit,但满足prepare和binlog完整,所以重启后会自动commit。
备份:有binlog。
结果: 一致
binlog用于备份,redolog则保证binlog的正确性,提供crash-safe能力,redo log循环写,不持久保存,binlog则进行“归档”。
MySQL中undo的内容会被记录到redo中吗?会的
比如一个事务在执行到一半的时候实例崩溃了,在恢复的时候先恢复redo,再根据redo构造undo回滚宕机前没有提交的事务
数据被修改一般会积累再内存中(如图上),累积一段后再刷入磁盘,如果这个时候崩溃,也不会出现什么问题,重启时会扫描binlog,没有写入磁盘的数据也会在此时被写入。
本文标题:Amazon Aurora以及ZK论文学习
文章作者:小师
发布时间:2022-01-02
最后更新:2022-05-04
原始链接:chunlife.top/2022/01/02/Amazon-Aurora以及ZK论文学习/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可