【分布式】日志技术

日志技术是宕机恢复的主要技术之一。
日志技术最初使用在数据库系统中。
严格来说日志技术不是一种分布式系统的技术,但在分布式系统的实践中,却广泛使用了日志技术做宕机恢复,甚 至如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 进行宕机恢复非常简单,只需要“回放”日志即可。

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

假如先更新内存中的数据,那么用户立刻就能读到更新后的数据,一旦在完成内存修改与写入日志之间发生宕机,那么最后一次更新操作无法恢复,但之前用户可能已经读取到了更新后的数据,从而引起不一致的问题。

image.png

image.png

  • 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=v1,check 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

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

image.png

0/1 目录技术中有两个目录结构,称为目录0(Directory 0)和目录1(Directory 1)。
另有一个结构称为主记录(Master record)记录当前正在使用的目录称为活动目录。
主记录中要么记录使用目录0,要么记录使用目录1。目录0 或目录1 中记录了各个数据的在日志文件中的位置。
0/1 目录的数据更新过程始终在非活动目录上进行,只是在数据生效前,将主记录中的0、1 值反转,从而切换主记录。

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

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

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

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

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

由于多条记录的原子修改一般较难实现而单条记录的原子修改往往可以实现,从而降低了问题实现的难度。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值