深入淺出大型網站架構設計

深入淺出大型網站架構設計

《深入淺出大型網站架構設計》是一本由電子工業出版社於2020年5月出版圖書,作者是李力非。本書從架構設計的角度出發,涵蓋了以高性能、高可用、高並發等多個業內標準為目標的網站設計和建設手段。

基本介紹

  • 書名:深入淺出大型網站架構設計
  • 作者:李力非
  • 類別:計算機
  • 出版社:電子工業出版社
  • 出版時間:2020年5月
  • 頁數:256 頁
  • 定價:89 元
  • 開本:16 開
  • ISBN:9787121353970
內容簡介,圖書目錄,作者簡介,

內容簡介

《深入淺出大型網站架構設計》從理論方法到生產實踐,在力求簡明易懂、適用於儘可能多的場合的前提下深入到實踐中,為讀者提供實用操作指南

圖書目錄

第1 章網站架構概述         1
1.1 網站的基本組件          1
1.2 網站業務規模增長帶來的問題     2
1.3 大型網站架構設計的目標和原則     4
1.3.1 高性能          4
1.3.2 高可用          5
1.3.3 伸縮性          6
1.3.4 擴展性          7
第2 章大型網站架構設計的流程      9
2.1 需求分析  9
2.1.1 需求驅動的重要性      9
2.1.2 如何根據需求制定系統目標   10
2.2 方案設計          11
2.2.1 與架構設計原則相結合     11
2.2.2 設計多套備選方案    12
2.3 方案評估          13
第3 章資料庫的選擇         15
3.1 關係資料庫          15
3.1.1 什麼是關係資料庫    16
3.1.2 關係資料庫的優勢和套用場景   17
3.2 非關係資料庫        18
3.2.1 什麼是非關係資料庫       18
3.2.2 非關係資料庫的優勢和套用場景   19
3.3 常見的關係資料庫產品      20
3.3.1 MySQL        20
3.3.2 MS SQL Server      21
3.3.3 Oracle          22
3.4 常見的非關係資料庫產品         22
3.4.1 MongoDB        23
3.4.2 DynamoDB        23
3.5 雲資料庫          23
第4 章資料庫最佳化:分庫分表     25
4.1 什麼是分庫分表        25
4.1.1 分庫          25
4.1.2 分表          26
4.2 為什麼要進行分庫分表      27
4.2.1 吞吐量        27
4.2.2 索引          27
4.2.3 備份          28
4.2.4 其他風險        28
4.3 實現分庫分表        28
4.3.1 垂直分庫分表        29
4.3.2 水平分庫分表        30
4.4 分庫分錶帶來的問題        32
第5 章資料庫最佳化:讀寫分離     34
5.1 什麼是讀寫分離        34
5.2 為什麼要使用讀寫分離      35
5.2.1 何時需要使用讀寫分離     35
5.2.2 讀寫分離的好處      36
5.3 實現讀寫分離        37
5.3.1 中間件實現       37
5.3.2 套用層實現       38
5.4 讀寫分離帶來的問題        39
5.4.1 副本的實時性        39
5.4.2 副本實時性的解決方案     39
5.4.3 成本問題        40
第6 章快取   41
6.1 什麼是快取          41
6.2 快取策略          42
6.2.1 LFU 快取策略        42
6.2.2 LRU 快取策略        43
6.2.3 快取策略的優劣      43
6.3 快取命中率          44
6.4 快取的類型          44
6.4.1 客戶端快取       44
6.4.2 CDN 快取        45
6.4.3 套用快取        45
6.4.4 基於分散式集群的快取     45
6.5 分散式快取          46
6.5.1 分散式快取的套用場景     46
6.5.2 分散式快取的架構設計     47
6.6 快取的問題          47
6.6.1 快取過熱        47
6.6.2 快取穿透        48
6.6.3 快取雪崩        48
6.7 常見的快取系統        49
6.7.1 MemCached        49
6.7.2 Redis          49
第7 章動靜分離  50
7.1 動靜分離          50
7.1.1 動態數據和靜態數據       50
7.1.2 動靜分離的概念      52
7.1.3 動靜分離的作用      53
7.2 拆分動態數據和靜態數據         55
7.2.1 識別動態數據和靜態數據     55
7.2.2 改造數據        56
7.2.3 改造數據要注意的問題     60
7.3 動靜分離的架構改造        62
7.3.1 動靜分離的快取架構       62
7.3.2 瀏覽器快取       63
7.3.3 CDN 快取        64
7.3.4 Web 伺服器快取      65
7.3.5 分散式快取       65
7.3.6 頁面組裝        66
第8 章負載均衡  67
8.1 什麼是負載均衡        67
8.1.1 負載均衡的概念      67
8.1.2 負載均衡的類型      69
8.1.3 有負載均衡的網站架構     69
8.1.4 反向代理        70
8.2 DNS 負載均衡          72
8.2.1 DNS          73
8.2.2 A 記錄          73
8.2.3 CName        73
8.2.4 配置DNS 負載均衡       74
8.2.5 DNS 負載均衡的優缺點       75
8.3 硬體負載均衡        76
8.4 軟體負載均衡:LVS        77
8.4.1 LVS 架構        77
8.4.2 LVS 的負載均衡方式       78
8.4.3 LVS 的負載均衡策略       80
8.4.4 LVS 的調整升級      81
8.4.5 LVS 的優缺點        81
8.5 軟體負載均衡:Nginx      82
8.5.1 Nginx 架構       82
8.5.2 Nginx 的工作原理    83
8.5.3 Nginx 的負載均衡策略     84
8.5.4 Nginx 的錯誤重試    85
8.5.5 Nginx 的調整升級    85
8.5.6 Nginx 的主要特點    86
8.5.7 Nginx 配置實戰      86
8.6 負載均衡的實踐流程        89
8.6.1 回顧流量基本概念    90
8.6.2 實踐流程        90
第9 章異步和非阻塞         93
9.1 異步及其相關概念        93
9.1.1 同步和異步       94
9.1.2 阻塞和非阻塞        94
9.1.3 多執行緒        96
9.2 異步和非阻塞的作用        97
9.2.1 異步和非阻塞的套用場景    97
9.2.2 異步和非阻塞的架構       102
9.2.3 異步的優勢     103
9.3 實戰:以Java 為例      105
9.3.1 Runnable        105
9.3.2 Callable          106
9.3.3 Future        106
9.3.4 Executor 和ExecutorService   108
9.3.5 改造同步且阻塞的Java 代碼     108
9.4 異步和非阻塞帶來的問題       112
9.4.1 API 定義        113
9.4.2 執行緒池的擴容        113
第10 章佇列   116
10.1 佇列及其相關概念        116
10.1.1 佇列          116
10.1.2 生產/消費、發布/訂閱與主題   117
10.2 佇列與網站的整合        119
10.2.1 發布者          119
10.2.2 訂閱者        120
10.2.3 訂閱者:推送模式       120
10.2.4 訂閱者:拉取/輪詢模式     122
10.3 佇列的套用        123
10.3.1 流量控制       123
10.3.2 服務解耦       126
10.4 佇列存在的問題與解決方案       128
10.4.1 訊息積壓       128
10.4.2 訊息的可靠傳遞    130
10.4.3 訊息重複       133
10.5 常見的佇列產品和系統         134
10.5.1 RabbitMQ      134
10.5.2 ActiveMQ      135
10.5.3 RocketMQ      135
10.5.4 Kafka        136
10.5.5 AWS SQS 和SNS       136
第11 章高可用  137
11.1 CAP 原理          137
11.1.1 什麼是CAP 原理       137
11.1.2 CAP 原理與網站服務       138
11.2 服務可用性的標準        141
11.3 冗餘和隔離        142
11.3.1 擴容中的冗餘      142
11.3.2 廣義的冗餘        142
11.3.3 隔離          142
第12 章異地多活 144
12.1 異地多活的基本概念      144
12.1.1 基本概念       144
12.1.2 作用        145
12.1.3 套用場景       145
12.1.4 異地多活和負載均衡     147
12.2 異地多活的類型        147
12.2.1 同城異地多活      147
12.2.2 跨城市異地多活    148
12.2.3 跨地區異地多活    149
12.3 如何進行異地多活改造         149
12.3.1 業務分類       149
12.3.2 數據分類       150
12.3.3 數據同步       151
12.3.4 異地多活的數據同步提升方案   153
第13 章服務降級 156
13.1 服務降級的基本概念      156
13.1.1 什麼是服務降級    156
13.1.2 單點故障       158
13.2 微服務與服務拆分        160
13.2.1 什麼是微服務      160
13.2.2 流量模式       161
13.2.3 如何拆分服務      162
13.3 系統分級          165
13.3.1 分析系統流程圖    165
13.3.2 一級系統       166
第14 章限流  168
14.1 限流的基本概念        168
14.1.1 什麼是限流        168
14.1.2 為什麼需要限流    169
14.1.3 限流的幾種標準    171
14.1.4 限流的幾種思路    172
14.2 限流算法          176
14.2.1 令牌桶算法與漏桶算法     176
14.2.2 時間視窗算法      179
14.2.3 佇列法        182
14.3 服務限流需要考慮的問題       183
14.3.1 性能和準確性      183
14.3.2 如何進一步提升    184
14.4 實戰:使用Nginx 限流       186
第15 章下遊錯誤處理       191
15.1 逾時機制          191
15.2 錯誤分類          192
15.2.1 如何分類錯誤      192
15.2.2 早期失敗       194
15.2.3 默認值的作用      194
15.3 錯誤重試          195
15.3.1 錯誤重試的條件    196
15.3.2 錯誤重試帶來的問題     196
第16 章測試  198
16.1 測試的類型        198
16.1.1 一般功能測試      198
16.1.2 黑盒和白盒測試    200
16.1.3 不同程度的功能測試     202
16.1.4 非功能的測試      204
16.2 測試用例的設計        206
16.2.1 模擬實際環境      206
16.2.2 包含錯誤情況      207
16.2.3 保證用例多樣性    209
16.2.4 驗證系統間的連線性     212
16.3 功能測試詳解        213
16.3.1 單元測試       213
16.3.2 集成測試       217
16.3.3 端到端測試        219
第17 章上線準備 222
17.1 發布流程          222
17.1.1 規範化流程        222
17.1.2 結合測試的流程    224
17.1.3 自動化的流程      225
17.2 監控  226
17.2.1 生產環境度量      226
17.2.2 監控與警報        231
17.3 壓力測試          232
17.3.1 壓力測試的目的    233
17.3.2 如何進行壓力測試       233
17.4 灰度發布          237
17.4.1 什麼是灰度發布    237
17.4.2 灰度發布的條件    239
17.5 維護人員          241
17.5.1 應急預案       241
17.5.2 人工監控       242

作者簡介

李力非,2014年起進入網際網路軟體開發行業,並於2015年加入亞馬遜公司,從事軟體開發和設計,對後端伺服器開發、移動端開發和前端網頁開發均有涉獵,先後參與亞馬遜購物網站移動APP、Alexa智慧型家居的自動化控制系統和亞馬遜事務類通知系統的軟體開發和設計,領導並參與了多個大型項目。熟悉如何結合設計原則和方法設計超大流量的網路服務,並擅長根據實際情況和限制,靈活調整系統架構。其中參與設計與開發的Alexa智慧型家居自動化控制系統的每日用戶使用人次超過2500萬並持續增長,牢牢占據同類產品的市場占有率第一;參與開發的亞馬遜事務類通知系統每日吞吐量達上億。

相關詞條

熱門詞條

聯絡我們