目录
第1章 分布式架构 1 1.1 从集中式到分布式 1 1.1.1 集中式的特点 2 1.1.2 分布式的特点 2 1.1.3 分布式环境的各种问题 4 1.2 从ACID到CAP/BASE 5 1.2.1 ACID 5 1.2.2 分布式事务 8 1.2.3 CAP和BASE理论 9 小结 15
第2章 一致性协议 17 2.1 2PC与3PC 17 2.1.1 2PC 17 2.1.2 3PC 21 2.2 Paxos算法 24 2.2.1 追本溯源 25 2.2.2 Paxos理论的诞生 26 2.2.3 Paxos算法详解 27 小结 37
第3章 Paxos的工程实践 39 3.1 Chubby 39 3.1.1 概述 39 3.1.2 应用场景 40 3.1.3 设计目标 40 3.1.4 Chubby技术架构 43 3.1.5 Paxos协议实现 52 3.2 Hypertable 55 3.2.1 概述 55 3.2.2 算法实现 57 小结 58
第4章 ZooKeeper与Paxos 59 4.1 初识ZooKeeper 59 4.1.1 ZooKeeper介绍 59 4.1.2 ZooKeeper从何而来 62 4.1.3 ZooKeeper的基本概念 62 4.1.4 为什么选择ZooKeeper 64 4.2 ZooKeeper的ZAB协议 65 4.2.1 ZAB协议 65 4.2.2 协议介绍 66 4.2.3 深入ZAB协议 71 4.2.4 ZAB与Paxos算法的联系与区别 77 小结 78
第5章 使用ZooKeeper 79 5.1 部署与运行 79 5.1.1 系统环境 79 5.1.2 集群与单机 80 5.1.3 运行服务 84 5.2 客户端脚本 88 5.2.1 创建 88 5.2.2 读取 89 5.2.3 更新 90 5.2.4 删除 91 5.3 Java客户端API使用 91 5.3.1 创建会话 91 5.3.2 创建节点 95 5.3.3 删除节点 99 5.3.4 读取数据 100 5.3.5 更新数据 109 5.3.6 检测节点是否存在 113 5.3.7 权限控制 115 5.4 开源客户端 120 5.4.1 ZkClient 120 5.4.2 Curator 130 小结 162
第6章 ZooKeeper的典型应用场景 163 6.1 典型应用场景及实现注 163 6.1.1 数据发布/订阅 164 6.1.2 负载均衡 166 6.1.3 命名服务 170 6.1.4 分布式协调/通知 173 6.1.5 集群管理 179 6.1.6 Master选举 185 6.1.7 分布式锁 188 6.1.8 分布式队列 194 小结 197 6.2 ZooKeeper在大型分布式系统中的应用 197 6.2.1 Hadoop 198 6.2.2 HBase 203 6.2.3 Kafka 207 6.3 ZooKeeper在阿里巴巴的实践与应用 213 6.3.1 案例一 消息中间件:Metamorphosis 213 6.3.2 案例二 RPC服务框架:Dubbo 217 6.3.3 案例三 基于MySQL Binlog的增量订阅和消费组件:Canal 219 6.3.4 案例四 分布式数据库同步系统:Otter 223 6.3.5 案例五 轻量级分布式通用搜索平台:终搜 226 6.3.6 案例六 实时计算引擎:JStorm 238 小结 242
第7章 ZooKeeper技术内幕 243 7.1 系统模型 243 7.1.1 数据模型 243 7.1.2 节点特性 244 7.1.3 版本——保证分布式数据原子性操作 246 7.1.4 Watcher——数据变更的通知 249 7.1.5 ACL——保障数据的安全 265 7.2 序列化与协议 272 7.2.1 Jute介绍 272 7.2.2 使用Jute进行序列化 273 7.2.3 深入Jute 275 7.2.4 通信协议 277 7.3 客户端 284 7.3.1 一次会话的创建过程 286 7.3.2 服务器地址列表 289 7.3.3 ClientCnxn:网络I/O 295 7.4 会话 298 7.4.1 会话状态 298 7.4.2 会话创建 299 7.4.3 会话管理 304 7.4.4 会话清理 307 7.4.5 重连 309 7.5 服务器启动 311 7.5.1 单机版服务器启动 312 7.5.2 集群版服务器启动 315 7.6 Leader选举 321 7.6.1 Leader选举概述 321 7.6.2 Leader选举的算法分析 323 7.6.3 Leader选举的实现细节 328 7.7 各服务器角色介绍 335 7.7.1 Leader 335 7.7.2 Follower 338 7.7.3 Observer 339 7.7.4 集群间消息通信 339 7.8 请求处理 342 7.8.1 会话创建请求 343 7.8.2 SetData请求 351 7.8.3 事务请求转发 354 7.8.4 GetData请求 355 7.9 数据与存储 356 7.9.1 内存数据 356 7.9.2 事务日志 358 7.9.3 snapshot——数据快照 364 7.9.4 初始化 368 7.9.5 数据同步 372 小结 376 第8章 ZooKeeper运维 379 8.1 配置详解 379 8.1.1 基本配置 379 8.1.2 高级配置 380 8.2 四字命令 384 8.3 JMX 390 8.3.1 开启远程JMX 390 8.3.2 通过JConsole连接ZooKeeper 391 8.4 监控 397 8.4.1 实时监控 397 8.4.2 数据统计 398 8.5 构建一个高可用的集群 398 8.5.1 集群组成 398 8.5.2 容灾 399 8.5.3 扩容与缩容 402 8.6 日常运维 402 8.6.1 数据与日志管理 402 8.6.2 Too many connections 404 8.6.3 磁盘管理 405 小结 405 附录A Windows平台上部署ZooKeeper 406 附录B 从源代码开始构建 409 附录C 各发行版本重大更新记录 414 附录D ZooKeeper源代码阅读指引 418