高并發(fā)架構(gòu)實戰(zhàn):從需求分析到系統(tǒng)設(shè)計
定 價:99 元
叢書名:架構(gòu)師書庫
- 作者:李智慧著李瀟然繪
- 出版時間:2023/6/1
- ISBN:9787111729761
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP311.5
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:32開
本書包含 20 余個高并發(fā)系統(tǒng)案例,每個案例看似相互獨立,實則相輔相成。根據(jù)高并發(fā)系統(tǒng)的特點,高并發(fā)與高性能、高可用的關(guān)系,本書分為 6 篇;A(chǔ)篇,概要介紹專欄所用的軟件建模方法、設(shè)計文檔寫法、高并發(fā)架構(gòu)設(shè)計方法。高并發(fā)系統(tǒng)的海量數(shù)據(jù)處理架構(gòu)篇,討論海量數(shù)據(jù)如何存儲、如何傳輸、如何進行并發(fā)控制。高并發(fā)系統(tǒng)的高性能架構(gòu)篇,討論在高并發(fā)場景下,如何保證系統(tǒng)的響應(yīng)性能。高并發(fā)系統(tǒng)的高可用架構(gòu)篇,通過微博、百科、限流器等架構(gòu)案例分析,尋求保障高并發(fā)系統(tǒng)高可用的方案。安全系統(tǒng)架構(gòu)篇,通過Web防火墻、加解密平臺、區(qū)塊鏈設(shè)計等,討論面對惡意請求、敏感數(shù)據(jù)泄露的風(fēng)險,如何保證系統(tǒng)足夠安全可靠。網(wǎng)約車架構(gòu)專題篇,深入討論一個網(wǎng)約車架構(gòu)。
?沉浸式設(shè)計:基于多個真實大廠架構(gòu)設(shè)計文檔進行重構(gòu),通過貼合真實高并發(fā)工作場景的設(shè)計文檔形式、求同存異的典型系統(tǒng)架構(gòu)設(shè)計方案,體驗作為大廠架構(gòu)師的沉浸式設(shè)計心路。?實用性強:本書介紹的多個應(yīng)用場景與技術(shù)方案,可解決現(xiàn)實工作中80%以上的高并發(fā)共性問題,真正做到學(xué)以致用。?知識體系完備:本書介紹的知識點覆蓋面廣,應(yīng)用場景多,包括微博、百科、搜索引擎、短視頻、交友軟件、網(wǎng)約車等各種應(yīng)用,以及秒殺系統(tǒng)、區(qū)塊鏈架構(gòu)、分布式存儲、DDD重構(gòu)等關(guān)鍵技術(shù),構(gòu)建了完整的高并發(fā)系統(tǒng)架構(gòu)知識體系。?內(nèi)容專業(yè):作者李智慧是知名架構(gòu)師,將自己多年的實踐經(jīng)驗和理論知識融合,讓讀者真正、全面地理解高并發(fā)系統(tǒng)開發(fā)。?讀者好評如潮:本書內(nèi)容由極客時間暢銷專欄改編、擴充而來,內(nèi)容廣受讀者好評。
前 言
很多軟件工程師的職業(yè)規(guī)劃是成為架構(gòu)師,但是要成為架構(gòu)師很多時候要求先有架構(gòu)設(shè)計經(jīng)驗,而不做架構(gòu)師又怎么會有架構(gòu)設(shè)計經(jīng)驗?zāi)?那么要如何獲得架構(gòu)設(shè)計經(jīng)驗?zāi)?一方面可以通過工作來學(xué)習(xí),觀察所在團隊的架構(gòu)師是如何工作的,協(xié)助他做一些架構(gòu)設(shè)計和落地的工作。同時,思考如果你是架構(gòu)師,你將如何完成工作,哪些地方可以做得更好。
另一方面,也可以通過閱讀來學(xué)習(xí),看看那些典型的、耳熟能詳?shù)膽?yīng)用系統(tǒng)是如何設(shè)計的。同樣,你也可以在閱讀的過程中思考:如果你是這個系統(tǒng)的架構(gòu)師,將如何進行設(shè)計?如何輸出你的設(shè)計結(jié)果?哪些關(guān)鍵設(shè)計需要進一步優(yōu)化?
通過這樣不斷地學(xué)習(xí)和思考,你就會不斷積累架構(gòu)設(shè)計的經(jīng)驗,等你有機會成為架構(gòu)師的時候,就可以從容不迫地利用你學(xué)習(xí)與思考獲得的經(jīng)驗和方法,開始你的架構(gòu)師職業(yè)生涯。
本書的所有案例都是基于真實場景的,甚至有些案例本身就是由真實設(shè)計文檔改編的。希望你在閱讀本書的過程中,能把自己帶入真實的系統(tǒng)設(shè)計場景中,把文章當成真實的設(shè)計文檔,把自己想象成文檔作者的同事,也就是說,你正在評審我做的設(shè)計。
你可以一邊閱讀一邊思考:這個設(shè)計哪些地方考慮不周?哪些關(guān)鍵點有缺漏?然后你可以把自己的思考記錄下來,當作你的評審意見。重要的是,通過這種方式,你擁有了和我一樣的關(guān)于每一個軟件設(shè)計案例的現(xiàn)場感:你不是一個閱讀書籍的讀者,而是置身于互聯(lián)網(wǎng)大廠的資深架構(gòu)師,你在評審?fù)碌脑O(shè)計,也在考慮公司的未來。
本書特點
本書主要針對高并發(fā)系統(tǒng)架構(gòu)設(shè)計的典型應(yīng)用場景,采用標準的軟件架構(gòu)設(shè)計文檔格式,描述如何設(shè)計常見的高并發(fā)系統(tǒng)架構(gòu),期望能夠幫助你站在大廠架構(gòu)師的視角,理解高并發(fā)系統(tǒng)的設(shè)計思路。
為了幫助你獲得這種身臨其境的大廠架構(gòu)師視角,本書提供了三條途徑。
足夠真實的高并發(fā)系統(tǒng)設(shè)計場景
高并發(fā)是系統(tǒng)架構(gòu)設(shè)計的核心,也是很多大廠的關(guān)注焦點。在應(yīng)聘大廠架構(gòu)師崗位的時候,如果你對高并發(fā)架構(gòu)說不出什么,恐怕面試就兇多吉少了。但是看過了不少高并發(fā)系統(tǒng)設(shè)計的技術(shù)資料之后,你可能還是會有這樣的困惑:為什么我還是對設(shè)計一個完整的高并發(fā)系統(tǒng)沒有概念?
這主要是因為你學(xué)習(xí)的是具體的高并發(fā)架構(gòu)知識,而不是學(xué)習(xí)一個完整的高并發(fā)系統(tǒng)如何設(shè)計,所以也就無法形成一個整體的系統(tǒng)架構(gòu)設(shè)計思路。
本書大部分案例都是針對我們?nèi)粘=佑|的各種高并發(fā)應(yīng)用的,比如微博、短視頻、網(wǎng)約車、網(wǎng)盤、搜索引擎等,具體又分為高并發(fā)系統(tǒng)的海量數(shù)據(jù)處理架構(gòu)、高性能架構(gòu)、高可用架構(gòu)以及安全架構(gòu)。
在學(xué)習(xí)這些系統(tǒng)架構(gòu)設(shè)計案例的時候,一方面可以學(xué)習(xí)各種應(yīng)用系統(tǒng)如何進行整體設(shè)計,另一方面也可以學(xué)習(xí)高并發(fā)系統(tǒng)架構(gòu)設(shè)計的模式和技巧,兩者結(jié)合起來,就是一個完整的高并發(fā)系統(tǒng)設(shè)計的知識體系。
貼合工作場景的設(shè)計文檔形式
你可能會覺得設(shè)計文檔和自己關(guān)系不大:一是平時不怎么寫,也不愿意寫,覺得寫文檔價值不大;二是自己不擅長寫文檔,覺得寫也寫不好,甚至不太知道設(shè)計文檔該怎么寫。
但工作了這么多年,我發(fā)現(xiàn)寫東西可以幫助人更好地思考。技術(shù)人員如果不寫設(shè)計文檔,就會缺少對技術(shù)的深刻思考,缺乏對技術(shù)方案的優(yōu)點和缺點的系統(tǒng)認識,也就不知道如何找到更好的技術(shù)和更合理的方案。很顯然,這會阻礙技術(shù)人員的職業(yè)發(fā)展。
不僅如此,如果不寫設(shè)計文檔,缺乏對技術(shù)的深度思考,那么開發(fā)出來的軟件就缺乏創(chuàng)新,產(chǎn)品在市場上就缺乏競爭力。
可以粗暴一點地說:沒有設(shè)計文檔就沒有設(shè)計,沒有設(shè)計就沒有技術(shù)的進步。
所以,本書將以軟件設(shè)計文檔的形式去展現(xiàn)一系列軟件的系統(tǒng)架構(gòu)設(shè)計,這些設(shè)計文檔的風(fēng)格是相對統(tǒng)一的。我希望你可以在這些“重復(fù)”的設(shè)計文檔所展現(xiàn)的組織方式、軟件建模與架構(gòu)方式中,掌握一般的軟件設(shè)計方法和軟件設(shè)計文檔的寫作方法。
求同存異的典型系統(tǒng)架構(gòu)案例
我精挑細選了18個系統(tǒng)架構(gòu)案例,這些案例大多是目前大家比較關(guān)注的高并發(fā)、高性能、高可用系統(tǒng)。它們是高并發(fā)架構(gòu)設(shè)計的優(yōu)秀“課代表”,它們的技術(shù)可以解決現(xiàn)有的80%以上的高并發(fā)共性問題。所以在閱讀文檔的過程中,你可以進一步學(xué)習(xí)與借鑒這些典型的分布式互聯(lián)網(wǎng)系統(tǒng)架構(gòu),構(gòu)建起自己的系統(tǒng)架構(gòu)設(shè)計方法論,以指導(dǎo)自己的工作實踐。
為了避免每篇文檔中都出現(xiàn)大量重復(fù)、雷同的設(shè)計,我在內(nèi)容方面進行了取舍,精簡了一些常規(guī)的、技術(shù)含量較低的內(nèi)容,而盡量介紹那些有獨特設(shè)計思想的技術(shù)點,盡可能做到在遵循設(shè)計文檔規(guī)范的同時,又突出每個系統(tǒng)自己的設(shè)計重點。
此外,本書中還有一部分設(shè)計是針對大型應(yīng)用系統(tǒng)的,比如限流器、防火墻、加解密服務(wù)、大數(shù)據(jù)平臺等。
但需要強調(diào)一點,本書會針對這些知名的大廠應(yīng)用重新進行設(shè)計,而不是分析現(xiàn)有應(yīng)用是如何設(shè)計的。一方面,重新設(shè)計完全可以按自己的意愿來,不管是設(shè)計方案還是需求分析、性能指標估算,都是一件很有意思的事;另一方面,因為現(xiàn)有應(yīng)用中的某些關(guān)鍵設(shè)計并沒有公開,我們要想討論清楚這些高并發(fā)應(yīng)用的架構(gòu)設(shè)計,沒有現(xiàn)成的資料,還是需
CONTENTS
目 錄
前言
第1章 系統(tǒng)架構(gòu)藍圖:軟件建模與文檔1
1.1 軟件建模2
1.2 軟件設(shè)計方法3
1.2.1 類圖3
1.2.2 時序圖4
1.2.3 組件圖5
1.2.4 部署圖6
1.2.5 用例圖7
1.2.6 狀態(tài)圖8
1.2.7 活動圖8
1.3 軟件設(shè)計文檔10
1.4 小結(jié)12
第2章 面對高并發(fā)如何對癥下藥13
2.1 高并發(fā)系統(tǒng)架構(gòu)的方法論14
2.2 高并發(fā)系統(tǒng)架構(gòu)的主要技術(shù)15
2.2.1 分布式應(yīng)用15
2.2.2 分布式緩存17
2.2.3 分布式消息隊列17
2.2.4 分布式關(guān)系數(shù)據(jù)庫18
2.2.5 分布式微服務(wù)19
2.3 系統(tǒng)并發(fā)指標20
2.4 小結(jié)21
第3章 百億短URL生成器設(shè)計23
3.1 需求分析24
3.1.1 短URL生成器的用例圖25
3.1.2 性能指標估算25
3.1.3 非功能性需求26
3.2 概要設(shè)計27
3.2.1 單向散列函數(shù)生成短URL27
3.2.2 自增長短URL28
3.2.3 預(yù)生成短URL28
3.2.4 整體部署模型28
3.3 詳細設(shè)計32
3.3.1 重定向響應(yīng)碼32
3.3.2 短URL預(yù)生成文件及預(yù)加載33
3.3.3 用戶自定義短URL34
3.3.4 URL Base64編碼35
3.4 小結(jié)36
第4章 千億級網(wǎng)頁爬蟲設(shè)計38
4.1 需求分析39
4.1.1 性能指標估算39
4.1.2 非功能性需求39
4.2 概要設(shè)計41
4.2.1 爬蟲處理流程42
4.2.2 系統(tǒng)部署模型44
4.2.3 分布式爬蟲45
4.3 詳細設(shè)計46
4.3.1 URL調(diào)度器算法46
4.3.2 去重算法50
4.3.3 高可用設(shè)計50
4.4 小結(jié)51
第5章 萬億GB網(wǎng)盤系統(tǒng)設(shè)計53
5.1 需求分析54
5.1.1 負載指標估算55
5.1.2 非功能性需求55
5.2 概要設(shè)計56
5.3 詳細設(shè)計60
5.3.1 元數(shù)據(jù)庫設(shè)計60
5.3.2 限速61
5.3.3 秒傳61
5.4 小結(jié)63
第6章 支撐3000萬用戶同時在線的短視頻系統(tǒng)設(shè)計64
6.1 需求分析65
6.2 概要設(shè)計66
6.3 詳細設(shè)計70
6.3.1 視頻存儲系統(tǒng)設(shè)計70
6.3.2 性能優(yōu)化與CDN設(shè)計72
6.3.3 縮略圖生成與推薦設(shè)計73
6.4 小結(jié)76
第7章 高可用分布式存儲系統(tǒng)設(shè)計77
7.1 需求分析78
7.2 概要設(shè)計79
7.3 詳細設(shè)計80
7.3.1 路由算法80
7.3.2 高可用設(shè)計83
7.3.3 集群伸縮設(shè)計86
7.4 小結(jié)87
第8章 應(yīng)對萬人搶購的秒殺系統(tǒng)設(shè)計89
8.1 需求分析90
8.1.1 獨立開發(fā)部署秒殺系統(tǒng)90
8.1.2 防止跳過秒殺頁面直接下單90
8.2 概要設(shè)計90
8.2.1 獨立秒殺系統(tǒng)頁面設(shè)計91
8.2.2 秒殺系統(tǒng)的流量控制92
8.2.3 秒殺活動啟動機制設(shè)計95
8.2.4 秒殺系統(tǒng)部署模型96
8.3 小結(jié)98
第9章 基于LBS的交友系統(tǒng)設(shè)計99
9.1 需求分析100
9.2 概要設(shè)計101
9.3 詳細設(shè)計102
9.3.1 SQL鄰近算法103
9.3.2 地理網(wǎng)格鄰近算法104
9.3.3 動態(tài)網(wǎng)格算法105
9.3.4 GeoHash算法107
9.3.5 Liao的終算法選擇111
9.4 小結(jié)112
第10章 全網(wǎng)搜索引擎設(shè)計113
10.1 概要設(shè)計114
10.2 詳細設(shè)計116
10.2.1 索引116
10.2.2 PageRank排序算法120
10.3 小結(jié)123
第11章 反應(yīng)式編程框架設(shè)計124
11.1 需求分析125
11.2 概要設(shè)計127
11.3 詳細設(shè)計129
11.3.1 服務(wù)注冊131
11.3.2 流程編排132
11.3.3 流式微服務(wù)設(shè)計133
11.4 小結(jié)136
第12章 支撐億級用戶的微博系統(tǒng)設(shè)計138
12.1 需求分析139
12.1.1 功能需求139
12.1.2 性能指標估算140
12.2 概要設(shè)計141
12.3 詳細設(shè)計144
12.3.1 微博發(fā)表/訂閱問題144
12.3.2 緩存使用策略146
12.3.3 數(shù)據(jù)庫分片策略148
12.4 小結(jié)149
第13章 百科應(yīng)用系統(tǒng)設(shè)計150
13.1 概要設(shè)計151
13.1.1 整體架構(gòu)設(shè)計151
13.1.2 多數(shù)據(jù)中心架構(gòu)153
13.2 詳細設(shè)計156
13.2.1 前端性能優(yōu)化156
13.2.2 服務(wù)端性能優(yōu)化157
13.2.3 存儲端性能優(yōu)化157
13.3 小結(jié)158
第14章 高可用的限流器設(shè)計160
14.1 需求分析161
14.2 概要設(shè)計161
14.2.1 限流模式設(shè)計162
14.2.2 高可用設(shè)計163
14.3 詳細設(shè)計163
14.3.1 配置文件設(shè)計164
14.3.2 固定窗口限流算法165
14.3.3 滑動窗口限流算法167
14.3.4 漏桶限流算法168
14.3.5 令牌桶限流算法171
14.4 小結(jié)172
第15章 安全可靠的Web應(yīng)用防火墻設(shè)計174
15.1 需求分析175
15.2 概要設(shè)計176
15.3 詳細設(shè)計179
15.3.1 XSS攻擊179
15.3.2 SQL注入攻擊182
15.3.3 CSRF攻擊184
15.3.4 注釋與異常信息泄露185
15.4 小結(jié)186
第16章 敏感數(shù)據(jù)的加解密服務(wù)平臺187
16.1