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