ZooKeeper读书笔记
《ZooKeeper读书笔记》
1、Zookeeper是什么?
Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。Zookeeper可以保证如下分布式一致性特性。
顺序一致性:
原子性:
单一视图:集群中只有一个被称为Leader服务器的机器可以处理来自客户端的事务请求。
实时性:
2、会话Session:
Session是指客户端会话,在zookeeper中,一个客户端连接是指客户端和服务器之间的一个TCP长连接。zookeeper对外的服务端口是2181,客户端启动的时候,首先会与服务器建立一个TCP连接,从第一次建立连接开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向zookeeper服务器发送请求并接收响应,同时还能够通过该连接接收来自服务器的Watch事件通知。
3、ZAB协议(Zookeeper Atomic BroadCast):
ZAB Zookeeper原子消息广播协议,是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。在zookeeper中主要依赖ZAB协议来实现分布式数据一致性,基于该协议,zookeeper实现了一种主备模式的系统架构来保持集群中各个副本直接的数据的一致性。zookeeper使用一个单一的主进程来接收来自客户端的所有事务请求,并采用ZAB的原子广播协议,将服务器数据的状态变更以事务Proposal的形式广播到所有的副本进程上去。
4、ZAB协议的核心:是定义了对于那些会改变zookeeper服务器数据状态的事务请求的处理方式,即:所有事务请求都必须由一个全局唯一的服务器来协调处理,这样的服务器被称为Leader服务器,而余下的服务器被称为Follower服务器,Leader服务器负责将一个客户端事务请求转换成一个事务Proposal提议,并将该Proposal分发给集群中的所有Follower服务器。之后Leader服务器需要等待所有Follower服务器的反馈,只要有一半的Follower服务器反馈了该Proposal提议,那么Leader服务器就会再次向所有的Follower服务器发送Commit消息,要求其将前一个Proposal进行提交。
Zookeeper使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用ZAB协议将服务器数据的状态变更以事务Proposal的形式广播到所有的副本进程上去。
5、ZAB协议的两种模式:崩溃恢复和消息广播。
5.1 崩溃恢复:当整个服务框架在启动过程中,或是当Leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进入到崩溃恢复模式并选举出新的Leader服务器。
5.2 消息广播:当集群中已经有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进入到消息广播模式了。如果集群中的Follower服务器接收到客户端的事务请求,并不会自己去处理该事务请求,而是首先将这个请求转发给Leader服务器,由Leader服务器生成对应的事务提案并发起一轮广播协议。
在整个消息广播的过程中,Leader服务器会为每个事务请求生成对应的Proposal来进行广播,并且在广播事务Proposal之前,Leader服务器会首先为这个事务Proposal分配一个全局单调递增的唯一ID,我们称之为事务ID,即ZXID。由于ZAB协议首先需要保证每一个消息严格的因果关系,因此必须将每一个事务Proposal按照其ZXID的先后顺序进行排序和处理。
具体的,在消息广播过程中,Leader服务器会为每一个Follower服务器都各自分配一个单独的队列。然后将需要广播的事务Proposal一次放入到这些队列中去,并且根据FIFO策略进行消息分发。每一个Follower服务器在接收到这个事务Proposal后,都会首先将其以事务日志的形式写入到本地磁盘中去,并且在成功写入后反馈给Leader服务器一个Ack响应。当Leader服务器接收到过半的Follower服务器的Ack响应后,就会广播一个Commit消息给所有的Follower服务器以通知其对事务进行提交,同时Leader服务器自身也会完成对事务的提交,而每一个Follower服务器在接收到Commit之后,也会完成对事务的提交。
6、选举算法:
要求:能够确保提交已经被Leader服务器提交的事务Proposal,同时丢弃掉已经被跳过的事务Proposal。
针对这个要求,如果让Leader选举算法能够保证新选举出来的Leader服务器拥有集群中所有机器最高的编号(即ZXID最大)的事务Proposal,那么就可以保证这个新选举出来的Leader一定具有所有已经提交的提案。更为重要的是,如果让具有最高编号事务Proposal的机器称为Leader,就可以省去Leader服务器检查Proposal的提交和丢弃工作的这一步操作了。
ZooKeeper的选举过程,简单地讲,就是一个集群中所有的机器相互之间进行一系列的投票,选举产生最合适的机器称为Leader,同时其余机器称为Follower或者Observer的集群机器角色初始化过程。关于Leader选举算法,简单来说就是集群中哪个机器处理的数据越新(通常我们根据每个服务器处理过的最大ZXID来比较确定其数据是否更新),其越有可能称为Leader。当然,如果集群中的所有机器处理的ZXID一致的话,那么SID(服务器ID)最大的服务器成为Leader。
ZooKeeper读书笔记的更多相关文章
- 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...
- 《Apache kafka实战》读书笔记-kafka集群监控工具
<Apache kafka实战>读书笔记-kafka集群监控工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如官网所述,Kafka使用基于yammer metric ...
- 《Apache Kafka实战》读书笔记-调优Kafka集群
<Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...
- 《Apache kafka实战》读书笔记-管理Kafka集群安全之ACL篇
<Apache kafka实战>读书笔记-管理Kafka集群安全之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家能看到这篇博客的小伙伴,估计你对kaf ...
- 《Apache Kafka 实战》读书笔记-认识Apache Kafka
<Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
随机推荐
- 一题多解 —— linux 日志文件(log)reload 重新载入
1. tail -F 等同于–follow=name –retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪 也即可以间接实现从日志文件末尾,不断载 ...
- Opencv与dlib联合进行人脸关键点检测与识别
前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上.使用libfacedetection实现人脸区域检测,联合dlib标记 ...
- UIWindow学习
写在前面 本文内容绝大部分都参考唐巧大神的<iOS开发进阶>,只是结合不是特别长的开发经验加以补充:最后基于UIWindow自定义了一个类似于微信的ActionSheet. UIWindo ...
- bzoj2337 XOR和路径——高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337 异或就一位一位考虑: x为到n的概率,解方程组即可: 考虑了n就各种蜜汁错误,所以索性 ...
- 安装JDK+Eclipse+Maven+Git/Gitee(windows系统和linux系统)
1. 安装JDK 官网下载 下载java SE 下载 Java SE 7 1.1 windows配置jdk windows配置jdk 1.2 Ubuntu配置jdk Ubuntu 安装 JDK 7 / ...
- CodeForces 687C【DP】
题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...
- hdoj1116【欧拉回路】
题意: 应该是求一个路径让所有的单词能够首尾连起来,不需要头和尾的单词也连起来...应该很容易懂吧...我这里讲的好烂.. 思路: 从欧拉回路的定义引申过来. 1. 连通. 2. 入度和出度问题. 问 ...
- JQuery动态添加表格,然后动态删除不成功问题
背景: 自己做了一个测试网页,想动态添加表格,然后删除,按照网上的教程写完,发现点击"删除参数"按钮没用 源码: function addtr() { var trinfo = & ...
- Python基础知识(1)
Python 3 1:print:输出信息 例子: ( 所有的标点符号都要是英文状态下输入,要不然会报错) print(“hello world”) 2:注意 : python 和 pyth ...
- C/C++预处理
C/C++编译系统编译程序的过程为预处理.编译.链接.预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序.预处理器指令以#号开头标识,末尾不包含分号.预处理命令不是C/C++语言 ...