实际工程中NWR是宽松模式,中心节点(第三方zookeeper)读取R个副本,选择R个副本中 版本号最高 的为新的primary 。还可以利用paxos等协议选出新的primary,每个节点以自己的版本号 发起paxos提议,选出的新primary是某个超过半数副本中版本号最大的副本。
当机器宕机的时候,我们需要如何去恢复宕机之前那些数据? 日志技术 是宕机恢复的主要技术之一 。日志技术最初使用在数据库系统中 。严格来说日志技术不是一种分布式系统的技术,但在分布式系统的实践中,却广泛使用了日志技术做宕机恢复,甚至如BigTable等系统将日志保存到一个分布式系统中进一步增强了系统容错能力 。
先简单介绍数据库系统中的日志技术,抽象简化问题模式,在简化模型的基础上介绍两种实用的日志技术 Redo Log 与 No Redo/ No Undo Log。
数据库系统日志技术简述
【十年技术大牛总结:分布式架构之日志技术】在数据库系统中实现 宕机恢复,其难点在于数据库操作需要满足ACID,尤其在支持事务的数据库系统中宕机往往发生在某些事务只执行了部分操作的时候 。此时宕机恢复的主要目标就是数据库系统恢复到一个稳定可靠状态,消除未完成的事物对数据库状态的影响 。
文章插图
数据库日志主要分为Undo Log、Redo Log、Redo/Undo Log与No Redo/ No Undo Log 。这四类日志的区别在更新日志文件和数据文件的时间点要求不同,从而造成性能和效率也不相同 。可以参考有关数据库系统方面的资料去深入了解这四类日志技术。
Redo Log与Check point
问题模型 :首先简化原数据库系统中的问题模型为一个较为简单的模型:假设需要涉及一个高速的单机查询系统,将数据全部存放在内存中以实现高速的数据查询,每次更新操作更新一小部分数据(列如key-value中的某一个key) 。现在问题为利用日志技术实现该内存查询系统的宕机恢复 。与数据库的事务不同的是,这个问题模型中的每个成功的更新操作都会生效 。也等效为数据库的每个事务只有一个更新操作,且每次更新操作都可以也必须立即提交 。
Redo Log :Redo Log是一种非常简单实用的日志技术 。在上面的问题模型中,只需按照如下流程更新既可以使用 Redo Log。
Redo Log更新流程
- 将 更新操作的结果 (例如set k1=1,则记录k1=1)以追加(Append)的方式写入磁盘日志文件
- 按更新操作修改内存中的数据
- 返回更新成功
从Redo Log的流程可以看出,Redo写入日志的内容是更新操作完成后的结果(这点是与Undo Log的区别之一),由于是 顺序追加日志 文件,在磁盘等对 顺序写 有力的存储设备上效率较高 。
用Redo Log进行宕机恢复非常简单,只需要” 回放 ”日志即可 。
Redo Log的宕机恢复
- 从头读取日志文件中的每次更新操作的结果,用这些结果修改内存中的数据 。
Check point
宕机恢复流量的缺点是需要回放所有redo日志,效率较低,假如需要恢复的操作非常多,那么这个宕机恢复过程将非常漫长 。解决这一问题的方法引入了check point技术 。在简化的模型下,check point技术的过程即将内存中的数据以某种易于重新加载的数据组织方式完整的dump到磁盘,从而减少宕机恢复时需要回放的日志数据 。
check point流程
- 向日志文件中记录“begin check point”
- 将内存中的数据以某种易于重新加载的数据组织方式dump到磁盘上
- 像日志文件中记录“end check point”
check point的宕机恢复
推荐阅读
- 如果房价真的下跌一半,那么还三十年房贷的房奴怎么办?
- 抖音瞬爆连爆技术,3分钟爆300W播放量
- 华为发布OptiXstar千兆智能光猫 搭载10G PON、eAI、Wi-Fi 6技术
- 华为HCIE眼中的虚拟化技术,看各路大咖“华山论剑”
- 利用站群技术让网站排名短时间上首页?
- 阿里技术大牛:一份架构师成神路线图
- Web 存储技术
- 自动驾驶知识科普 自动驾驶汽车的七大核心技术
- 多肉养殖基地 佛珠锦多肉怎么养殖技术
- 基于隐私保护技术的DNS通信协议