内容简介

  《ZooKeeper:分布式过程协同技术详解》分三部分,共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进行配置。

作者简介

  FlavioJunqueira,是微软研究院在英国剑桥大学的研究人员之一。他拥有美国加州大学圣地亚哥分校计算机科学博士学位。他的研究范围涉及分布式系统的各个方面,包括分布式算法、并发性和可扩展性。他是Apache项目如ApacheZooKeeper(PMC主席和提交者)和ApacheBookKeeper(提交者)的积极贡献者。他一有空就喜欢睡觉。

  BenjaminReed,是一位负责Facebook中所有细节工作的软件工程师。他以前的职位包括雅虎研究院首席研究科学家(负责所有大的方向)和IBMAlmadenResearch的研究人员(负责所有事情,无论大小)。他拥有加州大学圣克鲁斯分校计算机科学博士学位。他从事的工作涉及分布式计算、大数据处理、分布式存储、系统管理和嵌入式框架等领域。他参加了各种开源项目,如Hadoop和Linux操作系统等。他帮助启动了由Apache软件基金会主办的项目如Pig、ZooKeeper和BookKeeper。

目录

前言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

前言/序言

  构建分布式系统并不容易。然而,人们日常所使用的应用大多基于分布式系统,在短时间内依赖于分布式系统的现状并不会改变。ApacheZooKeeper旨在减轻构建健壮的分布式系统的任务。ZooKeeper基于分布式计算的核心概念而设计,主要目的是给开发人员提供一套容易理解和开发的接口,从而简化分布式系统构建的任务。
  即使有了ZooKeeper,但开发中分布式处理的环节并不是微不足道的事情,因此我们编写了这《ZooKeeper:分布式过程协同技术详解》,通过这《ZooKeeper:分布式过程协同技术详解》可以让你快速熟悉如何通过ApacheZooKeeper构建分布式系统。我们从基本的概念入手,这样可以使你觉得自己就像是分布式系统的专家一样,在你看到一系列需要注意的警告时,你可能会有一些沮丧,不过不用担心,如果你能够很好地理解我们所阐述的关键点,你已经走在构建良好的分布式系统的正确道路上了。
  目标读者《ZooKeeper:分布式过程协同技术详解》适用于分布式系统的开发人员,以及使用ZooKeeper进行生产经营的应用程序运维人员。我们假设读者具备Java语言的知识,并且《ZooKeeper:分布式过程协同技术详解》为读者提供了关于分布式系统中概念的大量背景知识,以便你更好地使用ZooKeeper。
  《ZooKeeper:分布式过程协同技术详解》内容介绍第一部分阐述了ApacheZooKeeper这类系统的设计目的和动机,并介绍分布式系统的一些必要背景知识。
  第1章介绍了ZooKeeper可以做什么,以及其设计如何支撑这些任务。
  第2章介绍了基本概念和基本组成模块,并通过命令行工具的具体操作介绍ZooKeeper可以做什么。
  第二部分阐述程序员所需要掌握的ZooKeeper库调用方法和编程技巧,虽然对系统运维人员来说也有一定价值,但也可以不选择阅读。这一部分主要以Java语言的API为主,因为Java是非常流行的开发语言,如果你之前使用其他开发语言,可以通过这一部分内容来学习基本的技术和方法调用,之后通过其他语言来实现。另外,我们也为C语言的应用开发人员提供了一章内容的开发方法。
  第3章介绍Java语言的API。
  第4章解释如何跟踪和处理ZooKeeper中的状态变更情况。
  第5章介绍如何在系统或网络故障时恢复应用。
  第6章介绍为了避免故障要注意的一些繁杂却很重要的场景。
  第7章介绍C语言版的API,该章也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。
  第8章介绍一款更高层级的封装的ZooKeeper接口。
  第三部分主要适用于ZooKeeper的系统运维人员,尤其在第9章章中即便对开发人员也很有价值。
  第9章介绍ZooKeeper的作者们在设计时所采用的方案,这些知识对运维管理非常有帮助。
  第10章介绍如何对ZooKeeper进行配置。
  《ZooKeeper:分布式过程协同技术详解》约定《ZooKeeper:分布式过程协同技术详解》中采用了以下排版约定:
  斜体用于重点介绍新的术语、URL、命令、工具组件以及文件和目录名称。
  等宽字体(Constantwidth)指示变量、方法、类型、参数、对象以及其他代码结构。
  等宽加粗(Constantwidthbold)指示需要用户输入的命令或其他文本信息,同时也用于命令输出中的重要信息。
  等宽斜体(Constantwidthitalic)指示代码或命令中的占位符,这些占位符需要在实际中替换为合适的值。
  注意:表示一些小窍门、建议或普通注解。
  示例代码代码、练习等附加资料可以到O扲eilly官方网站《ZooKeeper:分布式过程协同技术详解》页面下载。
  《ZooKeeper:分布式过程协同技术详解》用于协助读者构建系统。一般而言,如果《ZooKeeper:分布式过程协同技术详解》提供了示例代码,你可以在自己的程序或文档中使用,并不需要联系我们获得授权,除非你复制了大量代码。例如,你在开发程序时使用了《ZooKeeper:分布式过程协同技术详解》中的好几处代码则不需要授权,若以CD-ROM方式出售并发布O扲eilly书籍中的示例则需要得到授权许可,引用《ZooKeeper:分布式过程协同技术详解》及其示例代码来解答问题并不需要授权许可,将《ZooKeeper:分布式过程协同技术详解》中大量示例代码引入你自己的著作中则需要授权许可。
  ……

其他推荐