zoukankan      html  css  js  c++  java
  • Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结

    一、服务器角色

    1. Leader

    1)事务请求的唯一调度者和处理者。保证事务处理的顺序性

      事务请求:导致数据一致性的请求(数据发生改变)。如删除一个节点、创建一个节点、设置节点数据,设置节点权限就是一个事物请求,全局的事物id(zxid)只能由leader来分配

    2)集群内部个服务器之间的调度者

    2. Follower

    1)处理客户端的非事务请求。事务请求必须转发给Leader服务器。

      非事物请求:读取数据
    2)参与事务请求Proposal(议案)的投票
    3)参与Leader选举

    3. Observer

    在实际运行中,它只是负责读,Leader不会将事务的投票发送给Observer。
    在zk的配置server.1=master:2888:3888后面加:observer以后就是一个Observer
    server.1=master:2888:3888:observer

    二、序列化与通信协议

    1. zookeeper序列化

    常见序列化协议:

    ProtoBuf
    Thrift
    Hessian
    Kryo
    Avro
    JDK Serializable
    Jsoniter/Jackson

    Jute是zookeeper序列化、反序列化协议。

     2. zookeeper通信协议

    基于TCP/IP协议,所以是一个长连接。zookeeper在这个基础上完成客户端和服务器,服务器和服务器之间的通信。

    zookeeper请求包:请求头+请求体

    0-3

    4-11

    12-n

    len

    4-7

    8-11

    12-15

    16-(n-1)

    n

    xid

    type

    len

    path

    watch

     

    zookeeper响应包:响应头+响应体

    0-3

    4-19

    20 - n

    len

    4-7

    8-15

    16-19

    20-23

    len

    48

    8

    xid

    zxid

    err

    len

    data

    ......

    pzxid

     0-3位:version+dbid+magic(魔数)

    三、数据存储

    1. 内存数据

    Zk有个内存数据库:ZkDataBase、DataTree、DataNode

    2. 日志数据FileTxnLog

    运行时,不停地有数据写入。
    当日志的剩余空间不足4K(4096),日志就做扩充,扩充64M,后面以“0”填充。
    log都是使用zxid作为文件名的后缀。

    查看日志方式:

    cd /software/zookeeper-3.4.6
    java -cp ./zookeeper-3.4.6.jar::./lib/log4j-1.2.16.jar:./lib/slf4j-api-1.6.1.jar:./lib/slf4j-log4j12-1.6.1.jar org.apache.zookeeper.server.LogFormatter /zookeeper/zk1/version-2/log.100000001

    说明:

    1)必须在zookeeper的安装目录下执行

    2)/zookeeper/zk1/是zookeeper配置文件里面配置的数据目录(dataDir)

    3. 快照数据

    快照数据:在某一时刻内存所有全量数据的一个磁盘文件。举例:快照阈值100000,触发快照数据。
    快照数据都是使用Zxid作为文件名的后缀。这样的话,获取快照数据的时候就不用遍历了,直接根据Zxid去获取就行了

    查看快照命令:

    cd /software/zookeeper-3.4.6
    java -cp ./zookeeper-3.4.6.jar::./lib/log4j-1.2.16.jar:./lib/slf4j-api-1.6.1.jar:./lib/slf4j-log4j12-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter /zookeeper/zk1/version-2/snapshot.100000050

    说明:

    1)必须在zookeeper的安装目录下执行

    2)/zookeeper/zk1/是zookeeper配置文件里面配置的数据目录(dataDir)

    快照触发机制,非“半数机制”,过半随机策略。
    logcount > (snapcount/2 + randroll)
    logcount: 代表当前记录日志数量
    snapcount: 多少次事务日志记录后触发一次数据快照
    randroll: 1~snapcount/2 之间的一个随机数

    四、zookeeper总结

    ZK在分布式系统中的各种应用,本质其实就是对节点的创建,删除,数据更新等事件做监听,监听到以后做对应的操作
    ZK是观察者设计模式
    都是为了解决高可用,解决单点故障问题,数据可靠性

    zookeeper系列代码获取地址

  • 相关阅读:
    BAT系列(一)— CNN
    图像处理基本知识总结(一)
    机器学习(二十一)— 特征工程、特征选择、归一化方法
    C++(三)— 二维容器
    代码题(19)— 组合与排列
    代码题(18)— 子集
    机器学习(二十)— 常见统计学习方法总结(一)
    【angularjs】使用angular搭建项目,获取dom元素
    【css】常用css
    【angularjs】使用angular搭建项目,图片懒加载资料
  • 原文地址:https://www.cnblogs.com/leeSmall/p/9611041.html
Copyright © 2011-2022 走看看