从Paxos到Zookeeper
 /  438
  • 第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在大型分布式系统中...
  • 6.2.1 Hadoop 198
  • 6.2.2 HBase 203
  • 6.2.3 Kafka 207
  • 6.3 ZooKeeper在阿里巴巴的实践与...
  • 6.3.1 案例一消息中间件:Metamorp...
  • 6.3.2 案例二 RPC服务框架:Dubbo 217
  • 6.3.3 案例三基于MySQL Binlog的增...
  • 6.3.4 案例四分布式数据库同步系统...
  • 6.3.5 案例五轻量级分布式通用搜索...
  • 6.3.6 案例六实时计算引擎:JStorm...
  • 小结 242
  • 第7章ZooKeeper技术内幕 243
  • 7.1 系统模型 243
  • 7.1.1 数据模型 243
  • 7.1.2 节点特性 244
  • 7.1.3 版本——保证分布式数据原子...
  • 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
  • 附录AWindows平台上部署ZooKeeper 406
  • 附录B从源代码开始构建 409
  • 附录C各发行版本重大更新记录 414
  • 附录DZooKeeper源代码阅读指引 418