三位著名的軟件架構(gòu)師的新版著作,闡述了軟件架構(gòu)師如何管理和優(yōu)化現(xiàn)有體系結(jié)構(gòu),轉(zhuǎn)換它們以解決新問題,并構(gòu)建可重用的體系結(jié)構(gòu),使之成為戰(zhàn)略業(yè)務資產(chǎn)。更新了移動,云,能源管理,DevOps,量子計算等新內(nèi)容
當開始編寫本書第4版時,我們遇到的個問題是:架構(gòu)還重要嗎?隨著云基礎設施、微服務、框架和每個可能想象的領域以及質(zhì)量屬性參考架構(gòu)的興起,人們可能會認為不再需要架構(gòu)知識了。今天的架構(gòu)師需要做的就是從豐富的工具和基礎設施備選方案中選一個,再將它們實例化并加以配置,一個架構(gòu)就完成了。
我們過去(以及現(xiàn)在)非?隙軜(gòu)仍然重要。為此,我們采訪了一些架構(gòu)師(他們在醫(yī)療保健、汽車、社交媒體、航空、國防、金融、電子商務等領域工作),他們誰也沒有被教條的偏見所左右。他們的回答證實了我們的信念,即架構(gòu)在今天和20多年前我們編寫第1版時一樣重要。
讓我們來研究一下架構(gòu)仍然重要的原因。,新需求的增長速度多年來一直在加快,甚至現(xiàn)在還在繼續(xù)加快。在客戶和業(yè)務需求以及競爭壓力的驅(qū)動下,今天的架構(gòu)師面臨著不斷增加的特性需求和永無休止的待修復bug。如果架構(gòu)師不注意系統(tǒng)的模塊化(而且請記住微服務不是的),系統(tǒng)很快就將拋錨—難以理解、變更、調(diào)試和修改,并拖累業(yè)務。
第二,當系統(tǒng)的抽象級別在增加時(我們可以并且確實經(jīng)常使用許多復雜巧妙的服務,而不用關心它們是如何實現(xiàn)的),我們創(chuàng)建的系統(tǒng)的復雜性也在以同樣快的速度增加。這像一場軍備競賽,而架構(gòu)師并沒有獲勝!架構(gòu)一直致力于馴服復雜性,而這一點在短期內(nèi)是不會消失的。
說到提高抽象級別,基于模型的系統(tǒng)工程(Model-Based Systems Engineering,MBSE)在過去10年的時間里已經(jīng)成為工程領域的一股強大力量。MBSE是一種形式化的支持系統(tǒng)設計的建模應用。國際系統(tǒng)工程理事會(International Council on Systems Engineering,INCOSE)將MBSE列為“轉(zhuǎn)型賦能者”之一,它是整個系統(tǒng)工程學科的基礎。模型是對一個可以被推理的概念或結(jié)構(gòu)進行圖形化、數(shù)學化或物理化表示。INCOSE正試圖將工程領域從基于文檔的思維轉(zhuǎn)向基于模型的思維,其中結(jié)構(gòu)模型、行為模型、性能模型等都被持續(xù)用于更好、更快、更便宜地構(gòu)建系統(tǒng)。MBSE本身已經(jīng)超出了本書的范圍,但是我們不得不注意到正在被建模的是架構(gòu)。那誰建立模型呢?回答是:架構(gòu)師。
第三,信息系統(tǒng)世界的飛速增長(以及前所未有的員工流動率)意味著,在任何現(xiàn)實世界的系統(tǒng)中,沒有人了解一切。僅僅聰明和努力是不夠的。
第四,盡管工具可以自動完成我們過去人工做的許多事情(例如Kubernetes中所有的編排、部署和管理功能),但我們?nèi)匀恍枰斫馑蕾嚨倪@些系統(tǒng)的質(zhì)量屬性,并在把系統(tǒng)組合到一起時理解突現(xiàn)的質(zhì)量屬性。大多數(shù)質(zhì)量屬性(如性能、防護性、可用性、安全性等)都容易受到“短板”問題的影響,而這些短板只有在聯(lián)調(diào)系統(tǒng)時才會出現(xiàn)并影響我們。如果沒有指路之手來避免災難,聯(lián)調(diào)很可能會失敗。那只指路之手屬于架構(gòu)師,不論他們的頭銜是什么。
考慮到這些因素,我們覺得確實需要這本書。
但有必要推出第4版嗎?當然有必要!這應該是非常明顯的。自上一版出版以來,計算機領域發(fā)生了很大變化。一些之前沒有被考慮的質(zhì)量屬性在許多架構(gòu)師的日常實踐中變得重要。隨著軟件繼續(xù)滲透到社會的各個方面,對許多系統(tǒng)來說,安全性考慮已經(jīng)變得至關重要,如軟件控制駕駛的汽車。同樣,十年前,能源效率是少數(shù)架構(gòu)師考慮的質(zhì)量屬性,但現(xiàn)在必須注意它,從對能源有強烈需求的大型數(shù)據(jù)中心到我們周圍的小型(甚至很小的)電池驅(qū)動的移動和物聯(lián)網(wǎng)設備。此外,考慮到我們比以往任何時候都更多地利用現(xiàn)有的組件來構(gòu)建系統(tǒng),可集成性的質(zhì)量屬性正在消耗我們越來越多的注意力。
后,我們正在構(gòu)建不同種類的系統(tǒng),并且以不同于10年前的方式構(gòu)建它們,F(xiàn)在的系統(tǒng)通常構(gòu)建在云中的虛擬化資源之上,它們需要提供并依賴顯式接口。此外,它們的移動性越來越強,移動性帶來的機遇和挑戰(zhàn)也越來越多。因此,在這個版本中,我們增加了關于虛擬化、接口、移動性和云的章節(jié)。
如你所見,我們說服了自己。希望我們同樣說服了你,你會發(fā)現(xiàn)第4版對你的書架是一個有用的補充。
部分 入門介紹
第1章 什么是軟件架構(gòu)1
1.1 什么是軟件架構(gòu),什么不是軟件架構(gòu)2
1.2 架構(gòu)結(jié)構(gòu)與視圖5
1.3 什么是“好的”架構(gòu)19
1.4 總結(jié)21
1.5 進一步閱讀21
1.6 問題討論22
第2章 軟件架構(gòu)的重要性25
2.1 抑制或支持系統(tǒng)的質(zhì)量屬性26
2.2 關于變更的推理和管理27
2.3 預測系統(tǒng)質(zhì)量28
2.4 利益相關者之間的溝通28
2.5 早期設計決策31
2.6 實現(xiàn)約束31
2.7 對組織結(jié)構(gòu)的影響32
2.8 賦能增量開發(fā)33
2.9 成本和進度估算33
2.10 可轉(zhuǎn)移、可重用模型34
2.11 架構(gòu)允許合并獨立開發(fā)的元素34
2.12 限制設計方案的術語35
2.13 培訓的基礎36
2.14 總結(jié)36
2.15 進一步閱讀37
2.16 問題討論37
第二部分 質(zhì)量屬性
第3章 理解質(zhì)量屬性39
3.1 功能性40
3.2 質(zhì)量屬性注意事項41
3.3 明確質(zhì)量屬性需求:質(zhì)量屬性場景42
3.4 通過架構(gòu)模式和戰(zhàn)術實現(xiàn)質(zhì)量屬性45
3.5 用戰(zhàn)術設計46
3.6 分析質(zhì)量屬性的設計決策:基于戰(zhàn)術的調(diào)查問卷48
3.7 總結(jié)49
3.8 進一步閱讀49
3.9 問題討論50
第4章 可用性51
4.1 可用性通用場景53
4.2 可用性戰(zhàn)術55
4.3 基于戰(zhàn)術的可用性調(diào)查問卷62
4.4 可用性模式66
4.5 進一步閱讀68
4.6 問題討論69
第5章 可部署性71
5.1 持續(xù)部署72
5.2 可部署性75
5.3 可部署性通用場景76
5.4 可部署性戰(zhàn)術78
5.5 基于戰(zhàn)術的可部署性調(diào)查問卷80
5.6 可部署性模式81
5.7 進一步閱讀87
5.8 問題討論87
第6章 能源效率89
6.1 能源效率通用場景90
6.2 能源效率戰(zhàn)術92
6.3 基于戰(zhàn)術的能源效率調(diào)查問卷95
6.4 模式97
6.5 進一步閱讀98
6.6 問題討論99
第7章 可集成性101
7.1 評估架構(gòu)的可集成性102
7.2 可集成性通用場景104
7.3 可集成性戰(zhàn)術105
7.4 基于戰(zhàn)術的可集成性調(diào)查問卷110
7.5 模式112
7.6 進一步閱讀114
7.7 問題討論115
第8章 可修改性117
8.1 可修改性通用場景120
8.2 可修改性戰(zhàn)術121
8.3 基于戰(zhàn)術的可修改性調(diào)查問卷125
8.4 模式126
8.5 進一步閱讀130
8.6 問題討論131
第9章 性能133
9.1 性能通用場景134
9.2 性能戰(zhàn)術137
9.3 基于戰(zhàn)術的性能調(diào)查問卷145
9.4 性能模式146
9.5 進一步閱讀149
9.6 問題討論150
第10章 安全性151
10.1 安全性通用場景154
10.2 安全性戰(zhàn)術156
10.3 基于戰(zhàn)術的安全性調(diào)查問卷160
10.4 安全性模式163
10.5 進一步閱讀165
10.6 問題討論166
第11章 防護性169
11.1 防護性通用場景170
11.2 防護性戰(zhàn)術172
11.3 基于戰(zhàn)術的防護性調(diào)查問卷176
11.4 防護性模式179
11.5 進一步閱讀180
11.6 問題討論180
第12章 可測試性183
12.1 可測試性通用場景186
12.2 可測試性戰(zhàn)術187
12.3 基于戰(zhàn)術的可測試性調(diào)查問卷192
12.4 可測試性模式192
12.5 進一步閱讀194
12.6 問題討論195
第13章 易用性197
13.1 易用性通用場景198
13.2 易用性戰(zhàn)術200
13.3 基于戰(zhàn)術的易用性調(diào)查問卷202
13.4 易用性模式203
13.5 進一步閱讀205
13.6 問題討論205
第14章 使用其他質(zhì)量屬性207
14.1 其他質(zhì)量屬性207
14.2 是否使用標準質(zhì)量屬性清單209
14.3 處理“X能力”:引入新的QA212
14.4 進一步閱讀215
14.5 問題討論215
第三部分 架構(gòu)解決方案
第15章 軟件接口217
15.1 接口的概念218
15.2 設計一個接口222
15.3 接口文檔編制228
15.4 總結(jié)230
15.5 進一步閱讀230
15.6 問題討論231
第16章 虛擬化233
16.1 共享資源234
16.2 虛擬機235
16.3 虛擬機映像238
16.4 容器239
16.5 容器和虛擬機241
16.6 容器可移植性242
16.7 Pod242
16.8 無服務器架構(gòu)243
16.9 總結(jié)244
16.10 進一步閱讀245
16.11 問題討論245
第17章 云和分布式計算247
17.1 云基礎248
17.2 云中失效251
17.3 使用多個實例提高性能和可用性253
17.4 總結(jié)261
17.5 進一步閱讀262
17.6 問題討論262
第18章 移動系統(tǒng)263
18.1 能源264
18.2 網(wǎng)絡連通性266
18.3 傳感器和執(zhí)行器267
18.4 資源268
18.5 生命周期270
18.6 總結(jié)273
18.7 進一步閱讀274
18.8 問題討論275
第四部分 可擴展架構(gòu)實踐
第19章 架構(gòu)上的重要需求277
19.1 從需求文檔中收集ASR278
19.2 通過訪