预写日志 做一个靠谱的男人

5 篇文章 0 订阅
4 篇文章 0 订阅

书接上回

我们在之前的一篇文章《ACK 与外星文明交流》中针对一个问题

两个节点之间的通信不可靠

提出了ack的解决方案

现在 我们为了消息能原子性和持久性的落盘 也面临一个问题

假如一条要写入磁盘的信息写到一半,机器崩溃了怎么办

那么,我们就可以用到下面我们要将的方案,预写日志

预写日志

在需要保证数据落盘一致性的场景中都会面临我们上面提到的问题,也就是崩溃一致性问题,例如 Mysql, kafka, RocketMQ,操作系统中的文件系统等,他们在解决这个问题时,普遍会考虑用预写日志的方案来处理。

所谓预写日志说起来也很简单,就是在真正的数据落盘动作发生前,先在一个众所周知的的地方把要干的事记下来。

那么当我们在落盘的过程中发生宕机,那么重新启动机器后,我们可以根据日志的情况进行回放或者回滚。

事务提交是怎么回事

对于事务 通常会有个事务提交的概念,那么这个事务提交的本质是什么?

我的理解是完整的写入一条日志

在操作系统的文件系统也是需要保证文件的写入的原子性和持久性,在文件系统Ext3中
一条日志通常有三部分组成

TxB + 日志 + TxE

当我们说日志还没有提交的本质 其实是 写入了前两部分

但我们说要提交的时候 再把TxE写入,自此一条完整的提交诞生了。事物的原子性和持久性得到了保证。

这里有一点小细节加入TxE要等待前面的两部分都写入才能写入,那么会影响效率,为了提高效率,能一次性发出所有的写请求,可以在TxE中写入对这些数据的校验和,当我们要真正根据日志进行落盘时,通过校验位来判断这条日志是不是正常的,要是不正常 抛弃即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值