文档章节

深入了解zookeeper中的角色,和角色之间的关系

writeademo
 writeademo
发布于 02/26 17:24
字数 951
阅读 80
收藏 2

zookeeper中的角色 :群主,群员,观察者

 

exists,getData getChildren 会直接处理,在以请求为主要负载时,性能很高

create ,delete setData 会转发给群主处理,并形成事务

 

如 设置某个节点的数据

1更新字段值和版本号,并不存在事务的回滚,但可以确保每一步操作互不干扰

2事务具有幂等性

3产生一个事务会分配一个标示符,zxid,并按照群主的命令在各个服务器上执行事务

4 zxid为long型64位整数,分为时间戳和计数器部分

 

群首选举

每个服务器启动时进入locking状态

1 存在群主,其他服务器会告知哪个是群主,并和群主建立连接,确保状态和群主一致

2 不存在群主,所有服务器都在locking状态,开始选举,胜出的成为leading状态,其他服务器进入

following状态

 

投票是如何进行选举的?

需要一个简单的描述过程

默认的群首选举算法位快速算法

如果想要实现一个新的群主选举算法,我们需要实现quorum包的Election接口

 

 

 

zab状态更新的广播协议

 

服务器如何确定一个事务是否已经提交,zab,zookeeper原子广播协议,通过协议提交一个事务非常简单,类似一个两阶段提交

1群首向所有追随者发送一个proposal消息p

2当一个追随者接收到消息p后,会响应群首一个ack消息,通知群主已接收该提案proposal

3当收到仲裁数量的服务器发送的确认消息后,群首就会发送消息通知追随者进行提交操作

 

一般的提议提交形式

 

 

zxid 事务消息id

时间戳转换,当服务器的时间戳发生变化时,有两种方式更新时间戳DIFF和SNAP(位于代码LearnerHandler.run),这两种事务点都保存在本地事务日志中

1追随者滞后于群首不多,群首只发diff,追随者将严格按照顺序执行事务

2.追随者滞后群首很久,这时群首会发送完整的快照snap,发送缺失的事务,追随者进行

补充,是不错的选择,发snap会增大系统的延迟

 

Zab位于代码Leader,LearnerHandlerQuorumPeer

 

观察者

 

目的:提高读性能的可扩展性,通过更多的加入观察者,可以在不牺牲集群的写的吞吐率的前提下

提供更高的读访问能力

1 如果我们加入更多参加投票的服务器,我们需要更大的集群数量

2 增加观察者也不是没有开销,每提交一个事务点会增加一条发送给观察者的消息

3观察者跨多个集群中心部署,分布于多个数据中心,网络延迟会增加,引入观察者之后,

多个集群会以高吞吐,低延迟的场景执行,观察者也会将消息同步给群首。

 

不参与选举过程,仅仅学习由INFORM消息提交的提议,INFORM消息本质上是包含了正在被提交的提议信息的提交信息

PARTICIPANT服务器可以是群首也可以是追随者

OBSERVER则就是追随者

 

© 著作权归作者所有

writeademo
粉丝 26
博文 679
码字总数 255284
作品 0
东城
私信 提问
ZooKeeper学习第八期——ZooKeeper伸缩性

一、ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower。Leader可以接受client 请求,也接收其他Server转发的写请...

卯金刀GG
2017/10/25
25
0
zookeeper的安装与部署-集群

环境:centos7 、JDK8 一、Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ...

binhu
2017/11/07
60
0
Apache ZooKeeper 初认识(附用户交流群)

4.1 初识 ZooKeeper 在本节中,我们会对 ZooKeeper 进行一个初步的介绍,从 ZooKeeper 是什么、ZooKeeper 的由来及其基本概念展开,同时会向读者介绍使用ZooKeeper 来解决分布式一致性问题的...

银时
05/21
0
0
Zookeeper完全分布式集群的搭建

Zookeeper完全分布式集群的搭建 一、集群模式 1、单机模式 在zoo.cfg中只配置一个server.id就是单机模式了。 这种模式下,如果当前主机宕机,那么所有依赖于当前zookeeper服务工作的其他服务...

星汉
2018/04/27
8.5K
0
ZooKeeper的伪分布式集群搭建以及真分布式集群搭建

zk集群的一些基本概念 zookeeper集群搭建: zk集群,主从节点,心跳机制(选举模式) 配置数据文件 myid 1/2/3 对应 server.1/2/3 通过 zkCli.sh -server [ip]:[port] 命令检测集群是否配置成...

ZeroOne01
2018/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部