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