zookeeper快速入门学习(二)

前言:

   这一章我们来阅读Zookeeper源码,对其执行原理进行大致的了解。

 

zookeeper源码解析

1)首先下载zookeeper源码,导入IDEA中
  下载地址:https://github.com/apache/zookeeper
 
2)启动
  根据bin目录下的启动脚本zkServer.sh中加载启动类QuorumPeerMain类
QuorumPeerMain中main方法执行initializeAndRun方法

 

 跟进到initializeAndRun()方法中,方法一共分为三模块

1)加载配置文件(zoo.cfg)

2)启动清除任务 (主要清除旧的快照和日志文件)(不是重点)
3)启动zk zookeeper(启动方式分为两种:单机启动集群启动)    
  单机启动:初始化日志、解析封装配置文件的内容、runFromConfig方法(启动服务)
  集群启动:初始化日志,装配quorumPeer对象(关键),调用quorumPeer对象的start方法进行启动线程(主要执行到了QuorumPeer的run()方法)
    run():该方法中的while(running){}模块是集群启动的核心代码。该方法对zookeeper服务的各种状态(LOOKINGOBSERVINGFOLLOWINGLEADING)进行了case然后做相对应的处理
       LOOKING:  
        zookeeper的选举也是在while里面LOOKING中进行的,该模块中有个重要的方法lookForLeader()方法。该方法的主要实现类是FastLeaderElection
        前面我们了解到了zookeeper使用的是ZAP协议,而ZAP协议又是基于Fast paxos实现所以这里我们进入到FastLeaderElection实现类
           

           FastLeaderElection.lookForLeader()方法:开始新一轮领导人选举。每当QuorumPeer将其状态更改为LOOKING时,就会调用该方法,并向所有其他对等体发送通知。

 
 
 
 
 
 

 Zookeeper应用场景

配置中心

在平常的业务开发过程中,我们通常需要将系统的一些通用的全局配置,例如机器列表配置,运行时开关配置,数据库配置信息等统一集中存储,

让集群所有机器共享配置信息,系统在启动会首先从配置中心读取配置信息,进行初始化。传统的实现方式将配置存储在本地文件和内存中,

一旦机器规模更大,配置变更频繁情况下,本地文件和内存方式的配置维护成本较高,使用zookeeper作为分布式的配置中心就可以解决这个问题。

 

我们将配置信息存在zk中的一个节点中,同时给该节点注册一个数据节点变更的watcher监听,一旦节点数据发生变更,所有的订阅该节点的客户端都可以获取数据变更通知。

 

负载均衡

建立server节点,并建立监听器监视servers子节点的状态(用于在服务器增添时及时同步当前集群中服务器列表)。在每个服务器启动时,

在servers节点下建立具体服务器地址的子节点,并在对应的字节点下存入服务器的相关信息。这样,我们在zookeeper服务器上可以获取

当前集群中的服务器列表及相关信息,可以自定义一个负载均衡算法,在每个请求过来时从zookeeper服务器中获取当前集群服务器列

表,根据算法选出其中一个服务器来处理请求。

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2021-04-07 11:02  _kerry  阅读(60)  评论(0编辑  收藏  举报