博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【分布式】ZooKeeper笔记
阅读量:2828 次
发布时间:2019-05-14

本文共 1354 字,大约阅读时间需要 4 分钟。

文章目录

参考链接:

1 What is ZooKeeper ?

ZooKeeper 是一个集中化服务,维护配置信息、命名,提供分布式同步和集群服务。这些服务都以分布式应用的某种形式使用。使用过程中必然会有大量的工作去修复问题或者竞争条件,因为这些服务使用的困难性,应用程序最初可能不会展现,在后期的变化中越来越脆弱难以管理,即使正确的使用,不同的服务在部署时导致管理的复杂性。

Zookeeper保证了如下分布式一致性特性
顺序一致性
原子性
单一视图
可靠性
实时性(最终一致性)

2 ZooKeeper提供了什么?

  • 文件系统
  • 通知机制

3 ZooKeeper 文件系统

ZooKeeper提供一个多层级的节点命名空间(节点成为znode),与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不可以。也就是znode的节点既是文件节点也是目录节点。

ZooKeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M

4 ZAB协议

ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议

两种基本的模式
崩溃恢复
消息广播

当整个zookeeper集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与Leader服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式,首先选举产生新的Leader服务器,然后集群中Follower服务器开始与新的Leader服务器进行数据同步,当集群中超过半数机器与该Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。

5 四种类型的数据节点 Znode

  • PERSISTENT(持久节点)
    除非手动删除,否则节点一直存在于Zookeeper上
  • EPHEMERAL(临时节点)
    临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。
  • PERSISTENT_SEQUENTIAL(持久顺序节点)
    基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
  • EPHEMERAL_SEQUENTIAL(临时顺序节点)
    基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

6 ZooKeeper Watches 机制:数据变更通知

Zookeeper允许客户端向服务端的某个Znode注册一个Watches监听,当服务端的一些指定事件触发了这个Watches,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据Watches通知状态和事件类型做出业务上的改变。

工作机制
客户端注册 Watch
服务端处理 Watch
客户端回调 Watch
Watches 通知类型
One-time trigger,一次性触发
Sent to the client,客户端回调

7 Leader选举

详细介绍:

转载地址:http://rnehd.baihongyu.com/

你可能感兴趣的文章
gitLab的安装
查看>>
Swift - final关键字的介绍,以及使用场景
查看>>
git总结修改提交的author和email
查看>>
swift中常用关键字
查看>>
Swift 中的关键字2
查看>>
Swift中strunt 和 public 的做用
查看>>
使用jmeter进行APP接口测试经验总结
查看>>
Git 代码管理常用命令
查看>>
Swift3.0 监控键盘的弹出与收回
查看>>
swift 影响Xcode编译速度的注意事项
查看>>
表的主键与外键
查看>>
win7系统重启后ip丢失问题问题的解决方法
查看>>
Win7系统用键盘替代鼠标的小技巧
查看>>
Myeclipse 10配置反编译器net.sf.jadclipse_3.3.0.jar+jad.exe
查看>>
【设计模式三之简单工厂模式】设计模式中简单工厂模式的应用----java
查看>>
关于Linux进程进程浅析(上)
查看>>
【设计模式四之工厂方法模式】java工厂方法模式
查看>>
Linux进程浅析(上)
查看>>
exec函数和system函数
查看>>
linux下进程的信号量
查看>>