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

李力非

  • 出版商: 電子工業
  • 出版日期: 2020-05-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 256
  • 裝訂: 平裝
  • ISBN: 7121353970
  • ISBN-13: 9787121353970
  • 相關分類: 軟體架構
  • 立即出貨(限量) (庫存=3)

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

商品描述

為了幫助有一定編程基礎的讀者快速了解如何以職業標准開發一個網站,
本書從架構設計的角度出發,涵蓋了以高性能、高可用、
高並發等多個業內標準為目標的網站設計和建設手段,
並在每個方面追本溯源,從理論方法到生產實踐,在力求簡明易懂、
適用於盡可能多的場合的前提下深入到實踐中,為讀者提供實用操作指南。
同時,本書對所有出現的概念都作了簡明扼要的解釋,
並對介紹的手段和方案不僅解釋瞭如何做,
也解釋了來源和選擇理由,使得讀者在理解內容並能應用的同時,
也能理解這些手段背後的思路,將來亦可脫離書本,
作出屬於自己的創新方案,真正做到了授人以魚不如授人以漁。

作者簡介

李力非

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

目錄大綱

目錄
第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
4.4.1全局唯一ID 32
4.4.2關係數據庫的部分操作33
4.4.3事務支持33

第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