《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读书笔记的更多相关文章

  1. 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6

    进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...

  2. 《Apache kafka实战》读书笔记-kafka集群监控工具

    <Apache kafka实战>读书笔记-kafka集群监控工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如官网所述,Kafka使用基于yammer metric ...

  3. 《Apache Kafka实战》读书笔记-调优Kafka集群

    <Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...

  4. 《Apache kafka实战》读书笔记-管理Kafka集群安全之ACL篇

    <Apache kafka实战>读书笔记-管理Kafka集群安全之ACL篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家能看到这篇博客的小伙伴,估计你对kaf ...

  5. 《Apache Kafka 实战》读书笔记-认识Apache Kafka

    <Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...

  6. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  7. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  8. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  9. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

随机推荐

  1. 无限轮播器的bug修复

    前言:上一回实现了轮播器的自动滚动,但是有两个需要处理的bug. 1.增加需求:当用手拖拽控制轮播器的时候,停止自动滚动. 2.当同一个页面中有tableView,textView或scrollvie ...

  2. Code:zabbix 目录

    ylbtech-Code:zabbix 目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://y ...

  3. Code:log4

    ylbtech-Code:log4 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 0. http://logging.apache.org/log4net/ 0 ...

  4. Python之路,Day13 - 堡垒机

    项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒 ...

  5. Eclipse中删除导入的jar包,总是报错?已解决!

    参考百度经验 http://jingyan.baidu.com/article/851fbc37c7512e3e1f15abec.html

  6. uploadify提示修改为中文

    使用uploadify时报错时是英文提示,并且上传文件进度条显示的是英文,如何修改为中文呢,直接打开jquery.uploadify.min.js(如果你使用的是jquery.uploadify.js ...

  7. C++中的new用法总结

    前段时间复习面试的时候,看到这个问题经常有问到,我这个小白就看了些博客和书,总结一下. new可以说是个一个关键字,也可以说是一个运算符,并且可以被重载. 1.new operator 这个就是平时最 ...

  8. 用Python在局域网根据IP地址查找计算机名

    1.要使用socket模块 代码如下: import sys, socket # hostname = socket.gethostname()# print("Host name:&quo ...

  9. Cocos2d-html5游戏开发,常用工具集合

    代码编辑器IDEWebStorm (Windows, Mac) Cocos2d-html5官方团队在用,非常优秀的工具,请大家支持正版动画编辑器 Animation EditorSpriteHelpe ...

  10. Folding UVA - 1630

    题目 ans[i][j]表示由原串第i个字符到第j个字符组成的子串的最短折叠长度如果从i到j本身可以折叠,长度就是本身长度或折叠后的长度的最小值***此处参考:http://blog.csdn.net ...