全書共10章,分為三部分。第一部分(第1章)提出一種架構(gòu)認(rèn)知的方法論,即架構(gòu)認(rèn)知框架=架構(gòu)知識(shí)模型+架構(gòu)落地方法+架構(gòu)思維模式,后續(xù)章節(jié)圍繞此方法論展開。第二部分(第2-4章)介紹架構(gòu)知識(shí)模型,該模型將大量的架構(gòu)知識(shí)點(diǎn)進(jìn)行分類與結(jié)構(gòu)化,同類架構(gòu)知識(shí)之間通常存在一些共性規(guī)則,可以相互借鑒。第三部分(第5-10章)介紹架構(gòu)落地方法和架構(gòu)思維模式。本部分提出一個(gè)標(biāo)準(zhǔn)化的端到端架構(gòu)落地方法,該方法是在RUP、DDD和TOGAF等各類架構(gòu)理論基礎(chǔ)上融合而成的,以幫助讀者有效應(yīng)對(duì)復(fù)雜系統(tǒng)的設(shè)計(jì)。最后,本部分介紹了10種架構(gòu)思維模式,旨在幫助架構(gòu)師提升認(rèn)知水平,以應(yīng)對(duì)復(fù)雜系統(tǒng)的整體性挑戰(zhàn)。
1)從架構(gòu)知識(shí)模型、架構(gòu)落地方法、架構(gòu)思維模式三大維度介紹架構(gòu)師的能力模型,帶你穿越“認(rèn)知迷霧”,輕松完成架構(gòu)師入門2)融合TOGAF、DDD、RUP等主流架構(gòu)方法論,抽象出一個(gè)具有高度普適性的架構(gòu)認(rèn)知框架,教你從容應(yīng)對(duì)駕駛師崗位面臨的難題
為什么寫作本書
程序員如何成長為架構(gòu)師?程序員在成長為架構(gòu)師的路上,通常會(huì)遇到許多問題,以下列舉了其中一些比較普遍的。
1)架構(gòu)知識(shí)點(diǎn)繁多,是否存在一個(gè)簡單的架構(gòu)知識(shí)模型,方便記憶和學(xué)習(xí)?
2)一個(gè)復(fù)雜系統(tǒng)是如何設(shè)計(jì)出來的?是否有架構(gòu)落地的指南?
3)自己目前處于哪個(gè)階段?是否存在清晰的架構(gòu)學(xué)習(xí)框架?
4)DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))和面向?qū)ο笾g存在什么樣的關(guān)系?DDD的本質(zhì)又是什么?
5)敏捷和DevOps是兩個(gè)事物,還是一個(gè)事物的兩個(gè)方面?它們的關(guān)系和本質(zhì)到底是什么?
6)雖然架構(gòu)知識(shí)掌握得不錯(cuò),但在面對(duì)復(fù)雜系統(tǒng)設(shè)計(jì)時(shí)仍然感到?jīng)]有頭緒或者缺乏信心,這種情況應(yīng)該如何改善?
7)每次較大的業(yè)務(wù)需求變更,都會(huì)導(dǎo)致前期架構(gòu)設(shè)計(jì)大的調(diào)整甚至推倒重來,如何有效提高處理這種情況的能力?
總之,程序員在成長為架構(gòu)師的過程中通常會(huì)經(jīng)歷3個(gè)階段,每個(gè)階段都有一道主要關(guān)卡,即該階段中的最大難關(guān)。一般而言,只有跨過了這道關(guān)卡,才表明已經(jīng)掌握了該階段的知識(shí),并成功進(jìn)入下一個(gè)階段。上述問題實(shí)際上都可以對(duì)應(yīng)到3個(gè)階段及其關(guān)卡中。
第一個(gè)階段是知識(shí)體系搭建,即初期如何學(xué)習(xí)并掌握大量的架構(gòu)知識(shí)。這一階段的關(guān)鍵是尋找好的學(xué)習(xí)方法或途徑,否則很容易被困在“知識(shí)迷霧”中。問題1到問題4可劃到這一階段。
第二個(gè)階段是認(rèn)知突破。許多架構(gòu)師深有體會(huì),即使已經(jīng)掌握了豐富的架構(gòu)技能,在面對(duì)復(fù)雜系統(tǒng)挑戰(zhàn)時(shí)也不能游刃有余地處理。因?yàn)榧軜?gòu)是一項(xiàng)綜合性工作,更需要技術(shù)之外的認(rèn)知提升來應(yīng)對(duì)復(fù)雜情況,否則就容易陷入“認(rèn)知瓶頸”。上面的問題5到問題7可劃到這一階段。
第三個(gè)階段是架構(gòu)本質(zhì)探尋。當(dāng)一位架構(gòu)師已經(jīng)具備了駕馭復(fù)雜系統(tǒng)的能力后,就會(huì)開始思考架構(gòu)知識(shí)體系的本質(zhì)是什么,并能持續(xù)更新架構(gòu)知識(shí)體系,提升認(rèn)知和解決問題的能力。
本書旨在為讀者厘清架構(gòu)師成長之路上的3個(gè)階段及關(guān)卡,并對(duì)每個(gè)階段的問題進(jìn)行答疑解惑。
本書特色
1)關(guān)注本質(zhì)的理解。盡管本書是一本架構(gòu)技術(shù)類的書籍,但是討論的內(nèi)容并不僅僅停留在技術(shù)層面,而是嘗試探討技術(shù)的本質(zhì)或原理是什么,讓讀者盡可能知其然,也知其所以然。例如,本書探討了敏捷、DevOps、DDD等多種技術(shù)的本質(zhì)。
2)關(guān)注案例的類比。不論架構(gòu)設(shè)計(jì)還是編程,都屬于計(jì)算機(jī)虛擬世界中的技術(shù)。本書將現(xiàn)實(shí)世界中的案例與虛擬世界中的技術(shù)進(jìn)行類比,幫助讀者更深入地理解相關(guān)技術(shù)。
3)關(guān)注模型的抽象。通過模型來學(xué)習(xí)相關(guān)知識(shí)對(duì)讀者很有幫助。本書不僅提出了架構(gòu)知識(shí)的模型,在講解企業(yè)架構(gòu)框架TOGAF、數(shù)字化等內(nèi)容時(shí),同樣構(gòu)建出相關(guān)的模型,以方便讀者學(xué)習(xí)。
4)關(guān)注思維的融入。思維模式與技術(shù)應(yīng)用之間的關(guān)系,就像是一座冰山的水面下和水面上的關(guān)系。我們往往只關(guān)注“水面上”的部分,而忽略了“水面下”的部分,這是不完整、不深入的。本書將重點(diǎn)介紹10種底層思維模式,希望能為架構(gòu)師提供一種打破“認(rèn)知瓶頸”的思路。
讀者對(duì)象
本書主要適合以下讀者閱讀。
1)程序員。通過本書,程序員可以學(xué)到一種成長為架構(gòu)師的認(rèn)知框架。該框架內(nèi)部已將編程和架構(gòu)關(guān)聯(lián)起來,能夠讓程序員從現(xiàn)有編程知識(shí)出發(fā),更快地掌握架構(gòu)相關(guān)知識(shí)。
2)架構(gòu)師。通過本書,架構(gòu)師可以學(xué)到一種全面認(rèn)識(shí)企業(yè)架構(gòu)的方法。
3)需求分析人員或產(chǎn)品經(jīng)理。通過本書,需求分析人員或產(chǎn)品經(jīng)理可以掌握一套需求分析和業(yè)務(wù)架構(gòu)設(shè)計(jì)的方法,建立對(duì)企業(yè)、需求和架構(gòu)的完整認(rèn)知閉環(huán)。
如何閱讀本書
本書共10章,分為3個(gè)部分。
第一部分(第1章)提出一種架構(gòu)認(rèn)知的方法論,即架構(gòu)認(rèn)知框架 = 架構(gòu)知識(shí)模型 架構(gòu)落地方法 架構(gòu)思維模式,后續(xù)章節(jié)將會(huì)圍繞此方法論展開。
第二部分(第2~4章)介紹架構(gòu)知識(shí)模型,即架構(gòu)知識(shí)模型涵蓋信息交換、架構(gòu)編排、架構(gòu)演進(jìn)。該模型將大量的架構(gòu)知識(shí)進(jìn)行分類與結(jié)構(gòu)化,同類架構(gòu)知識(shí)之間通常存在一些共性規(guī)則,可以相互借鑒。
第2章介紹信息交換,幫助讀者從全局視角厘清系統(tǒng)描述的3種維度及相應(yīng)的模型。
第3章介紹架構(gòu)編排,探討架構(gòu)編排的真正內(nèi)核,給出一種架構(gòu)設(shè)計(jì)的通用思路,即從編排維度來解決高并發(fā)、高可用等設(shè)計(jì)問題。
第4章介紹架構(gòu)演進(jìn),重點(diǎn)探討了敏捷和DevOps的關(guān)系與本質(zhì)。
第三部分(第5~10章)介紹架構(gòu)落地方法與架構(gòu)思維模式。本書提出一個(gè)標(biāo)準(zhǔn)化的端到端架構(gòu)落地方法,該方法是在RUP(統(tǒng)一軟件開發(fā)過程)、DDD和TOGAF(The Open Group開發(fā)的一種架構(gòu)框架)等各類架構(gòu)理論基礎(chǔ)上融合而成的,以幫助讀者有效應(yīng)對(duì)復(fù)雜系統(tǒng)的設(shè)計(jì)。然而在面對(duì)復(fù)雜多變的系統(tǒng)設(shè)計(jì)時(shí),架構(gòu)師所面臨的主要挑戰(zhàn)往往不只是技術(shù)層面,更多的是對(duì)業(yè)務(wù)、環(huán)境、技術(shù)、管理等整體性的認(rèn)知和把控。本部分提出的架構(gòu)思維模式旨在幫助架構(gòu)師提升認(rèn)知水平,以應(yīng)對(duì)復(fù)雜系統(tǒng)的整體性挑戰(zhàn)。
第5章重點(diǎn)介紹企業(yè)架構(gòu)框架TOGAF,并對(duì)其中的企業(yè)和企業(yè)架構(gòu)概念進(jìn)行了擴(kuò)展介紹,讓讀者站在宏觀視角看待企業(yè)架構(gòu)和實(shí)施方法。
第6章介紹需求分析階段的落地方法,讓讀者對(duì)從需求捕獲到業(yè)務(wù)架構(gòu)設(shè)計(jì)的整個(gè)流程有一個(gè)完整的認(rèn)識(shí)。
第7章詳細(xì)介紹架構(gòu)設(shè)計(jì)階段的落地方法,同時(shí)詳細(xì)介紹應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)和技術(shù)架構(gòu)的設(shè)計(jì),并深入探討了DDD的本質(zhì)、DDD與面向?qū)ο蟮年P(guān)系以及戰(zhàn)略和戰(zhàn)術(shù)設(shè)計(jì)。本章是架構(gòu)設(shè)計(jì)的核心內(nèi)容,希望讀者通過本章的學(xué)習(xí)能真正領(lǐng)會(huì)每一項(xiàng)架構(gòu)設(shè)計(jì)的核心關(guān)注點(diǎn),澄清理解上的誤區(qū),從而在實(shí)踐中自如地運(yùn)用。
第8章重點(diǎn)介紹系統(tǒng)實(shí)現(xiàn)階段的高質(zhì)量代碼標(biāo)準(zhǔn)。
第9章關(guān)注系統(tǒng)維護(hù)階段,介紹問題定位、數(shù)據(jù)分析和系統(tǒng)規(guī)模擴(kuò)張的有效應(yīng)對(duì)策略。
第10章以辯證思維的方式介紹5對(duì)底層思維模式,希望讀者能夠認(rèn)識(shí)到思維模式的重要性,并加以實(shí)踐。
靈犀
資深架構(gòu)師,擁有超過10年的架構(gòu)設(shè)計(jì)經(jīng)驗(yàn),參與了某大型銀行多個(gè)大型系統(tǒng)的設(shè)計(jì)與落地工作。對(duì)TOGAF、業(yè)務(wù)建模、中臺(tái)建設(shè)、高性能架構(gòu)、DDD,以及各種架構(gòu)設(shè)計(jì)模式、性能、穩(wěn)定性和安全等有深入的思考與實(shí)踐。
前言
第一部分 架構(gòu)認(rèn)知框架1
第1章 架構(gòu)認(rèn)知框架概述2
1.1 簡單的架構(gòu)知識(shí)模型2
1.2 架構(gòu)落地方法5
1.3 架構(gòu)思維模式8
1.4 初識(shí)架構(gòu)認(rèn)知框架10
1.5 編程和架構(gòu)的關(guān)系:從微觀到宏觀11
1.6 本章小結(jié)13
第二部分 架構(gòu)知識(shí)模型15
第2章 信息交換17
2.1 系統(tǒng)描述的3種維度17
2.2 系統(tǒng)模型的分類20
2.3 架構(gòu)落地方法中的系統(tǒng)模型21
2.4 從模型演進(jìn)看系統(tǒng)認(rèn)知方式的轉(zhuǎn)變23
2.5 本章小結(jié)27
第3章 架構(gòu)編排28
3.1 社會(huì)組織的內(nèi)核28
3.2 架構(gòu)編排的內(nèi)核31
3.3 系統(tǒng)模型的架構(gòu)編排34
3.4 高并發(fā)系統(tǒng)的架構(gòu)編排36
3.5 高可用系統(tǒng)的架構(gòu)編排39
3.6 本章小結(jié)42
第4章 架構(gòu)演進(jìn)43
4.1 敏捷的本質(zhì)43
4.2 DevOps的本質(zhì)48
4.3 敏捷和DevOps的關(guān)系50
4.4 可演進(jìn)系統(tǒng)的架構(gòu)編排51
4.5 本章小結(jié)54
第三部分 架構(gòu)落地方法與架構(gòu)思維模式55
第5章 預(yù)備知識(shí)57
5.1 架構(gòu)落地方法57
5.1.1 需求分析57
5.1.2 架構(gòu)設(shè)計(jì)59
5.1.3 系統(tǒng)實(shí)現(xiàn)60
5.1.4 系統(tǒng)維護(hù)60
5.2 企業(yè)架構(gòu)框架TOGAF61
5.2.1 TOGAF標(biāo)準(zhǔn)結(jié)構(gòu)61
5.2.2 TOGAF的雙飛輪模型65
5.2.3 TOGAF的核心思想67
5.2.4 TOGAF標(biāo)準(zhǔn)存在的主要問題69
5.3 理解企業(yè)和企業(yè)架構(gòu)69
5.3.1 企業(yè)是什么69
5.3.2 一個(gè)用于理解企業(yè)的模型71
5.3.3 企業(yè)架構(gòu)的本質(zhì)及作用72
5.3.4 企業(yè)與企業(yè)架構(gòu)的關(guān)系 72
5.4 本章小結(jié)73
第6章 需求分析74
6.1 需求捕獲74
6.1.1 明確系統(tǒng)業(yè)務(wù)目標(biāo)74
6.1.2 識(shí)別系統(tǒng)分類75
6.1.3 分析需求組成76
6.1.4 捕獲利益攸關(guān)者需求78
6.1.5 劃分需求優(yōu)先級(jí)78
6.1.6 區(qū)分變與不變的需求79
6.1.7 輸出需求說明書80
6.2 業(yè)務(wù)架構(gòu)設(shè)計(jì)81
6.2.1 業(yè)務(wù)架構(gòu)的前置步驟81
6.2.2 業(yè)務(wù)架構(gòu)是什么82
6.2.3 業(yè)務(wù)架構(gòu)的核心關(guān)注點(diǎn)84
6.2.4 業(yè)務(wù)架構(gòu)的理解誤區(qū)85
6.2.5 業(yè)務(wù)架構(gòu)的設(shè)計(jì)方法86
6.3 本章小結(jié)90
第7章 架構(gòu)設(shè)計(jì)91
7.1 應(yīng)用架構(gòu)設(shè)計(jì)91
7.1.1 應(yīng)用架構(gòu)的核心關(guān)注點(diǎn)92
7.1.2 應(yīng)用拆分和整合的思路93
7.1.3 應(yīng)用架構(gòu)的理解誤區(qū)95
7.1.4 應(yīng)用架構(gòu)的設(shè)計(jì)方法95
7.2 數(shù)據(jù)架構(gòu)設(shè)計(jì)98
7.2.1 數(shù)據(jù)架構(gòu)是什么98
7.2.2 數(shù)據(jù)架構(gòu)的核心關(guān)注點(diǎn)99
7.2.3 數(shù)據(jù)架構(gòu)的理解誤區(qū)100
7.2.4 數(shù)據(jù)架構(gòu)的設(shè)計(jì)方法101
7.3 技術(shù)架構(gòu)設(shè)計(jì)105
7.3.1 技術(shù)架構(gòu)是什么105
7.3.2 技術(shù)架構(gòu)的核心關(guān)注點(diǎn)108
7.3.3 技術(shù)架構(gòu)的理解誤區(qū)109
7.3.4 技術(shù)架構(gòu)的設(shè)計(jì)方法110
7.4 DDD設(shè)計(jì)112
7.4.1 DDD與面向?qū)ο蟮年P(guān)系112
7.4.2 DDD的本質(zhì)115
7.4.3 DDD方法存在的不足115
7.4.4 DDD戰(zhàn)略設(shè)計(jì):領(lǐng)域和微服務(wù)如何劃分116
7.4.5 DDD戰(zhàn)術(shù)設(shè)計(jì):創(chuàng)新還是新瓶裝舊酒120
7.5 架構(gòu)設(shè)計(jì)的最后一站121
7.5.1 不忘初心,與業(yè)務(wù)目標(biāo)對(duì)齊121
7.5.2 能力和目標(biāo)匹配122
7.5.3 平衡的重要性123
7.5.4 短期利益與長期利益的抉擇124
7.5.5 架構(gòu)的可追溯性125
7.5.6 簡化設(shè)計(jì):只進(jìn)行最低限度的設(shè)計(jì)126
7.6 本章小結(jié)127
第8章 系統(tǒng)實(shí)現(xiàn)128
8.1 分離性128
8.1.1 分離性是什么129
8.1.2 代碼中的分離性130
8.1.3 分離性的落地實(shí)踐135
8.2 復(fù)用性135
8.2.1 復(fù)用性是什么135
8.2.2 從程序員角度看復(fù)用的層次136
8.2.3 復(fù)用是銀彈嗎138
8.2.4 中臺(tái)的難點(diǎn)139
8.3 防御性140
8.3.1 防御性是什么140
8.3.2 沖突發(fā)生的地方:邊界140
8.3.3 防御性編程的思路141
8.4 一致性143
8.4.1 一致性是什么143
8.4.2 代碼中的一致性145
8.4.3 降低一致性成本的思路147
8.5 本章小結(jié)149
第9章 系統(tǒng)維護(hù)150
9.1 如何從根本上定位問題150
9.1.1 一種系統(tǒng)思考的方式151
9.1.2 觀察系統(tǒng)的3個(gè)層次152
9.1.3 定位問題的三步法154
9.2 如何從數(shù)據(jù)中找到規(guī)律156
9.2.1 統(tǒng)計(jì)學(xué)的兩條知名曲線156
9.2.2 曲線背后的規(guī)則157
9.2.3 曲線在實(shí)踐中的運(yùn)用157
9.3 如何維持系統(tǒng)的規(guī)模擴(kuò)張159
9.3.1 軟件系統(tǒng)也逃不脫的熵增定律159
9.3.2 軟件系統(tǒng)如何對(duì)抗熵增160
9.3.3 為什么說熵減是積分過程161
9.4 本章小結(jié)163
第10章 底層思維模式164
10.1 還原與整體164
10.1.1 整體是局部的總和嗎165
10.1.2 還原論在編程和架構(gòu)中的應(yīng)用165
10.1.3 整體論在編程與架構(gòu)中的應(yīng)用167
10.1.4 還原論和整體論的關(guān)注點(diǎn)169
10.2 降維與升維172
10.2.1 通過現(xiàn)實(shí)案例理解降維和升維的含義173
10.2.2 降維思維在編程和架構(gòu)中的應(yīng)用174