分佈式高可用架構之道

黃文毅 趙定益

  • 分佈式高可用架構之道-preview-1
  • 分佈式高可用架構之道-preview-2
  • 分佈式高可用架構之道-preview-3
分佈式高可用架構之道-preview-1

買這商品的人也買了...

商品描述

本書從開發高可用系統需要具備的理論知識出發,逐步講解應用的高可用、數據庫高可用、緩存高可用、Nginx/LVS高可用、異地多活、全鏈路監控/告警、高可用與安全、高可用在秒殺系統中的應用等內容,書中同時提供了大量有價值的解決方案,可直接用於開發實踐。 本書理論與實踐並重,適合具有一定Java開發經驗的人員,或者想從程序員進階為架構師的開發人員閱讀。

目錄大綱

目    錄

第1章  理解高可用 1

1.1  什麽是可用性 1

1.1.1  SLA與可用性 1

1.1.2  影響高可用的因素 3

1.1.3  高可用策略 4

1.1.4  高可用和高可靠 7

1.2  FMEA理論 7

1.3  集群與分佈式 9

1.3.1  什麽是集群與分佈式 9

1.3.2  分佈式架構 11

1.4  高可用之CAP理論 13

1.4.1  CAP理論 13

1.4.2  ACID理論 15

1.4.3  兩階段提交 16

1.4.4  補償事務TCC 17

1.4.5  BASE理論 19

1.5  高可用之選舉算法 21

1.5.1  霸道選舉算法 21

1.5.2  Raft選舉算法 24

1.5.3  ZAB選舉算法 26

1.6  高可用之共識算法 29

1.6.1  Paxos算法 29

1.6.2  Multi-Paxos算法 32

1.6.3  Raft算法 33

1.7  高可用之一致性算法 34

1.7.1  一致性分類 34

1.7.2  Gossip協議(最終一致性) 34

1.7.3  Quorum NWR算法 37

1.7.4  Quorum NWR的應用 38

1.7.5  Raft日誌一致性 40

第2章  應用的高可用 43

2.1  軟件質量對高可用的影響 43

2.1.1  影響寫出高質量代碼的原因 43

2.1.2  代碼重構 46

2.1.3  代碼審查概述 47

2.1.4  人工代碼審查 48

2.1.5  代碼自動檢查 52

2.2  優雅關閉 53

2.2.1  Java優雅關閉 55

2.2.2  Spring Boot微服務優雅關閉 58

2.3  優雅啟動 60

2.3.1  預熱啟動 60

2.3.2  延時註冊 61

2.4  服務狀態 62

2.4.1  無狀態服務 62

2.4.2  有狀態服務 63

2.4.3  實現無狀態 63

2.5  重試 64

2.5.1  重試概述 64

2.5.2  重試風險 64

2.5.3  退避策略 65

2.5.4  重試熔斷策略 65

2.5.5  鏈路重試熔斷 66

2.5.6  重試超時 67

2.6  冪等 68

2.6.1  非冪等原因 68

2.6.2  冪等定義 68

2.6.3  冪等場景 69

2.6.4  冪等解決方案 70

2.7  健康檢查 74

2.7.1  Spring Boot Actuator健康檢查 75

2.7.2  Nacos健康檢查 84

2.8  流量削峰 96

2.8.1  為何要削峰 96

2.8.2  答題/驗證碼 97

2.8.3  分時分段 97

2.8.4  禁用“秒殺”按鈕 98

2.8.5  分層過濾 98

2.8.6  消息隊列 99

2.9  負載均衡 100

2.9.1  負載均衡算法 100

2.9.2  負載均衡的實現 105

2.10  限流 108

2.10.1  限流概述 108

2.10.2  限流算法 109

2.10.3  Sentinel中的勻速排隊限流策略 113

2.11  降級 121

2.11.1  服務降級概述 121

2.11.2  服務降級開關 121

2.11.3  自動降級 122

2.11.4  讀服務降級 123

2.11.5  寫服務降級 123

2.12  熔斷 124

2.12.1  熔斷概述 124

2.12.2  熔斷實現 125

2.12.3  案例:Hystrix的工作流程 126

2.13  故障檢測 130

2.13.1  固定心跳 130

2.13.2  心跳設計 131

2.13.3  TCP Keepalive 132

2.13.4  MQTT Keepalive 133

2.14  故障隔離 133

2.14.1  故障隔離概述 133

2.14.2  故障隔離策略 134

2.15  集群容錯 136

2.15.1  失敗轉移 136

2.15.2  失敗自動恢復 137

2.15.3  失敗安全策略 137

2.15.4  快速失敗 138

2.16  集群部署 139

2.16.1  停機部署 139

2.16.2  藍綠部署 139

2.16.3  滾動發布 141

2.16.4  灰度發布/金絲雀部署 143

2.16.5  無損發布 146

第3章  數據庫高可用 148

3.1  數據庫高可用概述 148

3.1.1  數據庫高可用的重要性 148

3.1.2  MySQL XA協議 149

3.2  雙節點 154

3.2.1  主從模式實現讀寫分離 154

3.2.2  讀寫分離實現方案 156

3.2.3  SQL語句執行過程 158

3.2.4  MySQL日誌模塊 160

3.2.5  主從數據同步 162

3.3  MySQL高可用架構 165

3.3.1  MySQL高可用架構MMM 165

3.3.2  基於MHA實現MySQL自動故障轉移 166

3.3.3  MySQL Cluster架構 167

3.3.4  MySQL+DRDB + Heartbeat架構 169

3.3.5  雲數據庫高可用架構 170

3.4  案例:MySQL一主多從數據同步 172

第4章  緩存高可用 177

4.1  緩存概述 177

4.2  緩存高可用概述 178

4.3  客戶端分區方案 178

4.4  中間代理層方案 179

4.4.1  中間代理層概述 179

4.4.2  Codis架構 179

4.5  服務端方案 181

4.5.1  主從模式 181

4.5.2  哨兵模式 183

4.5.3  Redis集群模式 188

4.5.4  Codis 和 Redis集群的區別 193

4.5.5  雲數據庫Redis 194

第5章  Nginx/LVS高可用 197

5.1  Nginx 197

5.1.1  Nginx概述 197

5.1.2  Nginx+Keepalived保障高可用 197

5.2  LVS 198

5.2.1  LVS概述 198

5.2.2  Nginx+Keepalived+LVS保障高可用、高性能 199

5.3  DNS 200

5.3.1  DNS概述 200

5.3.2  DNS解析過程 201

5.3.3  DNS負載均衡 202

5.3.4  DNS+LVS+Nginx+Keepalived 202

第6章  異地多活 204

6.1  異地多活概述 204

6.2  異地多活的類型 205

第7章  高可用之全鏈路監控、告警 208

7.1  監控/告警概述 208

7.1.1  監控/告警的意義 208

7.1.2  全鏈路監控 209

7.1.3  告警規則 210

7.1.4  發送告警 210

7.1.5  監控系統通用設計 210

7.1.6  監控體系案例 211

7.2  日誌監控/告警方案 212

7.2.1  ELK日誌系統 212

7.2.2  日誌告警 215

7.3  資源監控/告警方案 216

7.3.1  監控概述 216

7.3.2  Promethous+Grafana+InfluxDB 217

7.3.3  其他開源監控 221

7.3.4  AlertManager告警 223

7.4  鏈路追蹤監控 223

第8章  高可用與安全 226

8.1  高可用與安全概述 226

8.2  DoS/DDos攻擊 227

8.2.1  DoS攻擊概述 227

8.2.2  DDoS攻擊的類型 227

8.2.3  DoS/DDoS攻擊防護 229

8.3  安全產品/工具 230

8.3.1  WAF概述 230

8.3.2  WAF的工作模式 231

8.3.3  Nginx + ModSecurity 233

8.3.4  雲廠商安全產品 235

第9章  秒殺系統案例 236

9.1  什麽是秒殺 236

9.2  最簡單的秒殺系統 237

9.3  業務層面控制 238

9.4  CDN靜態資源緩存 239

9.5  LVS/Nginx高可用設計 240

9.6  服務拆分與隔離設計 241

9.7  流量削峰、限流和降級 243

9.8  熱點數據處理 246

9.9  核心的減庫存 248

9.10  容災 254

9.11  秒殺系統安全架構 255

參考文獻 258