億級流量網站架構核心技術 跟開濤學搭建高可用高並發係統+
分布式服務框架原理與實踐
9787121309540 9787121279195
億級流量網站架構核心技術 跟開濤學搭建高可用高並發係統
億級流量網站架構核心技術》一書總結並梳理瞭億級流量網站高可用和高並發原則,通過實例詳細介紹瞭如何落地這些原則。本書分為四部分:概述、高可用原則、高並發原則、案例實戰。從負載均衡、限流、降級、隔離、超時與重試、迴滾機製、壓測與預案、緩存、池化、異步化、擴容、隊列等多方麵詳細介紹瞭億級流量網站的架構核心技術,讓讀者看後能快速運用到實踐項目中。
不管是軟件開發人員,還是運維人員,通過閱讀《億級流量網站架構核心技術》都能係統地學習實現億級流量網站的架構核心技術,並收獲解決係統問題的思路和方法。
作者簡介
張開濤,現就職於京東,“開濤的博客”公眾號作者。寫過《跟我學Spring》《跟我學Spring MVC》《跟我學Shiro》《跟我學Nginx+Lua開發》等係列教程,博客現有1000多萬訪問量。
目錄
第1部分 概述 / 1
1 交易型係統設計的一些原則 / 2
1.1 高並發原則 / 3
1.1.1 無狀態 / 3
1.1.2 拆分 / 3
1.1.3 服務化 / 4
1.1.4 消息隊列 / 4
1.1.5 數據異構 / 6
1.1.6 緩存銀彈 / 7
1.1.7 並發化 / 9
1.2 高可用原則 / 10
1.2.1 降級 / 10
1.2.2 限流 / 11
1.2.3 切流量 / 12
1.2.4 可迴滾 / 12
1.3 業務設計原則 / 12
1.3.1 防重設計 / 13
1.3.2 冪等設計 / 13
1.3.3 流程可定義 / 13
1.3.4 狀態與狀態機 / 13
1.3.5 後颱係統操作可反饋 / 14
1.3.6 後颱係統審批化 / 14
1.3.7 文檔和注釋 / 14
1.3.8 備份 / 14
1.4 總結 / 14
第2部分 高可用 / 17
2 負載均衡與反嚮代理 / 18
2.1 upstream配置 / 20
2.2 負載均衡算法 / 21
2.3 失敗重試 / 23
2.4 健康檢查 / 24
2.4.1 TCP心跳檢查 / 24
2.4.2 HTTP心跳檢查 / 25
2.5 其他配置 / 25
2.5.1 域名上遊服務器 / 25
2.5.2 備份上遊服務器 / 26
2.5.3 不可用上遊服務器 / 26
2.6 長連接 / 26
2.7 HTTP反嚮代理示例 / 29
2.8 HTTP動態負載均衡 / 30
2.8.1 Consul+Consul-template / 31
2.8.2 Consul+OpenResty / 35
2.9 Nginx四層負載均衡 / 39
2.9.1 靜態負載均衡 / 39
2.9.2 動態負載均衡 / 41
參考資料 / 42
3 隔離術 / 43
3.1 綫程隔離 / 43
3.2 進程隔離 / 45
3.3 集群隔離 / 45
3.4 機房隔離 / 46
3.5 讀寫隔離 / 47
3.6 動靜隔離 / 48
3.7 爬蟲隔離 / 49
3.8 熱點隔離 / 50
3.9 資源隔離 / 50
3.10 使用Hystrix實現隔離 / 51
3.10.1 Hystrix簡介 / 51
3.10.2 隔離示例 / 52
3.11 基於Servlet 3實現請求隔離 / 56
3.11.1 請求解析和業務處理綫程池分離 / 57
3.11.2 業務綫程池隔離 / 58
3.11.3 業務綫程池監控/運維/降級 / 58
3.11.4 如何使用Servlet 3異步化 / 59
3.11.5 一些Servlet 3異步化壓測數據 / 64
4 限流詳解 / 66
4.1 限流算法 / 67
4.1.1 令牌桶算法 / 67
4.1.2 漏桶算法 / 68
4.2 應用級限流 / 69
4.2.1 限流總並發/連接/請求數 / 69
4.2.2 限流總資源數 / 70
4.2.3 限流某個接口的總並發/請求數 / 70
4.2.4 限流某個接口的時間窗請求數 / 70
4.2.5 平滑限流某個接口的請求數 / 71
4.3 分布式限流 / 75
4.3.1 Redis+Lua實現 / 76
4.3.2 Nginx+Lua實現 / 77
4.4 接入層限流 / 78
4.4.1 ngx_http_limit_conn_module / 78
4.4.2 ngx_http_limit_req_module / 80
4.4.3 lua-resty-limit-traffic / 88
4.5 節流 / 90
4.5.1 throttleFirst/throttleLast / 90
4.5.2 throttleWithTimeout / 91
參考資料 / 92
5 降級特技 / 93
5.1 降級預案 / 93
5.2 自動開關降級 / 95
5.2.1 超時降級 / 95
5.2.2 統計失敗次數降級 / 95
5.2.3 故障降級 / 95
5.2.4 限流降級 / 95
5.3 人工開關降級 / 96
5.4 讀服務降級 / 96
5.5 寫服務降級 / 97
5.6 多級降級 / 98
5.7 配置中心 / 100
5.7.1 應用層API封裝 / 100
5.7.2 配置文件實現開關配置 / 101
5.7.3 配置中心實現開關配置 / 102
5.8 使用Hystrix實現降級 / 106
5.9 使用Hystrix實現熔斷 / 108
5.9.1 熔斷機製實現 / 108
5.9.2 配置示例 / 112
5.9.3 采樣統計 / 113
6 超時與重試機製 / 117
6.1 簡介 / 117
6.2 代理層超時與重試 / 119
6.2.1 Nginx / 119
6.2.2 Twemproxy / 126
6.3 Web容器超時 / 127
6.4 中間件客戶端超時與重試 / 127
6.5 數據庫客戶端超時 / 131
6.6 NoSQL客戶端超時 / 134
6.7 業務超時 / 135
6.8 前端Ajax超時 / 135
6.9 總結 / 136
6.10 參考資料 / 137
7 迴滾機製 / 139
7.1 事務迴滾 / 139
7.2 代碼庫迴滾 / 140
7.3 部署版本迴滾 / 141
7.4 數據版本迴滾 / 142
7.5 靜態資源版本迴滾 / 143
8 壓測與預案 / 145
8.1 係統壓測 / 145
8.1.1 綫下壓測 / 146
8.1.2 綫上壓測 / 146
8.2 係統優化和容災 / 147
8.3 應急預案 / 148
第3部分 高並發 / 153
9 應用級緩存 / 154
9.1 緩存簡介 / 154
9.2 緩存命中率 / 155
9.3 緩存迴收策略 / 155
9.3.1 基於空間 / 155
9.3.2 基於容量 / 155
9.3.3 基於時間 / 155
9.3.4 基於Java對象引用 / 156
9.3.5 迴收算法 / 156
9.4 Java緩存類型 / 156
9.4.1 堆緩存 / 158
9.4.2 堆外緩存 / 162
9.4.3 磁盤緩存 / 162
9.4.4 分布式緩存 / 164
9.4.5 多級緩存 / 166
9.5 應用級緩存示例 / 167
9.5.1 多級緩存API封裝 / 167
9.5.2 NULL Cache / 170
9.5.3 強製獲取新數據 / 170
9.5.4 失敗統計 / 171
9.5.5 延遲報警 / 171
9.6 緩存使用模式實踐 / 172
9.6.1 Cache-Aside / 173
9.6.2 Cache-As-SoR / 174
9.6.3 Read-Through / 174
9.6.4 Write-Through / 176
9.6.5 Write-Behind / 177
9.6.6 Copy Pattern / 181
9.7 性能測試 / 181
9.8 參考資料 / 182
10 HTTP緩存 / 183
10.1 簡介 / 183
10.2 HTTP緩存 / 184
10.2.1 Last-Modified / 184
10.2.2 ETag / 190
10.2.3 總結 / 192
10.3 HttpClient客戶端緩存 / 192
10.3.1 主流程 / 195
10.3.2 清除無效緩存 / 195
10.3.3 查找緩存 / 196
10.3.4 緩存未命中 / 198
10.3.5 緩存命中 / 198
10.3.6 緩存內容陳舊需重新驗證 / 202
10.3.7 緩存內容無效需重新執行請求 / 205
10.3.8 緩存響應 / 206
10.3.9 緩存頭總結 / 207
10.4 Nginx HTTP緩存設置 / 208
10.4.1 expires / 208
10.4.2 if-modified-since / 209
10.4.3 nginx proxy_pass / 209
10.5 Nginx代理層緩存 / 212
10.5.1 Nginx代理層緩存配置 / 212
10.5.2 清理緩存 / 215
10.6 一些經驗 / 216
參考資料 / 217
11 多級緩存 / 218
11.1 多級緩存介紹 / 218
11.2 如何緩存數據 / 220
11.2.1 過期與不過期 / 220
11.2.2 維度化緩存與增量緩存 / 221
11.2.3 大Value緩存 / 221
11.2.4 熱點緩存 / 221
11.3 分布式緩存與應用負載均衡 / 222
11.3.1 緩存分布式 / 222
11.3.2 應用負載均衡 / 222
11.4 熱點數據與更新緩存 / 223
11.4.1 單機全量緩存+主從 / 223
11.4.2 分布式緩存+應用本地熱點 / 224
11.5 更新緩存與原子性 / 225
11.6 緩存崩潰與快速修復 / 226
11.6.1 取模 / 226
11.6.2 一緻性哈希 / 226
11.6.3 快速恢復 / 226
12 連接池綫程池詳解 / 227
12.1 數據庫連接池 / 227
12.1.1 DBCP連接池配置 / 228
12.1.2 DBCP配置建議 / 233
12.1.3 數據庫驅動超時實現 / 234
12.1.4 連接池使用的一些建議 / 235
12.2 HttpClient連接池 / 236
12.2.1 HttpClient 4.5.2配置 / 236
12.2.2 HttpClient連接池源碼分析 / 240
12.2.3 HttpClient 4.2.3配置 / 241
12.2.4 問題示例 / 243
12.3 綫程池 / 244
12.3.1 Java綫程池 / 245
12.3.2 Tomcat綫程池配置 / 248
13 異步並發實戰 / 250
13.1 同步阻塞調用 / 251
13.2 異步Future / 252
13.3 異步Callback / 253
13.4 異步編排CompletableFuture / 254
13.5 異步Web服務實現 / 257
13.6 請求緩存 / 259
13.7 請求閤並 / 261
14 如何擴容 / 266
分布式服務框架原理與實踐
本書作者具有豐富的分布式服務框架、平颱中間件的架構設計和實踐經驗,主導設計的華為分布式服務框架已經在全球數十個國傢成功商用。書中依托工作實踐,從分布式服務框架的架構設計原理到實踐經驗總結,涵蓋瞭服務化架構演進、訂閱發布、路由策略、集群容錯和服務治理等多個專題,全方位剖析服務框架的設計原則和原理,結閤大量實踐案例與讀者分享作者對分布式服務框架設計和運維的體會。同時,對基於Docker部署微服務以及基於微服務架構開發、部署和運維業務係統進行瞭詳細介紹。第1章應用架構演進1
1.1傳統垂直應用架構2
1.1.1垂直應用架構介紹2
1.1.2垂直應用架構麵臨的挑戰4
1.2RPC架構6
1.2.1RPC框架原理6
1.2.2簡單的RPC框架實現8
1.2.3業界主流RPC框架14
1.2.4RPC框架麵臨的挑戰17
1.3SOA服務化架構18
1.3.1麵嚮服務設計的原則18
1.3.2服務治理19
1.4微服務架構21
1.4.1什麼是微服務21
1.4.2微服務架構對比SOA22
1.5總結23
第2章分布式服務框架入門25
2.1分布式服務框架誕生背景26
2.1.1應用從集中式走嚮分布式.26?
2.1.2亟需服務治理28
2.2業界分布式服務框架介紹29
2.2.1阿裏Dubbo30
2.2.2淘寶HSF33
2.2.3亞遜CoralService35
2.3分布式服務框架設計36
2.3.1架構原理36
2.3.2功能特性37
2.3.3性能特性39
2.3.4可靠性39
2.3.5服務治理40
2.4總結41
第3章通信框架42
3.1關鍵技術點分析43
3.1.1長連接還是短連接43
3.1.2BIO還是NIO43
3.1.3自研還是選擇開源NIO框架46
3.2功能設計47
3.2.1服務端設計48
3.2.2客戶端設計50
3.3可靠性設計53
3.3.1鏈路有效性檢測54
3.3.2斷連重連機製56
3.3.3消息緩存重發57
3.3.4資源優雅釋放58
3.4性能設計59
3.4.1性能差的三宗罪59
3.4.2通信性能三原則60
3.4.3高性能之道61
3.5佳實踐61
3.6總結64
第4章序列化與反序列化65
4.1幾個關鍵概念澄清66
4.1.1序列化與通信框架的關係66
4.1.2序列化與通信協議的關係66
4.1.3是否需要支持多種序列化方式67
4.2功能設計67
4.2.1功能豐富度67
4.2.2跨語言支持68
4.2.3兼容性69
4.2.4性能70
4.3擴展性設計71
4.3.1內置的序列化/反序列化功能類71
4.3.2反序列化擴展72
4.3.3序列化擴展75
4.4佳實踐77
4.4.1接口的前嚮兼容性規範77
4.4.2高並發下的穩定性78
4.5總結78
第5章協議棧79
5.1關鍵技術點分析.80
5.1.1是否必須支持多協議80
5.1.2公有協議還是私有協議80
5.1.3集成開源還是自研81
5.2功能設計82
5.2.1功能描述82
5.2.2通信模型82
5.2.3協議消息定義84
5.2.4協議棧消息序列化支持的字段類型85
5.2.5協議消息的序列化和反序列化86
5.2.6鏈路創建89
5.2.7鏈路關閉90
5.3可靠性設計90
5.3.1客戶端連接超時90
5.3.2客戶端重連機製91
5.3.3客戶端重復握手保護91
5.3.4消息緩存重發92
5.3.5心跳機製92
5.4安全性設計92
5.5佳實踐—協議的前嚮兼容性94
5.6總結95
第6章服務路由96
6.1透明化路由97
6.1.1基於服務注冊中心的訂閱發布97
6.1.2消費者緩存服務提供者地址98
6.2負載均衡98
6.2.1隨機98
6.2.2輪循99
6.2.3服務調用時延99
6.2.4一緻性哈希100
6.2.5粘滯連接101
6.3本地路由優先策略102
6.3.1injvm模式102
6.3.2innative模式102
6.4路由規則103
6.4.1條件路由規則103
6.4.2腳本路由規則104
6.5路由策略定製105
6.6配置化路由106
6.7佳實踐—多機房路由107
6.8總結108
第7章集群容錯109
7.1集群容錯場景110
7.1.1通信鏈路故障110
7.1.2服務端超時111
7.1.3服務端調用失敗111
7.2容錯策略112
7.2.1失敗自動切換(Failover)112
7.2.2失敗通知(Failback)113
7.2.3失敗緩存(Failcache)113
7.2.4快速失敗(Failfast)114
7.2.5容錯策略擴展114
7.3總結115
第8章服務調用116
8.1幾個誤區117
8.1.1NIO就是異步服務117
8.1.2服務調用天生就是同步的118
8.1.3異步服務調用性能更高120
8.2服務調用方式120
8.2.1同步服務調用120
8.2.2異步服務調用121
8.2.3並行服務調用125
8.2.4泛化調用129
8.3佳實踐130
8.4總結131
第9章服務注冊中心132
9.1幾個概念133
9.1.1服務提供者133
9.1.2服務消費者133
9.1.3服務注冊中心133
9.2關鍵功能特性設計134
9.2.1支持對等集群135
9.2.2提供CRUD接口136
9.2.3安全加固136
9.2.4訂閱發布機製137
9.2.5可靠性138
9.3基於ZooKeeper的服務注冊中心設計139
9.3.1服務訂閱發布流程設計139
9.3.2服務健康狀態檢測141
9.3.3對等集群防止單點故障142
9.3.4變更通知機製144
9.4總結144
第10章服務發布和引用145
10.1服務發布設計146
10.1.1服務發布的幾種方式146
10.1.2本地實現類封裝成代理148
10.1.3服務發布成指定協議148
10.1.4服務提供者信息注冊149
10.2服務引用設計150
10.2.1本地接口調用轉換成遠程服務調用150
10.2.2服務地址本地緩存151
10.2.3遠程服務調用151
10.3佳實踐152
10.3.1對等設計原則152
10.3.2啓動順序問題153
10.3.3同步還是異步發布服務153
10.3.4警惕網絡風暴154
10.3.5配置擴展154
10.4總結156
第11章服務灰度發布157
11.1服務灰度發布流程設計158
11.1.1灰度環境準備158
11.1.2灰度規則設置159
11.1.3灰度規則下發160
11.1.4灰度路由161
11.1.5失敗迴滾162
11.1.6灰度發布總結163
11.2總結163
第12章參數傳遞164
12.1內部傳參165
12.1.1業務內部參數傳遞165
12.1.2服務框架內部參數傳遞168
12.2外部傳參169
12.2.1通信協議支持169
12.2.2傳參接口定義170
12.3佳實踐171
12.3.1防止參數互相覆蓋171
12.3.2參數生命周期管理171
12.4總結172
第13章服務多版本173
13.1服務多版本管理設計174
13.1.1服務版本號管理174
13.1.2服務提供者175
13.1.3服務消費者175
13.1.4基於版本號的服務路由176
13.1.5服務熱升級177
13.2與OSGi的對比178
13.2.1模塊化開發179
13.2.2插件熱部署和熱升級184
13.2.3不使用OSGi的其他理由185
13.3總結185
第14章流量控製186
14.1靜態流控187
14.1.1傳統靜態流控設計方案187
14.1.2傳統方案的缺點188
14.1.3動態配額分配製188
14.1.4動態配額申請製190
14.2動態流控191
14.2.1動態流控因子192
14.2.2分級流控192
14.3並發控製193
14.3.1服務端全局控製193
14.3.2服務消費者流控194
14.4連接控製195
14.4.1服務端連接數流控195
14.4.2服務消費者連接數流控195
14.5並發和連接控製算法195
14.6總結197
第15章服務降級198
15.1屏蔽降級199
15.1.1屏蔽降級的流程199
15.1.2屏蔽降級的設計實現200
15.2容錯降級202
15.2.1容錯降級的工作原理202
15.2.2運行時容錯降級.204
15.3業務層降級205
15.4總結205
第16章服務優先級調度207
16.1設置服務優先級208
16.2綫程調度器方案209
16.3Java優先級隊列210
16.4加權優先級隊列211
16.5服務遷入遷齣212
16.6總結213
第17章服務治理214
17.1服務治理技術的曆史變遷215
17.1.1SOAGovernance215
17.1.2分布式服務框架服務治理217
17.1.3AWS雲端微服務治理217
17.2應用服務化後麵臨的挑戰218
17.2.1跨團隊協作問題219
17.2.2服務的上下綫管控220
17.2.3服務安全220
17.2.4服務SLA保障.221
17.2.5故障快速定界定位221
17.3服務治理222
17.3.1服務治理架構設計223
17.3.2運行態服務治理功能設計225
17.3.3綫下服務治理232
17.3.4安全和權限管理234
17.4總結237
第18章分布式消息跟蹤239
18.1業務場景分析240
18.1.1故障的快速定界定位240
18.1.2調用路徑分析241
18.1.3調用來源和去嚮分析242
18.2分布式消息跟蹤係統設計242
18.2.1係統架構243
18.2.2埋點日誌244
18.2.3采樣率247
18.2.4采集和存儲埋點日誌248
18.2.5計算和展示249
18.2.6調用鏈擴展251
18.3總結251
第19章可靠性設計253
19.1服務狀態檢測254
19.1.1基於服務注冊中心狀態檢測254