適讀人群 :有志成為軟件架構(gòu)師的軟件開(kāi)發(fā)人員 全球范圍內(nèi)的薪酬調(diào)查經(jīng)常將軟件架構(gòu)師列為十大最佳工作崗位,但并沒(méi)有真正的指南來(lái)幫助開(kāi)發(fā)人員成為架構(gòu)師。于是,本書(shū)出現(xiàn)了。本書(shū)首次全面概述了軟件架構(gòu)的方方面面,涉及架構(gòu)特征、架構(gòu)模式、組件識(shí)別、圖表化和展示架構(gòu)、演進(jìn)架構(gòu),以及其他許多主題。
軟件開(kāi)發(fā)世界日新月異,軟件架構(gòu)師必須在這樣一個(gè)不斷變化的環(huán)境中做出決策,在學(xué)習(xí)架構(gòu)時(shí),必須記住一點(diǎn):與許多藝術(shù)品一樣,架構(gòu)只能在上下文中理解。架構(gòu)師的許多決策都基于他們所處的實(shí)際環(huán)境而產(chǎn)生。
Mark Richards和Neal Ford講授軟件架構(gòu)課程多年,他們關(guān)注的是適用于所有技術(shù)棧的架構(gòu)原則。本書(shū)從現(xiàn)代的角度看待軟件架構(gòu),綜合了過(guò)去十年的所有創(chuàng)新,以及一些適用于當(dāng)下的新結(jié)構(gòu)和視角的新的度量標(biāo)準(zhǔn)和方法。本書(shū)還討論了至關(guān)重要的權(quán)衡分析問(wèn)題。本書(shū)為現(xiàn)有和新興的架構(gòu)(從結(jié)構(gòu)到軟技能等方面)提供一個(gè)良好的現(xiàn)代化軟件架構(gòu)概覽。
本書(shū)將探討:
架構(gòu)模式:眾多架構(gòu)決策的技術(shù)基礎(chǔ)。
組件:識(shí)別、耦合、內(nèi)聚、分區(qū)和粒度。
軟技能:有效的團(tuán)隊(duì)管理、會(huì)議、談判、展示等。
現(xiàn)代化:在過(guò)去的幾年里,工程實(shí)踐和操作方法發(fā)生了根本性的變化。
作為工程學(xué)科的架構(gòu):可重復(fù)的結(jié)果、度量和具體的評(píng)估增加了軟件架構(gòu)的嚴(yán)謹(jǐn)性。
公理:被認(rèn)為已經(jīng)成立、被采納或不證自明的真理的陳述或命題。
數(shù)學(xué)家在公理(即對(duì)事物無(wú)可爭(zhēng)議的假設(shè))的基礎(chǔ)上建立理論。軟件架構(gòu)師也將理論建立在公理之上,但是軟件世界比數(shù)學(xué)世界要更加“軟性”:基礎(chǔ)的事物持續(xù)快速變化,甚至包括我們的理論所基于的公理。
軟件開(kāi)發(fā)生態(tài)系統(tǒng)處于一個(gè)恒定的動(dòng)態(tài)平衡狀態(tài):盡管在任何給定的時(shí)間點(diǎn)都處于平衡狀態(tài),但在長(zhǎng)期內(nèi)表現(xiàn)出動(dòng)態(tài)行為。當(dāng)下容器化的提升及其產(chǎn)生的變化能夠很好地說(shuō)明生態(tài)系統(tǒng)的這一特質(zhì):像Kubernetes這樣的工具在十年前還不存在,但是現(xiàn)在甚至有了Kubernetes用戶大會(huì)。軟件生態(tài)系統(tǒng)的變化是混沌的:一個(gè)小變化引起另一個(gè)小變化,如此重復(fù)數(shù)百次就會(huì)產(chǎn)生一個(gè)新的生態(tài)系統(tǒng)。
架構(gòu)師有一個(gè)重要的責(zé)任,即質(zhì)疑從過(guò)去的年代遺留下來(lái)的假設(shè)和公理。許多關(guān)于軟件架構(gòu)的書(shū)籍都是在一個(gè)與當(dāng)今世界幾乎沒(méi)有什么相似之處的年代寫(xiě)成的。事實(shí)上,作者認(rèn)為,我們必須經(jīng)常質(zhì)疑基本公理:從改進(jìn)的工程實(shí)踐、可操作的生態(tài)系統(tǒng)、軟件開(kāi)發(fā)過(guò)程的角度—在架構(gòu)師和開(kāi)發(fā)人員日常工作中產(chǎn)生混亂、動(dòng)態(tài)平衡的方方面面。
隨著時(shí)間的推移,細(xì)心觀察軟件架構(gòu)的人見(jiàn)證了其能力的演變。從極限編程的工程實(shí)踐開(kāi)始,繼之以持續(xù)交付、DevOps革命、微服務(wù)、容器化,現(xiàn)在則是云資源,所有這些創(chuàng)新都帶來(lái)了新的能力和權(quán)衡。隨著能力的變化,架構(gòu)師對(duì)行業(yè)的看法也發(fā)生了變化。多年來(lái),軟件架構(gòu)的半開(kāi)玩笑的定義是“以后很難改變的東西”。后來(lái)出現(xiàn)了微服務(wù)架構(gòu)風(fēng)格,變化則是最重要的設(shè)計(jì)考慮因素。
每個(gè)新時(shí)代都需要新的實(shí)踐、工具、度量、模式和一系列其他變化。本書(shū)從現(xiàn)代的角度看待軟件架構(gòu),綜合了過(guò)去十年的所有創(chuàng)新,以及一些適用于當(dāng)下的新結(jié)構(gòu)和視角的新的度量標(biāo)準(zhǔn)和方法。
長(zhǎng)期以來(lái),開(kāi)發(fā)人員一直希望將軟件開(kāi)發(fā)從手工活(熟練的工匠只能產(chǎn)生一次性的工作)轉(zhuǎn)變?yōu)楣こ虒W(xué)科,這意味著可重復(fù)性、嚴(yán)謹(jǐn)性和有效的分析。盡管軟件工程相比其他類(lèi)型的工程學(xué)科仍然落后許多個(gè)數(shù)量級(jí)(公平地說(shuō),與大多數(shù)其他類(lèi)型的工程相比,軟件工程是一個(gè)非常年輕的學(xué)科),架構(gòu)師已經(jīng)做出了巨大的改進(jìn),我們將對(duì)此進(jìn)行討論。特別是,現(xiàn)代敏捷工程實(shí)踐在系統(tǒng)類(lèi)型方面的架構(gòu)設(shè)計(jì)上取得了很大進(jìn)展。
我們還討論了至關(guān)重要的權(quán)衡分析問(wèn)題。軟件開(kāi)發(fā)人員很容易迷戀某種特定的技術(shù)或方法。但是,架構(gòu)師必須總是冷靜地評(píng)估每一個(gè)選擇的好與壞、美與丑,實(shí)際上,在現(xiàn)實(shí)世界中沒(méi)有什么東西能提供完美的二元選擇—一切都是權(quán)衡。鑒于這種實(shí)用主義的觀點(diǎn),我們努力消除對(duì)技術(shù)的價(jià)值判斷,專(zhuān)注于分析權(quán)衡,讓讀者帶著審視的眼光進(jìn)行技術(shù)選擇。
本書(shū)不會(huì)讓人一夜之間成為一個(gè)軟件架構(gòu)師—軟件架構(gòu)是一個(gè)包括很多方面的微妙領(lǐng)域。我們希望為現(xiàn)有的和新興的架構(gòu)(從結(jié)構(gòu)到軟技能等方面)提供一個(gè)良好的現(xiàn)代化軟件架構(gòu)概覽。雖然本書(shū)涵蓋了眾所周知的模式,但依靠所獲得的經(jīng)驗(yàn)教訓(xùn)、工具、工程實(shí)踐和其他輸入,我們采用了一種新的方法。我們將現(xiàn)代化的輪廓考慮在內(nèi),借鑒了軟件架構(gòu)中的許多現(xiàn)有公理,根據(jù)當(dāng)前的生態(tài)系統(tǒng)重新思考它們,并設(shè)計(jì)架構(gòu)。
前言:失效的公理1
第1章 概述5
1.1 定義軟件架構(gòu)7
1.2 架構(gòu)師的角色期望10
1.3 與架構(gòu)的交集14
1.4 軟件架構(gòu)定律19
【第一部分 基礎(chǔ)21】
第2章 架構(gòu)思維23
2.1 架構(gòu)與設(shè)計(jì)24
2.2 技術(shù)廣度25
2.3 分析權(quán)衡28
2.4 理解業(yè)務(wù)驅(qū)動(dòng)因素31
2.5 平衡架構(gòu)和動(dòng)手編碼31
第3章 模塊化34
3.1 定義34
3.2 度量模塊化36
3.3 從模塊到組件48
第4章 現(xiàn)有的架構(gòu)特征49
4.1 部分已羅列出來(lái)的架構(gòu)特征51
4.2 權(quán)衡和最差可用的架構(gòu)56
第5章 識(shí)別架構(gòu)特征57
5.1 從領(lǐng)域問(wèn)題中提取架構(gòu)特征57
5.2 從需求中提取架構(gòu)特征59
5.3 案例研究:硅三明治60
第6章 度量和治理架構(gòu)特征66
6.1 度量架構(gòu)特征66
6.2 治理和適應(yīng)度函數(shù)70
第7章 架構(gòu)特征的范圍76
7.1 耦合與共生性76
7.2 架構(gòu)量子與粒度77
第8章 組件化思維83
8.1 組件范圍83
8.2 架構(gòu)師角色84
8.3 開(kāi)發(fā)人員角色90
8.4 組件識(shí)別流程90
8.5 組件粒度91
8.6 組件設(shè)計(jì)92
8.7 案例研究:“前進(jìn),前進(jìn),消失”之發(fā)現(xiàn)組件94
8.8 架構(gòu)量子回歸:?jiǎn)误w架構(gòu)和分布式架構(gòu)之間的選擇96
【第二部分 架構(gòu)風(fēng)格99】
第9章 基礎(chǔ)101
9.1 基礎(chǔ)模式101
9.2 單體架構(gòu)與分布式架構(gòu)104
第10章 分層架構(gòu)風(fēng)格112
10.1 拓?fù)浣Y(jié)構(gòu)112
10.2 分層隔離性113
10.3 增加分層114
10.4 其他考慮116
10.5 為什么使用這種架構(gòu)風(fēng)格116
10.6 架構(gòu)特征評(píng)級(jí)117
第11章 管道架構(gòu)風(fēng)格119
11.1 拓?fù)浣Y(jié)構(gòu)119
11.2 示例121
11.3 架構(gòu)特征評(píng)級(jí)122
第12章 微內(nèi)核架構(gòu)風(fēng)格124
12.1 拓?fù)浣Y(jié)構(gòu)124
12.2 注冊(cè)129
12.3 契約130
12.4 示例和用例131
12.5 架構(gòu)特征評(píng)級(jí)132
第13章 基于服務(wù)的架構(gòu)風(fēng)格134
13.1 拓?fù)浣Y(jié)構(gòu)134
13.2 拓?fù)浣Y(jié)構(gòu)變體135
13.3 服務(wù)設(shè)計(jì)和粒度137
13.4 數(shù)據(jù)庫(kù)分區(qū)138
13.5 架構(gòu)示例139
13.6 架構(gòu)特征評(píng)級(jí)141
13.7 何時(shí)使用這種架構(gòu)風(fēng)格143
第14章 事件驅(qū)動(dòng)的架構(gòu)風(fēng)格144
14.1 拓?fù)浣Y(jié)構(gòu)145
14.2 代理拓?fù)?45
14.3 中介拓?fù)?49
14.4 異步能力156
14.5 錯(cuò)誤處理157
14.6 防止數(shù)據(jù)丟失160
14.7 廣播功能162
14.8 請(qǐng)求-應(yīng)答163
14.9 在基于請(qǐng)求和基于事件之間進(jìn)行選擇165
14.10 混合的事件驅(qū)動(dòng)的架構(gòu)166
14.11 架構(gòu)特征評(píng)級(jí)166
第15章 基于空間的架構(gòu)風(fēng)格169
15.1 常規(guī)拓?fù)浣Y(jié)構(gòu)170
15.2 數(shù)據(jù)沖突179
15.3 云實(shí)現(xiàn)與預(yù)置實(shí)現(xiàn)181
15.4 復(fù)制緩存與分布式緩存182
15.5 近緩存中的注意事項(xiàng)184
15.6 實(shí)現(xiàn)示例185
15.7 架構(gòu)特征評(píng)級(jí)186
第16章 編制驅(qū)動(dòng)的面向服務(wù)的架構(gòu)188
16.1 歷史和哲學(xué)188
16.2 拓?fù)浣Y(jié)構(gòu)188
16.3 分類(lèi)189
16.4 重用與解耦191
16.5 架構(gòu)特征評(píng)級(jí)193
第17章 微服務(wù)架構(gòu)195
17.1 歷史195
17.2 拓?fù)浣Y(jié)構(gòu)196
17.3 分布式196
17.4 有界上下文197
17.5 API層198
17.6 運(yùn)維重用199
17.7 前端201
17.8 通信202
17.9 架構(gòu)特征評(píng)級(jí)209
17.10 附加參考210
第18章 選擇合適的架構(gòu)風(fēng)格211
18.1 改變架構(gòu)“時(shí)尚”211
18.2 決策標(biāo)準(zhǔn)212
18.3 單體案例研究:硅三明治214
18.4 分布式案例研究:前進(jìn),前進(jìn),消失216
【第三部分 技巧和軟技能221】
第19章 架構(gòu)決策223
19.1 架構(gòu)決策反模式223
19.2 具備架構(gòu)意義225
19.3 架構(gòu)決策記錄226
第20章 分析架構(gòu)風(fēng)險(xiǎn)235
20.1 風(fēng)險(xiǎn)矩陣235
20.2風(fēng)險(xiǎn)評(píng)估236
20.3 風(fēng)險(xiǎn)風(fēng)暴238
20.4 敏捷用戶故事的風(fēng)險(xiǎn)分析244
20.5 風(fēng)險(xiǎn)風(fēng)暴范例244
第21章 架構(gòu)繪圖和演示250
21.1 繪圖251
21.2 演示255
第22章 打造高效團(tuán)隊(duì)259
22.1 團(tuán)隊(duì)邊界259
22.2 架構(gòu)師的個(gè)性260
22.3 有多少控制力263
22.4 團(tuán)隊(duì)告警信號(hào)267
22.5 利用檢查清單269
22.6 提供指導(dǎo)273
22.7 總結(jié)275
第23章 談判和領(lǐng)導(dǎo)能力276
23.1 談判和推進(jìn)276
23.2 軟件架構(gòu)師作為領(lǐng)導(dǎo)者281
23.3 與開(kāi)發(fā)團(tuán)隊(duì)集成287
23.4 總結(jié)289
第24章 打造職業(yè)發(fā)展路徑290
24.1 20分鐘規(guī)則290
24.2 開(kāi)發(fā)個(gè)人雷達(dá)291
24.3 使用社交媒體295
24.4 臨別贈(zèng)言296
附錄A 自我評(píng)估問(wèn)題297
關(guān)于作者
關(guān)于封面