日志技术介绍

日志技术

日志技术是宕机恢复的主要技术之一。日志技术最初使用在数据库系统中。严格来说 日志技术不是一种分布式系统的技术,但在分布式系统 的实践中,却广泛使用了日志 技术做宕机恢复,甚 至如BigTable 等系统将日志保存到一个分布式系统中进一步增 强了系统容错能力。Redo Log Check point

设计一个高速的单机查询系统,将数据全部存放在内存中以实现高速的数据查询,每 次更新操作更新一小部分数据(例如 key-value 中的某

一个key)。现在问题为利用 日志技术实现该内存查询系统的宕机恢复。与数据库的事务不同的是,这个问题模型 中的每个成功的更新操作

都会生效。这也等效为数据库的每个事务只有一个更新操 作,且每次更新操作都可以也必须立即提交(Auto commit)。

Redo Log

1. 将更新操作的结果(例如Set K1=1,则记录K1=1)以追加写(append)的 方式写入磁盘的 日志文件

2. 按更新操作修改内存中的数据

3. 返回更新成功

Redo Log 的流程可以看出,Redo 写入日志的是更新操作完成后的结果(虽然本 文不讨论Undo Log,这点是与Undo Log 的区别之

一),且由于是顺序追加写日志 文件,在磁盘等对顺序写有力的 存储设备上效率较高。

Redo Log 进行宕机恢复非常简单,只需要回放日志即可。

流程2.5.2Redo Log 的宕机恢复

从头读取日志文件中的每次更新操作的结果,用这些结果修改内存中的数 据。

Redo Log 的宕机恢复流程也可以看出,只有写入日志文件的更新结果才能在宕机 后恢复。这也是为什么在Redo Log 流程中需要先更新日

志文件再更新内存中的数据 的原因。假如先更新内存中的数据,那么用户立刻就能读到更新后的数据,一旦在完 成内存修改与写入日志之间

发生宕机,那么最后一次更新操作无法恢复,但之前用户 可能已经读取到了更新后的数据,从而引起不一致的问题。

Check point

。在简化的模型下,check point 技术的过程即将内存中的数据以某种易于重新加载 的数据组织方式完整的dump 到磁盘,从而减少宕机恢

复时需要回放的日志数据。

流程:check point

1. 向日志文件中记录“Begin Check Point”

2. 将内存中的数据以某种易于重新加载的数据组织方式dump 到磁盘上

3. 向日志文件中记录“End Check Point” check point 流程中,数据可以 继续按照流程2.5.1 被更新,这段过程中新更新的数据可以

dump 到磁盘也可以 不dump 到磁盘,具体取决于实现。例如,check point 开始时k1=v1check point 过程 中某次更新为k1 = v2

那么dump 到磁盘上的k1 的值可以是v1 也 可以是v2

流程:基于check point 的宕机恢复流程

1. dump 到磁盘的数据加载到内存。

2. 从后向前扫描日志文件,寻找最后一个“End Check Point”日志。

3. 从最后一个“End Check Point”日志向前找到最近的一个“Begin Check Point”日志,并回 放该日志之后的所有更新操作日志。

No Undo/No Redo log

若数据维护在磁盘中,某批更新由若干个更新操作组成,这些更新操作需要原子生 效,即要么同时生效,要么都不生效。

0/1 目录技术中有两个目录结构,称为目录0(Directory 0)和目录1(Directory 1)。另 有一个结构称为主记录(Master record)记录当前正在

使用的目录称为活动目录。 主记录中要么记录使用目录0,要么记录使用目录1。目录0 或目录1 中记录了各个数 据的在日志文件中的位置。

0/1 目录的数据更新过程始终在非活动目录上进行,只是 在数据生效前,将主记录中的01 值反转,从而切换主记录。

流程:0/1 目录数据更新流程

1. 将活动目录完整拷贝到非活动目录。

2. 对于每个更新操作,新建一个日志项纪录操作后的值,并在非活动目录中将 相应数据的位置修改为新建的日志项的位置。

3. 原子性修改主记录:反转主记录中的值,使得非活动目录生效。

0/1 目录的更新流程非常简单,通过01 目录的主记录切换使得一批修改的生效是原 子的。0/1 目录将批量事务操作的原子性通过目录手段

归结到主记录的原子切换。由 于多条记录的原子修改一般较难实现而单条记录的原子修改往往可以实现,从而降低 了问题实现的难度。在工

程中0/1 目录的思想运用非常广泛,其形式也不局限在上述 流程中,可以是内存中的两个数据结构来回切换,也可以是磁盘上的两个文件目录来 回生效切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心是凉的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值