分布式系统原理
日志技术
日志技术是宕机恢复的主要技术之一[3]。日志技术最初使用在数据库系统中。严格来说日志技术不是一种分布式系统的技术,但在分布式系统的实践中,却广泛使用了日志技术做宕机恢复,甚至如 BigTable 等系统将日志保存到一个分布式系统中进一步增强了系统容错能力。
本章首先简单介绍数据库系统中的日志技术,进而抽象简化问题模型,在简化模型的基础上介绍两种实用的日志技术 Redo Log 与 No Redo/No undo Log。
1. 数据库系统日志技术简述
在数据库系统中实现宕机恢复,其难点在于数据库操作需要满足 ACID,尤其在支持事务(transaction)的数据库系统中宕机往往发生在某些事务只执行了部分操作的时候。此时宕机恢复的主要目标就是数据库系统恢复到一个稳定可靠状态,消除未完成的事务对数据库状态的影响。
数据库的日志主要分为 Undo Log、Redo Log、Redo/Undo Log 与 No Redo/No Undo Log。这四类日志的区别在更新日志文件和数据文件的时间点要求不同,从而造成性能和效率也不相同。本文不就数据库中的这四类日志技术做深入讨论,相关信息可以参考有关数据库系统方面的资料。
2. Redo Log 与 Check point
2.1 问题模型
首先简化原数据库系统中的问题模型为一个较为简单的模型:假设需要设计一个高速的单机查询系统,将数据全部存放在内存中以实现高速的数据查询,每次更新操作更新一小部分数据(例如key-value 中的某一个 key)。现在问题为利用日志技术实现该内存查询系统的宕机恢复。与数据库的事务不同的是,