【為什么要寫這本書】
近幾年,國內(nèi)軟件行業(yè)發(fā)展迅猛,軟件規(guī)模與復(fù)雜度不斷提高,對架構(gòu)設(shè)計的需求因而越來越強烈。
雖然各個軟件公司或多或少都在進(jìn)行架構(gòu)設(shè)計這項工作,但沒有一個簡單易行、切實落地的架構(gòu)設(shè)計方法論來指導(dǎo)大家按照某種規(guī)范做事。正因如此,很多人不知道怎樣高效、高質(zhì)量地設(shè)計架構(gòu),只能東一榔頭西一棒槌,有些人甚至對什么是架構(gòu)設(shè)計都不甚了解,這樣只會導(dǎo)致架構(gòu)雜亂無章、隨意或者不全面。這種低質(zhì)量的架構(gòu)既不能有效地規(guī)避項目進(jìn)行過程中的各種風(fēng)險,也不能指導(dǎo)大規(guī)模開發(fā)團(tuán)隊有效協(xié)作,進(jìn)而導(dǎo)致在軟件開發(fā)及日后運維過程中出現(xiàn)各種問題。在這種狀況下,軟件企業(yè)也無法更好地應(yīng)對微服務(wù)轉(zhuǎn)型、大數(shù)據(jù)轉(zhuǎn)型、物聯(lián)網(wǎng)轉(zhuǎn)型等諸多技術(shù)挑戰(zhàn)。
筆者從事架構(gòu)設(shè)計及相關(guān)教學(xué)工作多年,總結(jié)出了一套操作性強的架構(gòu)設(shè)計方法論,希望能夠幫助更多讀者成為架構(gòu)師。這就是筆者寫這本書的初衷。
【讀者對象】
本書適合以下讀者:
□積極參與系統(tǒng)架構(gòu)設(shè)計,期望今后成為架構(gòu)師的開發(fā)人員;
□希望進(jìn)一步提升自己、成為架構(gòu)師的架構(gòu)師;
□希望規(guī)范架構(gòu)設(shè)計的企業(yè)高管;
□希望解決互聯(lián)網(wǎng)轉(zhuǎn)型、大數(shù)據(jù)轉(zhuǎn)型過程中的架構(gòu)難題的架構(gòu)師。
【本書特色】
本書的特色可歸納為如下三個方面:
□落地、實踐,為架構(gòu)師提供切實可行、操作性強的架構(gòu)設(shè)計方法;
□難題、方案,為架構(gòu)師解決項目實踐中的設(shè)計難題提供思路與方案;
□前瞻、全局,為架構(gòu)師展現(xiàn)未來技術(shù)發(fā)展趨勢。
【關(guān)于書名】
陶淵明在《飲酒·其五》寫道:
結(jié)廬在人境,而無車馬喧。
問君何能爾?心遠(yuǎn)地自偏。
采菊東籬下,悠然見南山。
山氣日夕佳,飛鳥相與還。
此中有真意,欲辨已忘言。
這里的真意就是指從大自然里領(lǐng)悟到人生的真諦。
此外,在這幾年一些爆紅的國漫中,真意被用來給一些的功法或招數(shù)命名。比如,《雪鷹領(lǐng)主》中有水之真意火之真意風(fēng)之真意等,意思是修行者在領(lǐng)悟了水、火、風(fēng)等的本原和法則后,就能將它們的威力發(fā)揮到極致。
本書旨在講清楚架構(gòu)的本質(zhì)和底層邏輯,讓讀者能真正明白架構(gòu)的真諦,這便是書名中架構(gòu)真意的由來。
【如何閱讀本書】
本書分為三部分。
部分(第1~6章)為架構(gòu)設(shè)計方法論,介紹了一套切實可行、操作性強的高質(zhì)量架構(gòu)方法5視圖架構(gòu)設(shè)計法,并引入了領(lǐng)域驅(qū)動設(shè)計、規(guī);艚莸认冗M(jìn)的設(shè)計思想。
第二部分(第7~9章)站在實戰(zhàn)的角度,講解了互聯(lián)網(wǎng)分布式架構(gòu)的設(shè)計與實踐,包括分布式架構(gòu)的演進(jìn),如何構(gòu)建高并發(fā)、高可用的系統(tǒng)架構(gòu),以及向微服務(wù)轉(zhuǎn)型、分布式云端部署的過程。
第三部分(第10、11章)站在更宏大的視角,介紹了大數(shù)據(jù)技術(shù)架構(gòu)的設(shè)計與實踐,其中談到了數(shù)據(jù)中臺的建設(shè)以及它所基于的大數(shù)據(jù)技術(shù)中臺,詳述了建設(shè)思路、路線圖以及技術(shù)實踐。
【第①部分 架構(gòu)設(shè)計方法論】
第①章 架構(gòu)師的修煉5
1.1 何為軟件架構(gòu)5
1.1.1 常見研發(fā)場景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è)計16
第2章 邏輯架構(gòu)設(shè)計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ī)格說明書30
2.2 界面原型分析32
2.3 領(lǐng)域模型分析34
2.3.1 軟件退化的根源34
2.3.2 兩頂帽子的設(shè)計方式38
2.3.3 領(lǐng)域驅(qū)動的設(shè)計思想41
2.3.4 領(lǐng)域驅(qū)動的變更設(shè)計42
2.3.5 領(lǐng)域驅(qū)動設(shè)計總結(jié)48
2.4 技術(shù)可行性分析50
第3章 數(shù)據(jù)架構(gòu)設(shè)計52
3.1 數(shù)據(jù)架構(gòu)的設(shè)計過程52
3.2 基于領(lǐng)域的數(shù)據(jù)庫設(shè)計54
3.2.1 傳統(tǒng)的4種關(guān)系55
3.2.2 繼承關(guān)系59
3.2.3 NoSQL數(shù)據(jù)庫的設(shè)計61
3.3 基于領(lǐng)域的程序設(shè)計63
3.3.1 服務(wù)、實體與值對象64
3.3.2 貧血模型與充血模型64
3.3.3 聚合70
3.3.4 倉庫與工廠71
3.3.5 問題域和限界上下文75
第4章 開發(fā)架構(gòu)設(shè)計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è)計86
4.2.4 易于維護(hù)的架構(gòu)88
4.3 技術(shù)中臺建設(shè)90
4.3.1 增刪改的架構(gòu)設(shè)計91
4.3.2 查詢功能的架構(gòu)設(shè)計94
4.3.3 支持領(lǐng)域驅(qū)動的架構(gòu)設(shè)計99
4.3.4 支持微服務(wù)的架構(gòu)設(shè)計107
4.4 技術(shù)選型與技術(shù)規(guī)劃109
4.4.1 軟件正確決策的過程109
4.4.2 商用軟件與開源框架110
4.5 模塊劃分與代碼規(guī)范111
第5章 運行架構(gòu)設(shè)計114
5.1 屬性場景決策115
5.2 非功能性需求117
5.3 恰如其分的架構(gòu)設(shè)計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 我們的實踐122
5.5 技術(shù)改造與軟件重構(gòu)124
5.5.1 架構(gòu)師的十年奮斗125
5.5.2 演化式的技術(shù)改造思路126
5.5.3 一個遺留系統(tǒng)改造的故事127
第6章 物理架構(gòu)設(shè)計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è)計與實踐】
第7章 分布式架構(gòu)設(shè)計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萬以內(nèi)的架構(gòu)設(shè)計143
7.1.3 流量在1000萬以上的架構(gòu)設(shè)計147
7.1.4 流量在5000萬以上的架構(gòu)設(shè)計155
7.1.5 億級流量的架構(gòu)設(shè)計160
7.2 分布式技術(shù)165
7.2.1 分布式緩存165
7.2.2 內(nèi)存數(shù)據(jù)庫169
7.2.3 分布式事務(wù)173
7.2.4 分布式隊列179
7.2.5 分布式數(shù)據(jù)庫182
第8章 微服務(wù)架構(gòu)設(shè)計192
8.1 為什么要采用微服務(wù)架構(gòu)192
8.1.1 快速變化需要快速交付192
8.1.2 打造高效的團(tuán)隊組織193
8.1.3 大前端 技術(shù)中臺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 注冊中心205
8.2.2 服務(wù)網(wǎng)關(guān)219
8.2.3 熔斷機制227
8.3 微服務(wù)的系統(tǒng)設(shè)計235
8.3.1 6種設(shè)計模式235
8.3.2 微服務(wù)設(shè)計實踐244
8.3.3 微服務(wù)測試調(diào)優(yōu)262
8.4 微服務(wù)項目實戰(zhàn)過程276
8.4.1 在線訂餐系統(tǒng)項目實戰(zhàn)278
8.4.2 統(tǒng)一語言與事件風(fēng)暴278
8.4.3 子域劃分與限界上下文282
8.4.4 微服務(wù)拆分與設(shè)計實現(xiàn)284
第9章 基于云端的分布式部署290
9.1 DevOps與快速交付290
9.2 Docker容器技術(shù)292
9.2.1 虛擬技術(shù)與容器技術(shù)292
9.2.2 對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的運行原理300
9.3.3 Kubernetes的應(yī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)用實踐310
9.4 自動化運維平臺實踐312
【第三部分 大數(shù)據(jù)架構(gòu)設(shè)計】
第10章 大數(shù)據(jù)時代變革319
10.1 從IT時代向DT時代轉(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ù)中臺建設(shè)325
10.3.1 對數(shù)據(jù)中臺的正確理解325
10.3.2 數(shù)據(jù)中臺建設(shè)的核心326
10.3.3 數(shù)據(jù)中臺的建設(shè)思路332
10.3.4 數(shù)據(jù)中臺的技術(shù)架構(gòu)333
第11章 大數(shù)據(jù)技術(shù)中臺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ù)開發(fā)中臺351
11.3.2 ETL過程的設(shè)計實踐353
11.3.3 數(shù)據(jù)倉庫建設(shè)357
11.3.4 數(shù)據(jù)標(biāo)簽設(shè)計360
11.4 大數(shù)據(jù)展示362
11.4.1 大數(shù)據(jù)索引363
11.4.2 多維模型分析367
11.4.3 HBase數(shù)據(jù)庫369