本書從大型網站架構的發(fā)展歷程出發(fā),逐步深入介紹大型網站架構的各個部分,并在后配合實戰(zhàn)案例,詳細介紹大型網站架構需要關注的問題及其解決方法,讓讀者不但可以消除對大型網站架構的神秘感,而且還可以對大型網站架構有更加深入的理解。
本書共10章,分為4篇。第1篇“大型網站架構的發(fā)展與面臨的挑戰(zhàn)”,主要介紹大型網站業(yè)務和架構的發(fā)展,以及大型網站架構面臨的挑戰(zhàn);第2篇“大型網站架構的技術細節(jié)”,主要介紹前端架構、后端架構、云計算服務架構和整體架構等內容;第3篇“大型網站架構實戰(zhàn)案例”,主要介紹單點登錄系統(tǒng)架構設計、媒體庫管理系統(tǒng)架構設計和直播系統(tǒng)架構設計的相關內容;第4篇“未來架構的設想”,主要介紹作者對未來架構的一些設想和看法。
本書從實際問題出發(fā),問題與技術相呼應,一步一步地剖析和還原大型網站架構設計,內容通俗易懂,實用性強,特別適合大型網站架構的入門與進階讀者閱讀,也適合其他對大型網站架構和云計算感興趣的讀者閱讀。
資深架構師全面總結多年積累的實際項目架構經驗
深入剖析和還原大型網站架構設計過程,并歸納出架構設計的思想與核心問題
三位知名公司的資深架構師傾情力薦
將大型網站架構分為前端架構、后端架構、云計算服務架構和整體架構進行講解
以開發(fā)成本與軟件質量為核心,高度還原真實網站架構設計項目的思考方式
提出“頂層架構”的概念,討論如何構建一個可持續(xù)迭代升級的大型網站系統(tǒng)
特意繪制了160余幅示意圖,輔助讀者更加直觀地理解架構設計
將架構思想與具體問題相對應,幫助讀者更好地理解架構設計的思想
詳解單點登錄系統(tǒng)、媒體庫管理系統(tǒng)和直播系統(tǒng)的架構設計
互聯(lián)網的發(fā)展速度超出了大部分人的預期。淘寶等購物平臺、斗魚等直播平臺、抖音等短視頻平臺和頭條號等自媒體平臺像雨后春筍般相繼涌現(xiàn),它們都屬于大型網站平臺。隨著互聯(lián)網的持續(xù)發(fā)展,未來一定還會出現(xiàn)更多的大型網站。成功的大型網站雖然是鳳毛麟角,但是它們會成為行業(yè)的標桿,會拉動大型網站的需求,使得大型網站帶來的項目機會越來越多。
大型網站不僅要處理復雜、凌亂且時刻變化的業(yè)務需求,還要應對大量的用戶訪問和數(shù)據(jù)處理;而且隨著近些年云計算的興起,大型網站越來越復雜。因此,搭建一個大型網站不再是幾個軟件工程師就能完成的。大型網站要有更加全面的架構設計、更加復雜的功能和更加強大的處理能力,其對項目開發(fā)人才的要求也越來越高。理解大型網站架構是應聘互聯(lián)網開發(fā)崗位的必要條件,也是一個加分項,更是成為架構師的前提。
在筆者職業(yè)生涯的開端,曾參與了一個合同額每年億元級的軟件項目。該項目有一個獨特的架構,可以讓開發(fā)人員近似千人一面地完成開發(fā)工作,加之該項目有嚴謹?shù)捻椖抗芾砹鞒蹋沟盟畮啄曛两。之后筆者參與了一個不太成功的大型網站項目(合同額千萬元級),其程序凌亂不堪,即使工程師們各顯神通,后成本還是嚴重超標,運維成本也非常高。
那個不太成功的大型網站項目采用了當時的前端框架Angular 2和微服務框架,高并發(fā)和高可用性設計等也都采用當時較為流行的方案,但開發(fā)出來的軟件質量卻很差。這讓筆者深深地體會到,僅靠框架和技術很難保證軟件的質量,高質量的軟件還依賴于良好的架構設計。架構設計不僅要選取現(xiàn)成的軟件工具,而且還需要思考軟件本身的結構,另外還需要約束軟件開發(fā)的過程。
對大型網站來說,想在項目之初就設計好架構,這確實是一件十分困難的事情。因為一個成熟的大型網站系統(tǒng)是非常復雜的,其涉及的問題也非常多,再加上工期等客觀條件的限制,導致架構設計很多時候是滯后于開發(fā)的,開發(fā)過程也很難被約束。
其實,在項目之初并不需要把大型網站整個架構都設計好,只需要解決一些關鍵問題即可,其他問題可以在項目迭代的過程中解決。那么,大型網站架構需要解決哪些關鍵問題呢?其實所謂關鍵問題都是經驗之談。解決好這些關鍵問題,在能提高項目質量的同時還能降低項目的成本。
為了幫助讀者全面、系統(tǒng)地學習大型網站架構設計的相關知識,筆者編寫了本書,給出了自己對相關問題的思考,并對多年的從業(yè)經驗進行了總結,相信對相關讀者會有所幫助。
本書特色
* 內容新穎:講解時涉及的大部分軟件都采用版本(截至完稿時)。
* 內容完善:全面介紹大型網站架構設計的發(fā)展和面臨的挑戰(zhàn),以及前端架構、后端架構、云計算服務架構和整體架構的技術細節(jié),并詳解3個典型的大型網站架構設計案例,后對筆者所理解的未來架構設計做必要介紹。
* 案例典型:詳細介紹單點登錄系統(tǒng)、媒體庫管理系統(tǒng)和直播系統(tǒng)的架構設計。
* 問題驅動:從問題出發(fā),問題與技術相對應,一步步地剖析和還原大型網站架構設計,幫助讀者更好地理解相關的知識。
* 經驗總結:全面歸納和總結筆者經歷的幾個大型網站項目的實踐經驗。
* 圖文并茂:提供160余幅示意圖幫助讀者更加直觀地理解相關內容。
* 實用性強:結合具體示例講解知識點,便于讀者理解和掌握。
本書內容
第1篇 大型網站架構的發(fā)展與面臨的挑戰(zhàn)
本篇涵蓋第1、2章,主要介紹大型網站架構的發(fā)展與面臨的挑戰(zhàn)。架構分為業(yè)務架構與技術架構,本篇從宏觀上介紹業(yè)務架構與技術架構,以及它們之間的關系。
第2篇 大型網站架構的技術細節(jié)
本篇涵蓋第3~6章,詳細介紹大型網站架構的技術細節(jié)。本篇把大型網站架構細分為前端架構、后端架構、云計算服務架構和整體架構4個部分,分別介紹每部分需要解決的關鍵問題及其解決方法。本篇結合實際項目介紹相關知識點,以幫助讀者更加深刻地理解大型網站架構。
第3篇 大型網站架構實戰(zhàn)案例
本篇涵蓋第7~9章,選取幾個較為通用且典型的網站系統(tǒng)作為案例,還原這些系統(tǒng)的架構設計,以幫助讀者進一步深入理解大型網站架構。
第4篇 未來架構的設想
本篇涵蓋第10章,介紹筆者對未來架構的設想。本篇內容雖然是一家之言,但是筆者認為,架構設計是開放的,軟件世界是無限包容的,其美好是從想象開始的。
讀者對象
* 網站系統(tǒng)架構師;
* 網站系統(tǒng)開發(fā)人員;
* 云計算開發(fā)人員;
* 網站系統(tǒng)運維人員;
* 網站開發(fā)項目經理;
* 對大型網站架構感興趣的人員;
* 各類院校學習網站架構的學生;
* 專業(yè)培訓機構的相關學員。
本書配套資源
本書涉及的源代碼需要讀者自行下載,請在華章公司的網站(www.hzbook.com)上搜索到本書,然后單擊“資料下載”按鈕,即可在本書頁面上找到下載鏈接進行下載。
意見反饋
鑒于筆者的水平所限,書中可能還存在一些疏漏,敬請各位讀者指正。閱讀本書時如果有疑問,可以發(fā)送電子郵件到y(tǒng)iigaa@126.com或hzb
梁嘉禎 架構師,自由職業(yè)者。曾任職于東軟集團,從事Web全棧(前端、后端和云計算)開發(fā),并參與項目架構設計。曾參與過多個合同額億級和千萬級的國內外軟件項目,作為架構師或項目經理主導過多個合同額從百萬級到五百萬級的網站系統(tǒng)項目,F(xiàn)為自由職業(yè)者,提供架構咨詢服務。本書寫作過程中為一個合同額五百萬級的社區(qū)網站系統(tǒng)提供全部的架構服務。深受本科專業(yè)涉及的工業(yè)、機械和化學思想的影響,持續(xù)思考和實踐工業(yè)化項目過程、機械化軟件結構和化學化編碼呈現(xiàn)。擁有三套自主研發(fā)的前端、后端和云計算架構,經歷過多個項目實踐,能讓大型項目縮減近一半的人力成本。
前言
第1篇 大型網站架構的發(fā)展與面臨的挑戰(zhàn)
第1章 大型網站業(yè)務和架構的發(fā)展2
1.1 大型網站的業(yè)務演變2
1.1.1 靜態(tài)網站的出現(xiàn)2
1.1.2 動態(tài)網站的出現(xiàn)3
1.1.3 大型網站系統(tǒng)的出現(xiàn)4
1.1.4 大型云計算網站系統(tǒng)的出現(xiàn)6
1.1.5 大型網站的未來7
1.2 大型網站架構的發(fā)展8
1.2.1 動態(tài)網頁時代8
1.2.2 B/S架構網站的崛起8
1.2.3 CDN加速網站響應10
1.2.4 應用和數(shù)據(jù)分離11
1.2.5 非關系型數(shù)據(jù)庫和關系型數(shù)據(jù)庫并存11
1.2.6 集群化12
1.2.7 分布式趨勢13
1.2.8 微服務15
1.2.9 大型網站架構的未來15
1.3 小結16
第2章 大型網站架構面臨的挑戰(zhàn)17
2.1 大型網站架構的基本問題17
2.1.1 業(yè)務架構面臨的挑戰(zhàn)17
2.1.2 技術架構面臨的挑戰(zhàn)20
2.1.3 業(yè)務架構和技術架構的相互成全21
2.2 業(yè)務架構的基本思路21
2.2.1 遞進思想22
2.2.2 版本計劃逐漸完善24
2.2.3 持續(xù)優(yōu)化,推陳出新25
2.3 技術架構的基本思路26
2.3.1 分層思想26
2.3.2 IaaS、PaaS和SaaS分層管理27
2.3.3 前端、后端和云計算服務分層開發(fā)28
2.4 大型網站技術架構的核心問題30
2.4.1 性能問題30
2.4.2 可用性問題30
2.4.3 伸縮性問題31
2.4.4 擴展性問題31
2.4.5 安全性問題32
2.5 小結32
第2篇 大型網站架構的技術細節(jié)
第3章 前端架構34
3.1 前端的工作原理34
3.1.1 Web服務器搭建34
3.1.2 構造一個簡單的網頁38
3.1.3 前端網頁的工作原理41
3.2 前端架構需要解決的問題47
3.2.1 規(guī)整化概述47
3.2.2 適配性和兼容性概述49
3.2.3 模塊化概述50
3.2.4 單頁應用概述51
3.3 規(guī)整化53
3.3.1 編碼規(guī)范53
3.3.2 JavaScript庫59
3.3.3 組件工具箱61
3.3.4 框架64
3.4 適配性和兼容性71
3.4.1 響應式布局71
3.4.2 整體布局73
3.4.3 模塊布局77
3.4.4 適配性測試78
3.4.5 瀏覽器兼容79
3.5 模塊化81
3.5.1 模塊化的方法82
3.5.2 現(xiàn)今前端模塊化的困局86
3.5.3 自研框架Trick87
3.6 單頁應用88
3.6.1 單頁應用用到的方法88
3.6.2 單頁應用的發(fā)展趨勢90
3.7 小結91
第4章 后端架構92
4.1 后端的工作原理92
4.1.1 后端開發(fā)語言及框架92
4.1.2 搭建Web應用服務器94
4.1.3 構造一個簡單的后端應用程序105
4.1.4 后端應用程序的工作原理114
4.2 后端架構需要解決的問題120
4.2.1 規(guī)整化概述121
4.2.2 數(shù)據(jù)庫概述122
4.2.3 非關系型數(shù)據(jù)庫概述122
4.2.4 整合其他應用程序123
4.3 規(guī)整化124
4.3.1 接口設計124
4.3.2 編碼規(guī)范132
4.3.3 集中配置140
4.3.4 Cookie和Session145
4.3.5 應用拆分和協(xié)調148
4.3.6 日志149
4.3.7 自研框架Once159
4.4 數(shù)據(jù)庫161
4.4.1 數(shù)據(jù)庫對比161
4.4.2 數(shù)據(jù)庫的工作原理162
4.4.3 數(shù)據(jù)庫設計164
4.4.4 數(shù)據(jù)庫操作框架168
4.4.5 數(shù)據(jù)庫事務175
4.4.6 分布式事務178
4.5 非關系型數(shù)據(jù)庫188
4.5.1 鍵值存儲非關系型數(shù)據(jù)庫188
4.5.2 列存儲非關系型數(shù)據(jù)庫190
4.5.3 文檔型非關系型數(shù)據(jù)庫191
4.5.4 圖形非關系型數(shù)據(jù)庫191
4.6 小結192
第5章 云計算服務架構193
5.1 云計算服務的工作原理193
5.1.1 云計算服務的應用場景193
5.1.2 云計算開發(fā)語言及其框架194
5.1.3 云計算服務軟件的工作原理195
5.2 云計算服務架構需要解決的問題200
5.2.1 云計算服務軟件基礎框架構建概述201
5.2.2 任務池與指令池的搭建和使用概述202
5.2.3 進度數(shù)據(jù)池與狀態(tài)數(shù)據(jù)池的搭建和使用概述202
5.2.4 監(jiān)控軟件的構造概述202
5.3 云計算服務軟件基礎框架的構建203
5.3.1 進程與線程203
5.3.2 線程同步205
5.3.3 線程模型211
5.3.4 軟件結構218
5.4 任務池與指令池的搭建和使用219
5.4.1 消息隊列219
5.4.2 RabbitMQ消息隊列221
5.4.3 任務池的搭建與使用232
5.4.4 指令池的搭建與使用234
5.5 進度數(shù)據(jù)池與狀態(tài)數(shù)據(jù)池的搭建和使用237
5.5.1 公共數(shù)據(jù)空間237
5.5.2 Redis數(shù)據(jù)庫239
5.5.3 進度數(shù)據(jù)池的搭建與使用247
5.5.4 狀態(tài)數(shù)據(jù)池的搭建與使用248
5.6 監(jiān)控軟件的構造249
5.6.1 軟件結構249
5.6.2 Supervisor監(jiān)控軟件253
5.7 小結254
第6章 整體架構255
6.1 網站系統(tǒng)的基本結構255
6.1.1 前端部分的基本結構255
6.1.2 后端部分的基本結構257
6.1.3 云計算服務部分的基礎結構258
6.1.4 網站系統(tǒng)的基本結構259
6.2 整體架構需要解決的問題260
6.2.1 性能概述260
6.2.2 可用性概述260
6.2.3 伸縮性概述261
6.2.4 擴展性概述261
6.2.5 安全性概述261
6.3 性能262
6.3.1 性能指標262
6.3.2 壓力測試266
6.3.3 性能調優(yōu)的基本思路271
6.3.4 服務器性能調優(yōu)274
6.3.5 Nginx調優(yōu)280
6.3.6 CDN加速283
6.3.7 瀏覽器訪問頁面的過程優(yōu)化284
6.3.8 Tomcat調優(yōu)285
6.3.9 緩存與靜態(tài)文件287
6.3.10 數(shù)據(jù)庫性能優(yōu)化288
6.3.11 數(shù)據(jù)庫集群289
6.3.12 分布式文件系統(tǒng)293
6.3.13 集群部署與分布式部署294
6.4 可用性297
6.4.1 服務器的定期維護與監(jiān)控297
6.4.2 服務器熱備份298
6.4.3 日志機制299
6.4.4 環(huán)境分離與灰度發(fā)布299
6.5 伸縮性300
6.5.1 伸縮指標與伸縮策略300
6.5.2 動態(tài)彈性伸縮的局限300
6.6 安全性301
6.6.1 安全堡壘機301
6.6.2 接口鑒權302
6.6.3 SQL盲注302
6.6.4 跨域303
6.7 小結305
第3篇 大型網站架構實戰(zhàn)案例
第7章 單點登錄系統(tǒng)架構設計308
7.1 單點登錄系統(tǒng)的關鍵問題308
7.1.1 為什么需要單點登錄系統(tǒng)308
7.1.2 單點登錄系統(tǒng)需要解決的關鍵問題309
7.2 單點登錄系統(tǒng)的詳細架構設計310
7.2.1 統(tǒng)一的登錄與注冊入口310
7.2.2 與其他子系統(tǒng)共享用戶登錄信息311
7.2.3 集中管理用戶的基本信息312
7.3 小結313
第8章 媒體庫管理系統(tǒng)架構設計314
8.1 媒體庫管理系統(tǒng)的關鍵問題314
8.1.1 為什么需要媒體庫管理系統(tǒng)314
8.1.2 媒體庫管理系統(tǒng)需要解決的關鍵問題315
8.2 媒體庫管理系統(tǒng)的詳細架構設計315
8.2.1 統(tǒng)一的媒體文件上傳入口和資源選擇機制316
8.2.2 媒體文件的刪除機制317
8.2.3 提供自動處理媒體文件等功能318
8.3 小結319
第9章 直播系統(tǒng)架構設計320
9.1 直播系統(tǒng)的關鍵問題320
9.1.1 為什么需要直播系統(tǒng)320
9.1.2 直播系統(tǒng)需要解決的關鍵問題321
9.2 直播系統(tǒng)的詳細架構設計321
9.2.1 明確直播場景321
9.2.2 基礎系統(tǒng)架構322
9.2.3 直播流接收323
9.2.4 直播流處理323
9.2.5 直播觀看325
9.3 小結326
第4篇 未來架構的設想
第10章 未來架構328
10.1 理解架構328
10.1.1 架構是什么328
10.1.2 頂層架構332
10.1.3 架構與技術333
10.2 軟件行業(yè)的發(fā)展334
10.2.1 軟件行業(yè)的現(xiàn)狀334
10.2.2 軟件行業(yè)的發(fā)展方向334
10.2.3 不斷發(fā)展的結局334
10.3 未來架構的方向335
10.3.1 人力效率增加335
10.3.2 人力資本轉化成物力資本336
10.3.3 物力資本匯聚成生態(tài)337
10.4 小結338