Zookeeper07——其他(日志,快照,监视点)

本文深入探讨Zookeeper如何通过事务日志和快照实现数据的持久化与一致性,同时解析监视点机制在数据更新通知中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.日志
  • 简介
    • Zookeeper服务器通过事务日志来持久化事务。在接受一个提议时,一个服务器(群首或追随者)会将提议的事务持久化到事务日志中,该事务日志保存在服务器的本地磁盘中, 事务按照顺序追加。
  • 事务的提交方式:
    • 组提交:指一次磁盘写入时追加多个事务,节约了持久化多个事务的磁道寻址的开销。
    • 补白:指在文件中预分配磁盘存储块
  • 注意点说明:
    • 现代操作系统通常会缓存脏页,并将他们异步写入磁盘介质。但是Zookeeper在提交事务之前,必须保证事务已经被持久化,所以需要冲刷(Flush)事务道磁盘,即告诉系统将脏页写入磁盘。
    • SyncRequestProcessor负责进行事务队列(组提交)的冲刷。
2.快照
  • 简介
    • 快照是Zookeeper数据树拷贝副本,每一个服务器通常会以序列化整个数据树的方式来提取快照,并将提取的快照保存到文件中。
  • 快照模糊问题
    • 问题:服务器进行快照操作的时候,可能会存在保存了中间态的数据道快照。这样通过快照恢复的数据,是一个中间态数据。
    • zk逻辑:Zk服务器会重播(replay)事务。每一个快照文件开始时最后一个被提交的事务被作为标记(tag),时间戳记为TS。服务器在加载完快照后,会重播TS之后的所有事务日志中的事务。
3.监视点
  • 监视点事由读取操作所设置的一次性触发器,每个监视点由一个特定的操作来触发。
  • Zookeeper的服务端通过监视点管理器(watch manager),来管理当前自己已经被注册的监视点列表,并负责触发他们。所有服务器都是用这种方式(独立服务器,群首服务器,追随者服务器和观察者服务器。)。
  • DataTree类中持有一个监视点管理器来负责子节点监控数据监控
    • 在处理一个设置监视点请求的时候,该类会把监视点添加到manager的监视点列表。
    • 处理一个事务时,该类也会查找是否需要触发响应的监视点,如果需要则调用manager的触发方法。
      在这里插入图片描述
  • 在服务器端触发了一个监视点,最终会传播到客户端。负责处理传播的为服务端的cnxn对象(ServerCnxn),此对象表示客户端和服务端的连接并实现了Watcher的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值