【為什么要寫(xiě)這本書(shū)】
近幾年,國(guó)內(nèi)軟件行業(yè)發(fā)展迅猛,軟件規(guī)模與復(fù)雜度不斷提高,對(duì)架構(gòu)設(shè)計(jì)的需求因而越來(lái)越強(qiáng)烈。
雖然各個(gè)軟件公司或多或少都在進(jìn)行架構(gòu)設(shè)計(jì)這項(xiàng)工作,但沒(méi)有一個(gè)簡(jiǎn)單易行、切實(shí)落地的架構(gòu)設(shè)計(jì)方法論來(lái)指導(dǎo)大家按照某種規(guī)范做事。正因如此,很多人不知道怎樣高效、高質(zhì)量地設(shè)計(jì)架構(gòu),只能東一榔頭西一棒槌,有些人甚至對(duì)什么是架構(gòu)設(shè)計(jì)都不甚了解,這樣只會(huì)導(dǎo)致架構(gòu)雜亂無(wú)章、隨意或者不全面。這種低質(zhì)量的架構(gòu)既不能有效地規(guī)避項(xiàng)目進(jìn)行過(guò)程中的各種風(fēng)險(xiǎn),也不能指導(dǎo)大規(guī)模開(kāi)發(fā)團(tuán)隊(duì)有效協(xié)作,進(jìn)而導(dǎo)致在軟件開(kāi)發(fā)及日后運(yùn)維過(guò)程中出現(xiàn)各種問(wèn)題。在這種狀況下,軟件企業(yè)也無(wú)法更好地應(yīng)對(duì)微服務(wù)轉(zhuǎn)型、大數(shù)據(jù)轉(zhuǎn)型、物聯(lián)網(wǎng)轉(zhuǎn)型等諸多技術(shù)挑戰(zhàn)。
筆者從事架構(gòu)設(shè)計(jì)及相關(guān)教學(xué)工作多年,總結(jié)出了一套操作性強(qiáng)的架構(gòu)設(shè)計(jì)方法論,希望能夠幫助更多讀者成為架構(gòu)師。這就是筆者寫(xiě)這本書(shū)的初衷。
【讀者對(duì)象】
本書(shū)適合以下讀者:
□積極參與系統(tǒng)架構(gòu)設(shè)計(jì),期望今后成為架構(gòu)師的開(kāi)發(fā)人員;
□希望進(jìn)一步提升自己、成為架構(gòu)師的架構(gòu)師;
□希望規(guī)范架構(gòu)設(shè)計(jì)的企業(yè)高管;
□希望解決互聯(lián)網(wǎng)轉(zhuǎn)型、大數(shù)據(jù)轉(zhuǎn)型過(guò)程中的架構(gòu)難題的架構(gòu)師。
【本書(shū)特色】
本書(shū)的特色可歸納為如下三個(gè)方面:
□落地、實(shí)踐,為架構(gòu)師提供切實(shí)可行、操作性強(qiáng)的架構(gòu)設(shè)計(jì)方法;
□難題、方案,為架構(gòu)師解決項(xiàng)目實(shí)踐中的設(shè)計(jì)難題提供思路與方案;
□前瞻、全局,為架構(gòu)師展現(xiàn)未來(lái)技術(shù)發(fā)展趨勢(shì)。
【關(guān)于書(shū)名】
陶淵明在《飲酒·其五》寫(xiě)道:
結(jié)廬在人境,而無(wú)車(chē)馬喧。
問(wèn)君何能爾?心遠(yuǎn)地自偏。
采菊東籬下,悠然見(jiàn)南山。
山氣日夕佳,飛鳥(niǎo)相與還。
此中有真意,欲辨已忘言。
這里的真意就是指從大自然里領(lǐng)悟到人生的真諦。
此外,在這幾年一些爆紅的國(guó)漫中,真意被用來(lái)給一些的功法或招數(shù)命名。比如,《雪鷹領(lǐng)主》中有水之真意火之真意風(fēng)之真意等,意思是修行者在領(lǐng)悟了水、火、風(fēng)等的本原和法則后,就能將它們的威力發(fā)揮到極致。
本書(shū)旨在講清楚架構(gòu)的本質(zhì)和底層邏輯,讓讀者能真正明白架構(gòu)的真諦,這便是書(shū)名中架構(gòu)真意的由來(lái)。
【如何閱讀本書(shū)】
本書(shū)分為三部分。
部分(第1~6章)為架構(gòu)設(shè)計(jì)方法論,介紹了一套切實(shí)可行、操作性強(qiáng)的高質(zhì)量架構(gòu)方法5視圖架構(gòu)設(shè)計(jì)法,并引入了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、規(guī);艚莸认冗M(jìn)的設(shè)計(jì)思想。
第二部分(第7~9章)站在實(shí)戰(zhàn)的角度,講解了互聯(lián)網(wǎng)分布式架構(gòu)的設(shè)計(jì)與實(shí)踐,包括分布式架構(gòu)的演進(jìn),如何構(gòu)建高并發(fā)、高可用的系統(tǒng)架構(gòu),以及向微服務(wù)轉(zhuǎn)型、分布式云端部署的過(guò)程。
第三部分(第10、11章)站在更宏大的視角,介紹了大數(shù)據(jù)技術(shù)架構(gòu)的設(shè)計(jì)與實(shí)踐,其中談到了數(shù)據(jù)中臺(tái)的建設(shè)以及它所基于的大數(shù)據(jù)技術(shù)中臺(tái),詳述了建設(shè)思路、路線圖以及技術(shù)實(shí)踐。
【第①部分 架構(gòu)設(shè)計(jì)方法論】
第①章 架構(gòu)師的修煉5
1.1 何為軟件架構(gòu)5
1.1.1 常見(jiàn)研發(fā)場(chǎng)景6
1.1.2 準(zhǔn)確理解軟件架構(gòu)7
1.2 如何成為合格的架構(gòu)師9
1.2.1 架構(gòu)師的職責(zé)9
1.2.2 架構(gòu)師的思維模式10
1.3 如何成為的架構(gòu)師12
1.3.1 能夠?qū)I(yè)務(wù)轉(zhuǎn)換為技術(shù)13
1.3.2 能合理利用技術(shù)支撐業(yè)務(wù)13
1.3.3 具備前瞻思維和戰(zhàn)略思維15
1.4 5視圖法架構(gòu)設(shè)計(jì)16
第2章 邏輯架構(gòu)設(shè)計(jì)18
2.1 用例模型分析19
2.1.1 用例模型20
2.1.2 由粗到細(xì)的用例分析21
2.1.3 用例描述23
2.1.4 事件流25
2.1.5 業(yè)務(wù)需求列表29
2.1.6 需求規(guī)格說(shuō)明書(shū)30
2.2 界面原型分析32
2.3 領(lǐng)域模型分析34
2.3.1 軟件退化的根源34
2.3.2 兩頂帽子的設(shè)計(jì)方式38
2.3.3 領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)思想41
2.3.4 領(lǐng)域驅(qū)動(dòng)的變更設(shè)計(jì)42
2.3.5 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)總結(jié)48
2.4 技術(shù)可行性分析50
第3章 數(shù)據(jù)架構(gòu)設(shè)計(jì)52
3.1 數(shù)據(jù)架構(gòu)的設(shè)計(jì)過(guò)程52
3.2 基于領(lǐng)域的數(shù)據(jù)庫(kù)設(shè)計(jì)54
3.2.1 傳統(tǒng)的4種關(guān)系55
3.2.2 繼承關(guān)系59
3.2.3 NoSQL數(shù)據(jù)庫(kù)的設(shè)計(jì)61
3.3 基于領(lǐng)域的程序設(shè)計(jì)63
3.3.1 服務(wù)、實(shí)體與值對(duì)象64
3.3.2 貧血模型與充血模型64
3.3.3 聚合70
3.3.4 倉(cāng)庫(kù)與工廠71
3.3.5 問(wèn)題域和限界上下文75
第4章 開(kāi)發(fā)架構(gòu)設(shè)計(jì)78
4.1 系統(tǒng)規(guī)劃與接口定義78
4.1.1 系統(tǒng)規(guī)劃79
4.1.2 接口定義80
4.2 系統(tǒng)分層與整潔架構(gòu)82
4.2.1 系統(tǒng)分層82
4.2.2 底層技術(shù)更迭84
4.2.3 整潔架構(gòu)設(shè)計(jì)86
4.2.4 易于維護(hù)的架構(gòu)88
4.3 技術(shù)中臺(tái)建設(shè)90
4.3.1 增刪改的架構(gòu)設(shè)計(jì)91
4.3.2 查詢功能的架構(gòu)設(shè)計(jì)94
4.3.3 支持領(lǐng)域驅(qū)動(dòng)的架構(gòu)設(shè)計(jì)99
4.3.4 支持微服務(wù)的架構(gòu)設(shè)計(jì)107
4.4 技術(shù)選型與技術(shù)規(guī)劃109
4.4.1 軟件正確決策的過(guò)程109
4.4.2 商用軟件與開(kāi)源框架110
4.5 模塊劃分與代碼規(guī)范111
第5章 運(yùn)行架構(gòu)設(shè)計(jì)114
5.1 屬性場(chǎng)景決策115
5.2 非功能性需求117
5.3 恰如其分的架構(gòu)設(shè)計(jì)117
5.4 技術(shù)架構(gòu)演化118
5.4.1 意圖架構(gòu)119
5.4.2 使能故事120
5.4.3 架構(gòu)跑道122
5.4.4 我們的實(shí)踐122
5.5 技術(shù)改造與軟件重構(gòu)124
5.5.1 架構(gòu)師的十年奮斗125
5.5.2 演化式的技術(shù)改造思路126
5.5.3 一個(gè)遺留系統(tǒng)改造的故事127
第6章 物理架構(gòu)設(shè)計(jì)131
6.1 集中式與分布式132
6.2 網(wǎng)絡(luò)架構(gòu)圖134
6.3 系統(tǒng)架構(gòu)與應(yīng)用架構(gòu)135
【第二部分 分布式架構(gòu)設(shè)計(jì)與實(shí)踐】
第7章 分布式架構(gòu)設(shè)計(jì)141
7.1 互聯(lián)網(wǎng)架構(gòu)演進(jìn)141
7.1.1 All-in-One架構(gòu)142
7.1.2 流量在1000萬(wàn)以內(nèi)的架構(gòu)設(shè)計(jì)143
7.1.3 流量在1000萬(wàn)以上的架構(gòu)設(shè)計(jì)147
7.1.4 流量在5000萬(wàn)以上的架構(gòu)設(shè)計(jì)155
7.1.5 億級(jí)流量的架構(gòu)設(shè)計(jì)160
7.2 分布式技術(shù)165
7.2.1 分布式緩存165
7.2.2 內(nèi)存數(shù)據(jù)庫(kù)169
7.2.3 分布式事務(wù)173
7.2.4 分布式隊(duì)列179
7.2.5 分布式數(shù)據(jù)庫(kù)182
第8章 微服務(wù)架構(gòu)設(shè)計(jì)192
8.1 為什么要采用微服務(wù)架構(gòu)192
8.1.1 快速變化需要快速交付192
8.1.2 打造高效的團(tuán)隊(duì)組織193
8.1.3 大前端 技術(shù)中臺(tái)196
8.1.4 小而專的微服務(wù)197
8.1.5 微服務(wù)中的去中心化概念199
8.1.6 互聯(lián)網(wǎng)轉(zhuǎn)型利器202
8.2 微服務(wù)的關(guān)鍵技術(shù)204
8.2.1 注冊(cè)中心205
8.2.2 服務(wù)網(wǎng)關(guān)219
8.2.3 熔斷機(jī)制227
8.3 微服務(wù)的系統(tǒng)設(shè)計(jì)235
8.3.1 6種設(shè)計(jì)模式235
8.3.2 微服務(wù)設(shè)計(jì)實(shí)踐244
8.3.3 微服務(wù)測(cè)試調(diào)優(yōu)262
8.4 微服務(wù)項(xiàng)目實(shí)戰(zhàn)過(guò)程276
8.4.1 在線訂餐系統(tǒng)項(xiàng)目實(shí)戰(zhàn)278
8.4.2 統(tǒng)一語(yǔ)言與事件風(fēng)暴278
8.4.3 子域劃分與限界上下文282
8.4.4 微服務(wù)拆分與設(shè)計(jì)實(shí)現(xiàn)284
第9章 基于云端的分布式部署290
9.1 DevOps與快速交付290
9.2 Docker容器技術(shù)292
9.2.1 虛擬技術(shù)與容器技術(shù)292
9.2.2 對(duì)Docker容器的操作294
9.2.3 用Dockerfile制作鏡像296
9.2.4 微服務(wù)的Docker容器部署297
9.2.5 Docker容器的應(yīng)用298
9.2.6 搭建Docker本地私服299
9.3 Kubernetes分布式容器管理299
9.3.1 微服務(wù)發(fā)布的難題299
9.3.2 Kubernetes的運(yùn)行原理300
9.3.3 Kubernetes的應(yīng)用場(chǎng)景303
9.3.4 Kubernetes的虛擬網(wǎng)絡(luò)304
9.3.5 用Kubernetes部署微服務(wù)305
9.3.6 用有狀態(tài)集部署組件308
9.3.7 Kubernetes應(yīng)用實(shí)踐310
9.4 自動(dòng)化運(yùn)維平臺(tái)實(shí)踐312
【第三部分 大數(shù)據(jù)架構(gòu)設(shè)計(jì)】
第10章 大數(shù)據(jù)時(shí)代變革319
10.1 從IT時(shí)代向DT時(shí)代轉(zhuǎn)變319
10.2 數(shù)據(jù)分析與應(yīng)用319
10.2.1 數(shù)據(jù)應(yīng)用的發(fā)展歷程320
10.2.2 數(shù)據(jù)應(yīng)用的成熟度321
10.3 數(shù)據(jù)中臺(tái)建設(shè)325
10.3.1 對(duì)數(shù)據(jù)中臺(tái)的正確理解325
10.3.2 數(shù)據(jù)中臺(tái)建設(shè)的核心326
10.3.3 數(shù)據(jù)中臺(tái)的建設(shè)思路332
10.3.4 數(shù)據(jù)中臺(tái)的技術(shù)架構(gòu)333
第11章 大數(shù)據(jù)技術(shù)中臺(tái)335
11.1 大數(shù)據(jù)技術(shù)335
11.1.1 Hadoop技術(shù)框架336
11.1.2 Spark技術(shù)框架339
11.2 大數(shù)據(jù)采集345
11.2.1 結(jié)構(gòu)化數(shù)據(jù)采集346
11.2.2 非結(jié)構(gòu)化數(shù)據(jù)采集347
11.3 大數(shù)據(jù)治理350
11.3.1 SparkSQL大數(shù)據(jù)開(kāi)發(fā)中臺(tái)351
11.3.2 ETL過(guò)程的設(shè)計(jì)實(shí)踐353
11.3.3 數(shù)據(jù)倉(cāng)庫(kù)建設(shè)357
11.3.4 數(shù)據(jù)標(biāo)簽設(shè)計(jì)360
11.4 大數(shù)據(jù)展示362
11.4.1 大數(shù)據(jù)索引363
11.4.2 多維模型分析367
11.4.3 HBase數(shù)據(jù)庫(kù)369