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