1. 程式人生 > >《從PAXOS到ZOOKEEPER分散式一致性原理與實踐》pdf

《從PAXOS到ZOOKEEPER分散式一致性原理與實踐》pdf

第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
附錄AWindows平臺上部署ZooKeeper 406
附錄B從原始碼開始構建 409
附錄C各發行版本重大更新記錄 414
附錄DZooKeeper原始碼閱讀指引 418