01 前言

Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护。Zookeeper可以用于实现分布式系统中常见的发布/订阅、负载均衡、命令服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。它具有以下特性:

  • 顺序一致性 :从一个客户端发起的事务请求,最终都会严格按照其发起顺序被应用到Zookeeper中;
  • 原子性 :所有事务请求的处理结果在整个集群中所有机器上都是一致的;不存在部分机器应用了该事务,而另一部分没有应用的情况;
  • 单一视图 :所有客户端看到的服务端数据模型都是一致的;
  • 可靠性 :一旦服务端成功应用了一个事务,则其引起的改变会一直保留,直到被另外一个事务所更改;
  • 实时性 :一旦一个事务被成功应用后,Zookeeper可以保证客户端立即可以读取到这个事务变更后的最新状态的数据。

很多中间件,比如Kafka、Hadoop、HBase,都用到了 Zookeeper,因此它在分布式系统里有着无可替代的地位,而且Zookeeper有如下四大设计目标(简单的数据模型、构建集群、顺序访问、高性能高可用):

  • 目标一:简单的数据模型

Zookeeper通过树形结构来存储数据,它由一系列被称为ZNode的数据节点组成,类似于常见的文件系统。不过和常见的文件系统不同,Zookeeper将数据全量存储在内存中,以此来实现高吞吐,减少访问延迟。

image.png

  • 目标二:构建集群

可以由一组Zookeeper服务构成Zookeeper集群,集群中每台机器都会单独在内存中维护自身的状态,并且每台机器之间都保持着通讯,只要集群中有半数机器能够正常工作,那么整个集群就可以正常提供服务。

image.png

  • 顺序访问

对于来自客户端的每个更新请求,Zookeeper都会分配一个全局唯一的递增ID,这个ID反映了所有事务请求的先后顺序。

  • 目标四:高性能高可用

ZooKeeper将数据存全量储在内存中以保持高性能,并通过服务集群来实现高可用,由于Zookeeper的所有更新和删除都是基于事务的,所以其在读多写少的应用场景中有着很高的性能表现。

说了这么多,其实就是一句话:能不能整明白分布式系统,ZooKeeper真的是太太重要了!

这几天在学习的时候整理了一些ZooKeeper的学习资料和笔记,个人认为还是不错,想着资源共享学习,今天就拿出来看看,相信对你而言还是有些学习价值的。

  • 《ZK开发手册》
  • 《ZooKeeper-分布式过程协同技术详解》
  • 《ZK面试:27连问》

注意:以下介绍《ZooKeeper-分布式过程协同技术详解》《ZK开发手册》《ZK面试:27连问》因为篇幅的限制,基本上是指对内容做一个大概的介绍以及目录和一些内容的截图展示,不过都是有整理原文件的,感兴趣的朋友可直接点击“ZK” 获取免费下载的方式啦!

02 《ZooKeeper-分布式过程协同技术详解》

本书适用于分布式系统的开发人员,以及使用ZooKeeper进行生产经营的应用程序运维人员。我们假设读者具备Java语言的知识,并且本书为读者提供了关于分布式系统中概念的大量背景知识,以便你更好地使用ZooKeeper。

ZooKeeper-分布式过程协同技术详解目录.png

第一部分阐述了Apache ZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。

  • 第1章介绍了ZooKeeper可以做什么,以及其设计如何支撑这些任务。
  • 第2章介绍了基本概念和基本组成模块,并通过命令行工具的具体操作介绍ZooKeeper可以做什么。

第二部分阐述程序员所需要掌握的ZooKeeper库调用方法和编程技巧,虽然对系统运维人员来说也有一定价值,但也可以不选择阅读。这一部分主要以Java语言的API为主,因为Java是非常流行的开发语言,如果你之前使用其他开发语言,可以通过这一部分内容来学习基本的技术和方法调用,之后通过其他语言来实现。另外,我们也为C语言的应用开发人员提供了一章内容的开发方法

  • 第3章介绍Java语言的API。
  • 第4章解释如何跟踪和处理ZooKeeper中的状态变更情况。
  • 第5章介绍如何在系统或网络故障时恢复应用。
  • 第6章介绍为了避免故障要注意的一些繁杂却很重要的场景。
  • 第7章介绍C语言版的API,该章也可以作为非Java语言实现的ZooKeeper API的基础,对非Java语言的开发人员非常有帮助。
  • 第8章介绍一款更高层级的封装的ZooKeeper接口。

第三部分主要适用于ZooKeeper的系统运维人员,尤其在第9章章中即便对开发人员也很有价值。

  • 第9章介绍ZooKeeper的作者们在设计时所采用的方案,这些知识对运维管理非常有帮助。
  • 第10章介绍如何对ZooKeeper进行配置。

ZooKeeper-分布式过程协同技术详解.png

03 《ZK开发手册》

这本ZK开发手册总共有19章,前两章是一些简介介绍,这里就不做过多的解释的了,重点在于后面的17章,一起来看看吧。

ZK开发手册.png

第3,4,5,6,7章分别是:基础、组件活动周期、事件监听及处理、ZK用户界面标记语言

image.png

第8,9,10,11,12,13,14,15,16章分别是数据绑定、在ZUML中使用XHTML组件集、宏组件、高级特性、性能提示、其他设备和输出格式、国际化、数据库连接、整合Hibernate

image.png

最后三章:17,18,19章分别是整合Spring、Portal整合、ZK之外

image.png

image.png

04 《ZK面试:27连问》

  1. ZooKeeper 提供了什么?
  2. Zookeeper 文件系统?
  3. ZAB 协议?
  4. 四种类型的数据节点 Znode
  5. Zookeeper Watcher 机制 -- 数据变更通知
  6. 客户端注册 Watcher 实现
  7. 服务端处理 Watcher 实现
  8. 客户端回调 Watcher
  9. ACL 权限控制机制
  10. Chroot 特性
  11. 服务器角色
  12. 会话管理
  13. Zookeeper 下 Server 工作状态
  14. 数据同步
  15. zookeeper 是如何保证事务的顺序一致性的?
  16. 分布式集群中为什么会有 Master?
  17. zk 节点宕机如何处理?
  18. zookeeper 负载均衡和 nginx 负载均衡区别
  19. Zookeeper 有哪几种几种部署模式?
  20. 集群最少要几台机器,集群规则是怎样的?
  21. 集群支持动态添加机器吗?
  22. Zookeeper 对节点的 watch监听通知是永久的吗?为什么不是永久的?
  23. Zookeeper 的 java 客户端都有哪些?
  24. chubby 是什么,和 zookeeper 比你怎么看?
  25. 说几个 zookeeper 常用的命令。
  26. ZAB 和 Paxos 算法的联系与区别?
  27. Zookeeper 的典型应用场景?

ZK面试:27连问答案.png

能不能整明白分布式系统,关键在于你对Zookeeper理解有多深,咱们今天分享的ZK知识就这么多,如果你没有这些笔记与资料去学习,小编这里可以免费分享给你,直接 点击“ZK” 领取下载原文件《ZooKeeper-分布式过程协同技术详解》《ZK开发手册》《ZK面试:27连问》的方式!!