概述
一、zookeeper概述
1、zookeeper:是一个开源的、分布式的,为分布式框架提供协调服务的Apache框架。
2、zookeeper工作机制:基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦数据状态发生变化,zookeeper将负责通知已经在zookeeper上注册的那些观察者做出相应的反应。
3、zookeeper特点:
- 一个领导者leader,多个跟随着follower组成的集群。
- 集群中只要有半数以上节点存活,zookeeper集群就能正常服务,所以zookeeper适合按照奇数台服务器。
- 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
- 更新请求顺序执行,来自同一个client的更新请求按其发送顺序依次执行。
- 数据更新原子性,一次数据更新要么成功,要么失败。
- 实时性:在一定时间范围内,client能读到最新的数据。
4、zookeeper数据结构:
zookeeper数据模型的结构与Linux文件系统很类似,整体上可以看作是一颗树,每个节点称作一个znode。每一个znode默认能够存储1MB的数据,每个znode都可以通过其路径唯一标识。
5、zookeeper应用场景:
(1)统一域名服务:在分布式环境下,经常需要对服务进行统一命名,便于识别。
(2)统一配置管理:在分布式环境下,配置文件同步。
(3)统一集群管理:在分布式环境下,实时掌握每个节点的状态。
(4)软负载均衡:zookeeper记录每台服务器的访问次数,让访问次数最少的服务器去处理最新的客户端请求。
6、zookeeper配置文件:zoo.cfg
(1)tickTime=2000:通信心跳时间,zookeeper服务器与客户端心跳时间,单位ms。
(2)initLimit=10:lf初始化通信时限。
(3)syncLimit=5:lf同步通信时限。
(4)dataDir:保存zookeeper中的数据。默认的tmp目录。
(5)clientPort=2181:客户端连接端口,通常不做修改。
二、zookeeper选举机制
三、zookeeper节点类型
1、持久:客户端与服务器断开后,创建的节点不删除
(1)持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在。
(2)持久化顺序编号目录节点
客户端与zookeeper断开后,该节点依旧存在,只是zookeeper给该节点名称进行顺序编号
(3)临时目录节点
客户端与zookeeper断开后,该节点被删除
(4)临时顺序编号目录节点
客户端与zookeeper断开后,该节点被删除,只是zookeeper给该节点名称进行顺序编号
2、短暂:客户端与服务器断开后,创建的节点自己删除
四、zookeeper监听器原理
- 首先要有一个main()线程;
- 在main线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener);
- 通过connect线程将注册的监听事件发送给zookeeper;
- 在zookeeper的注册监听器列表中将注册的监听事件添加到列表中;
- zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程;
- listener线程内部调用了process()方法。
五、服务器动态上下线
客户端能实时洞察到服务器上下线的变化
六、zookeeper分布式锁实现
分布式锁实现案例:
七、zookeeper相关
1、选举机制
半数机制,超过半数的投票通过,即通过。
(1)首次启动选举规则:投票过半数时,服务器id大的胜出。
(2)非首次启动选举规则:EPOCH大的直接胜出;EPOCH相同,事务id大的胜出;事务id相同,服务器id大的胜出。
2、生产环境下按照多少zookeeper合适
安装奇数台,服务器台数多可以提高可靠性,但是会使通信延迟增加。
常用台数:
10台服务器:3台zookeeper
20台服务器:5台zookeeper
100台服务器:11台zookeeper
200台服务器:11台zookeeper
3、常用命令
ls
create
get
delete
八、zookeeper底层算法分析
zookeeper如何保证数据一致性?
1、Paxos算法
-
Paxos算法:一种基于消息传递且具有高度容错性的一种一致性算法。
-
Paxos算法解决的问题:如何快速正确的在一个分布式系统中对某个数据值达成一致,并且保证不论发生任何异常,都不会破坏整个系统的一致性。
-
Paxos算法介绍:在一个Paxos系统中,首先将所有节点划分成提议者(proposer),接收者(acceptor),学习者(learner)。(每一个节点都可以身兼数职)。
完整的Paxos算法流程分为三个阶段:
Paxos算法流程:
2、ZAB协议
- ZAB算法:借鉴了paxos算法,是特别为zookeeper设计的支持崩溃恢复的原子广播协议。基于ZAB协议,zookeeper设计为只有一台客户端(leader)负责处理外部的写事务请求,然后leader客户端将数据同步到其他follower节点,即zookeeper只有一个leader可以发起提案。
- ZAB协议内容:包括两种基本的模式,即消息广播和崩溃恢复。
(1)消息广播:
(2)崩溃恢复
**崩溃恢复:**假设出现异常
崩溃恢复: leader选举
崩溃恢复: 数据恢复
3、CAP理论
-
一个分布式系统不可能同时满足以下三种条件:
一致性(C:consistency)
可用性(A:available)
分区容错性(P:partition tolerance) -
最多只能满足其中两个条件,因为P是必须的,因此可选条件只能包括CP或AP
(1)一致性
在分布式环境下,一致性是指数据在多个副本之间是否可以保持数据一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
(2)可用性
可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
(3)分区容错性
分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外满足一致性和可用性的服务,除非是整个网络环境都发生了故障。
zookeeper保证的是CP,一致性和分区容错性
(1)zookeeper不能保证每次服务请求的可用性,在极端情况下可能会丢弃一些请求,消费者程序需要重新请求才能获取结果。因此,zookeeper不能保证服务可用性。
(2)进行leader选举时集群都是不可用的。
最后
以上就是背后白猫为你收集整理的Zookeeper实现原理分析的全部内容,希望文章能够帮你解决Zookeeper实现原理分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复