文档章节

zk会话,快照,序列化,本地存储

writeademo
 writeademo
发布于 02/27 11:12
字数 1144
阅读 19
收藏 0

FolloewerRequestProcessor类

追随者

输入会有不同的形式,客户端请求,提议,提交事务

通过箭头来标示追随者处理的不同路径

 

本地存储

事务日志和快照

SyncRequestProcessor在处理提议写入这些日志和快照

 

将提议的事务日志保存在本地磁盘上,而之后事务会顺序追加,服务器会不断滚动日志,创建新文件

 

 

写事务日志,如何高效提交?

1 组提交 一次磁盘写入追加多个事务

2补白是指在文件中预分配磁盘存储块,至少减少两次磁盘操作

 

 

快照

 

快照是zookeepere数据树的拷贝副本,每一个服务器会经常以序列化整个数据树的方式

提取快照,这个提取的快照保存在文件中

服务器在进行快照时不需要进行协作,也不需要暂停处理请求。

在快照的过程中还会继续继续处理请求,所以快照完成时,数据树有发生了变化,

我们称这样的快照是模糊的,不能反映准确状态

 

 

 

 

服务器与会话

 

会话是zookeeper的一个重要的抽象,保证节点有序,临时node节点,监视点都

与会话密切相关,会话的跟踪对zookeeper来说也很重要

 

 

 

zookeeper服务器的重要任务就是跟踪并维护这些会话,单会话下单个服务器跟踪所有会话

集群形式下,群首跟踪会话和维护,会话跟踪器SessionTracker类 SessionTrackerImpl.追随者

服务器仅仅是简单地把客户端连接的会话信息转发给群首服务器LearnerSessionTracker类

 

如何保证会话信息的存活?

为了保证会话的存活,服务器需要接收会话的心跳信息,可以是一个新的请求

或者是一个显示的ping消息LearnerHandler.run(),服务器通过更新会话的过期时间

来触发touch会话活跃SessionTrackerImpl.touchSession()

在集群模式下,群首会发送一个ping消息给它的追随者,追随者们返回从罪行一次ping消息

之后的一个session列表。群首服务器每半个tick就会发送一个ping消息给追随者们,如果

一个tick被设置成2秒,那么群首服务器就会每一秒发送一个ping消息

管理会话的过期有两个重要点?

 

 

 

一个为过期队列的数据结构ExpiryQueue类

使用bucket维护会话过期,每一个bucket对应一个某时间范围内过期的会话

群首服务器每次会让一个bucket的会话过期,为了确定哪个bucket的会话过期,有一个线程会检查

expiry queue来找出要过期的bucket,它会取出过期队列中的一批session,让他们过期

 

 

如果维护这些bucket

群首服务器把时间分成一些片段,以expirationInterval为单位进行分割,把每个会话分割到

它的过期时间对应的bucket里,通过过期时间确定是属于哪个bucket

 

如下公式

(expirationTime/expirationInterval+1)*expirationInterval

会话超时时间为10,expirationInterval为2,那么会话分配到bucket为12

(10/2+1)*2的结果

 

 

当我们使用touch这个会话时expirationTime会增加,之后我们需要重新计算会话移动到

其他的bucket中

 

bucket模式管理会话过期的系统开销,有数千个个会话,细粒度检查过期是不合适的,

 

 

服务器与监视点

 

监视点是由读取操作设置的一次性触发器,

zk中存在监视点管理器(watch manager),负责管理当前已被注册的监视点列表,并

负责触发它们。 独立服务器,群首服务器,追随者服务器,观察者服务器都用同样的方法处理监视点

 

 

 

zk中的序列化?

网络传输和磁盘保存的序列化消息和事务,使用了hadoop中的jute

来做序列化org.apache.jute就是jute库

 

jute最主要的定义文件为zookeeper.jute,包含了所有消息的定义和文件记录

 

 

 

© 著作权归作者所有

writeademo
粉丝 26
博文 679
码字总数 255284
作品 0
东城
私信 提问
分析Zookeeper的一致性原理

zookeeper(简称zk),顾名思义,为动物园管理员的意思,动物对应服务节点,zk是这些节点的管理者。在分布式场景中,zk的应用非常广泛,如:数据发布/订阅、命名服务、配置中心、分布式锁、集...

憬薇
2018/04/13
0
0
Zookeeper 通知更新可靠吗? 解读源码找答案!

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由特鲁门发表于云+社区专栏 导读: 遇到Keepper通知更新无法收到的问题,思考节点变更通知的可靠性,通过阅读源码解析了解到...

腾讯云加社区
2018/10/09
0
0
Zookeeper集群部署和使用

Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,Google Chubby的一个开源实现。它是一个分布式应用程序协调服务,提供的功能包括:配置管理,名字服务,提供分布式同步、队列管理...

justin_peng
2018/06/21
0
0
Zookeeper详解(二):Zookeeper安装和运行

安装环境: CentOS 7 内存1GB JDK版本:1.8.0_112 为JDK配置如下环境变量: 编辑/etc/profile.d/jdk.sh #!/bin/bash JAVAHOME=/usr/local/jdk1.8.0112export PATH=$JAVAHOME/bin:$JAVAHOME/......

linuxjavachen
2017/11/19
0
0
zookeepr--概览

zk 一个分布式应用协调服务 zk是一个分布式,开源的,分布式协调服务,他提供了一组简单的原生接口,分布式应用可以基于它实现,高水准的同步,集群,配置管理和命名服务。它基于开发,使用简...

wannshan
2016/01/22
40
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
8
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部