本书分三部分,共10章。第一部分(第1~2章)阐述ApacheZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。第1章介绍ZooKeeper可以做什么,以及其设计如何支撑这些任务。第2章介绍基本概念和基本组成模块,并通过命令行工具的具体操作介绍了ZooKeeper可以做什么。第二部分(第3~8章)阐述开发人员所需要掌握的ZooKeeper库调用方法和编程技巧。第3章介绍Java语言的API.第4章解释如何跟踪和处理ZooKeeper中的状态变更情况。第5章介绍如何在系统或网络故障时恢复应用。第6章介绍需要注意来避免故障的一些繁杂却很重要的场景。第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及如何运行ZooKeeper.第9章介绍ZooKeeper的作者们在设计时所采用的方案。第10章介绍如何对ZooKeeper进行配置。
目录
- 前言1
- 第一部分ZooKeeper的概念和基础
- 第1章简介7
- 1.1ZooKeeper的使命8
- 1.1.1ZooKeeper改变了什么10
- 1.1.2ZooKeeper不适用的场景10
- 1.1.3关于Apache项目11
- 1.1.4通过ZooKeeper构建分布式系统11
- 1.2示例:主—从应用12
- 1.2.1主节点失效13
- 1.2.2从节点失效14
- 1.2.3通信故障14
- 1.2.4任务总结15
- 1.3分布式协作的难点16
- 1.4ZooKeeper的成功和注意事项18
- 第2章了解ZooKeeper19
- 2.1ZooKeeper基础19
- 2.1.1API概述20
- 2.1.2znode的不同类型21
- 2.1.3监视与通知22
- 2.1.4版本24
- 2.2ZooKeeper架构25
- 2.2.1ZooKeeper仲裁26
- 2.2.2会话27
- 2.3开始使用ZooKeeper28
- 2.3.1第一个ZooKeeper会话28
- 2.3.2会话的状态和声明周期31
- 2.3.3ZooKeeper与仲裁模式33
- 2.3.4实现一个原语:通过ZooKeeper实现锁36
- 2.4一个主—从模式例子的实现37
- 2.4.1主节点角色37
- 2.4.2从节点、任务和分配40
- 2.4.3从节点角色40
- 2.4.4客户端角色41
- 2.5小结43
- 第二部分使用ZooKeeper进行开发
- 第3章开始使用ZooKeeper的API47
- 3.1设置ZooKeeper的CLASSPATH47
- 3.2建立ZooKeeper会话47
- 3.2.1实现一个Watcher49
- 3.2.2运行Watcher的示例51
- 3.3获取管理权53
- 3.3.1异步获取管理权57
- 3.3.2设置元数据60
- 3.4注册从节点62
- 3.5任务队列化65
- 3.6管理客户端66
- 3.7小结68
- 第4章处理状态变化70
- 4.1单次触发器71
- 4.2如何设置监视点72
- 4.3普遍模型73
- 4.4主—从模式的例子74
- 4.4.1管理权变化74
- 4.4.2主节点等待从节点列表的变化77
- 4.4.3主节点等待新任务进行分配80
- 4.4.4从节点等待分配新任务83
- 4.4.5客户端等待任务的执行结果86
- 4.5另一种调用方式:Multiop88
- 4.6通过监视点代替显式缓存管理90
- 4.7顺序的保障91
- 4.7.1写操作的顺序91
- 4.7.2读操作的顺序91
- 4.7.3通知的顺序92
- 4.8监视点的羊群效应和可扩展性93
- 4.9小结94
- 第5章故障处理96
- 5.1可恢复的故障98
- 5.2不可恢复的故障102
- 5.3群首选举和外部资源103
- 5.4小结106
- 第6章ZooKeeper注意事项107
- 6.1使用ACL107
- 6.1.1内置的鉴权模式108
- 6.1.2SASL和Kerberos111
- 6.1.3增加新鉴权模式111
- 6.2恢复会话111
- 6.3当znode节点重新创建时,重置版本号112
- 6.4sync方法112
- 6.5顺序性保障114
- 6.5.1连接丢失时的顺序性114
- 6.5.2同步API和多线程的顺序性115
- 6.5.3同步和异步混合调用的顺序性115
- 6.6数据字段和子节点的限制116
- 6.7嵌入式ZooKeeper服务器116
- 6.8小结117
- 第7章C语言客户端118
- 7.1配置开发环境118
- 7.2开始会话119
- 7.3引导主节点121
- 7.4行使管理权126
- 7.5任务分配129
- 7.6单线程与多线程客户端132
- 7.7小结135
- 第8章Curator:ZooKeeperAPI的高级封装库136
- 8.1Curator客户端程序136
- 8.2流畅式API137
- 8.3监听器138
- 8.4Curator中状态的转换140
- 8.5两种边界情况141
- 8.6菜谱141
- 8.6.1群首闩142
- 8.6.2群首选举器143
- 8.6.3子节点缓存器146
- 8.7小结148
- 第三部分ZooKeeper的管理
- 第9章ZooKeeper内部原理151
- 9.1请求、事务和标识符152
- 9.2群首选举153
- 9.3Zab:状态更新的广播协议157
- 9.4观察者161
- 9.5服务器的构成162
- 9.5.1独立服务器163
- 9.5.2群首服务器164
- 9.5.3追随者和观察者服务器165
- 9.6本地存储166
- 9.6.1日志和磁盘的使用166
- 9.6.2快照167
- 9.7服务器与会话169
- 9.8服务器与监视点170
- 9.9客户端170
- 9.10序列化171
- 9.11小结171
- 第10章运行ZooKeeper173
- 10.1配置ZooKeeper服务器174
- 10.1.1基本配置175
- 10.1.2存储配置175
- 10.1.3网络配置177
- 10.1.4集群配置179
- 10.1.5认证和授权选项181
- 10.1.6非安全配置182
- 10.1.7日志183
- 10.1.8专用资源185
- 10.2配置ZooKeeper集群185
- 10.2.1多数原则186
- 10.2.2法定人数的可配置性186
- 10.2.3观察者188
- 10.3重配置188
- 10.4配额管理194
- 10.5多租赁配置196
- 10.6文件系统布局和格式197
- 10.6.1事务日志198
- 10.6.2快照199
- 10.6.3时间戳文件200
- 10.6.4已保存的ZooKeeper数据的应用200
- 10.7四字母命令201
- 10.8通过JMX进行监控202
- 10.9工具209
- 10.10小结209