zoukankan      html  css  js  c++  java
  • Zookeeper的源码环境的搭建和源码解读

    一、环境搭建

    1、安装ant,并添加环境变量

    (1)下载地址:https://ant.apache.org/bindownload.cgi
    (2)下载版本:1.10.7,zip包;
    (3)解压,配置环境变量ANT_HOME=D:apache-ant-1.10.7-binapache-ant-1.10.7;
    (4)编辑Path,增加%ANT_HOME%in;
    (5)编辑classpath,增加%ANT_HOME%lib;

    2、替换build.xml文件内容


      http://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2
    替换为:
      http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2

    3、ivy.xml文件中加入如下配置

    <dependency org="commons-collections" name="commons-collections" rev="3.0"/>

    <dependency org="org.apache.zookeeper" name="zookeeper" rev="3.5.8"/>  

    4、编译为eclipse工程

    进入到zookeeper源码的根目录,执行命令: ant eclipse 

    二、源码的解读

     1、项目介绍

    • zookeeper-recipes: 示例源码;
    • zookeeper-client: C语言客户端;
    • zookeeper-server:主体源码;

    2、服务的启动

    Zookeeper的代码分为单机版启动和集群版启动;

    2.1 启动前的准备

    a. 在启动之前,先将项目的 pom.xml 文件的 scope 配置为 provided 注释了;

    b. 配置conf 下的配置文件,拷贝 zoo_sample.cfg 文件为 zoo.cfg,并修改 dataDir 的路径 修改为 windows 系统的路径;

    c. 将 conf 下的 log4j.properties 文件拷贝到 target 下的 class 目录下:

    2.2 单机版启动

     服务端:ZookeeperServerMain

     客户端:ZookeeperMain

    2.3 集群版启动

    服务端:QuorumPeerMain

    2.4 启动的基本流程

    • 加载配置文件去初始化(QuorumPeerMain 或 ZookeeperServerMain)
    • 初始化对外服务(ServerCnxnFactory):初始化网路编程相关的服务;默认使用java NIO,官网推荐使用 Netty;
    • 初始化内存数据库(ZkDatabase):Zookeeper的数据存放在内存中的,所以不能存储大规模的数据;内存的数据也要保存到硬盘的文件中的,服务启动的时候再见数据从硬盘中加载到内存中。文件有2种,快照文件和日志文件;快照文件是某一个快照文件保存的是某一段时间节点的所有的数据;内存文件并不是一修改就去保存到文件中,若将数据刚刚写入服务就挂掉了,还没有保存的快照文件中,可以从日志文件中恢复数据到内存中。
    • 初始化会话管理器(SessionTrackerImpl):客户端连接到服务端的时候有一个会话管理器;会话管理器会定时的去扫描会话,看有没有会话过期,过期了之后就会清除这个会话对应的临时节点数据也清除掉;zookeeper会将所有的会话按照过期时间去划分到一个个的桶中,桶中有一个过期的时间点,会话管理器会去扫描一个一个的桶,若桶过期,则说明该桶中的所有会话都过期了。
    • 初始选举(FastLeaderElection):集群启动有选举,单机启动没有选举;
  • 相关阅读:
    js初学
    普通的checkbox的回显功能
    Jquery的显示与隐藏
    jQuery 事件
    jquery选择器(1)
    页面截取字段和转码,页面截取字段时候需要进入JS
    页面中的多选框的非空判断
    jquery中清空
    java代码拼写sql
    iframe中用到的例子
  • 原文地址:https://www.cnblogs.com/yufeng218/p/13358485.html
Copyright © 2011-2022 走看看