集群与负载均衡技术学习笔记二 分布式应用程序协调服务zookeeper

来源:互联网 发布:宝宝早教软件 编辑:程序博客网 时间:2024/05/17 06:19

zookeeper 的使用


简介

Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务。 它是Hadoop生态系统的重要组件。与之对应的Google类似的服务叫:Chubby

数据模型

这里写图片描述

基本概念

角色

  • 领导者
  • 学习者
  • 客户端
    这里写图片描述

设计目的

  • 最终一致性
  • 可靠性
  • 实时性
  • 等待无关
  • 原子性:更新只能成功或失败,没有中间状态。
  • 顺序性

原理

Zookeeper的核心是原子广播,保证各个Server之间的同步。实现这个机制的协议叫作Zab协议。Zab协议有两种模式:恢复模式(选主)和广播模式(同步)。
每个Server在工作过程中有三种状态:
- LOOKING
- LEADING
- FOLLOWING

重要概念

Znode,分为:
  • Regular ZNode常规型Znode,用户需要显式的创建、删除
  • Ephemeral ZNode:临时型Znode,用户创建它之后,可以显式的删除,也可以在创建它的Session结束后,由ZooKeeper Server自动删除。
    ZNode还有一个Sequential特性,如果创建的时候指定的话,该ZNode的名字后面会自动Append一个不断增加的SequenceNo。
Session

Client与ZooKeeper之间的通讯,需要创建一个Session,这个Session会有一个超时时间。因为ZooKeeper集群会把Client的Session信息持久化,所以在Session没超时之前,Client与ZooKeeper Server的连接可以在各个ZooKeeper Server之间透明地移动。

Watcher

ZooKeeper支持一种Watch操作,Client可以在某个ZNode上设置一个Watcher,来Wathcer该Znode上的变化。如果该Xnode上有相应的变化,就会触发这个Watcher,把相应的事件通知给设置Watcher的Client。Watcher是一次性的,触发一次就会被取消。

ZooKeeper特性

读、写(更新)模式
WAL和Snapshot
FIFO
Linearizability

ZooKeeper ClientAPI

  • create(path,data,flags) 创建Znode
  • delete(path,version) 删除Znode
  • exists(path,watch) 判断指定的Znode是否存在
  • getData(path,watch) 读取指定Znode上的数据,并设置是否watch这个Znode
  • setData(path,watch) 更新
  • getChildren(path,watch) 获取子ZNode
  • sync(path) 把所有在Sync之前的更新操作都进行同步,达到每个请求都在半数以上的ZooKeeper Server上生效。
  • setAcl(path,acl) 设置Acl
  • getAcl(path) 获取Acl

主流应用场景

  • 名称服务
    分布式应用中,通常需要一套完备的命令机制,既能产生唯一的标识,又方便识别记忆。
  • 配置管理
  • 组员管理
  • 简单互斥锁
  • 互斥锁
  • 读写锁
  • 屏障
  • 双屏障

本文学习参考:
http://cailin.iteye.com/blog/2014486/
http://blog.csdn.net/xinguan1267/article/details/38422149

0 0