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服务的各种状态(LOOKING,OBSERVING,FOLLOWING,LEADING)进行了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服务器中获取当前集群服务器列

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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kerry_x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值