架構(gòu)基礎(chǔ):
介紹架構(gòu)設(shè)計的本質(zhì)、歷史背景和目的,然后從復(fù)雜度來源以及架構(gòu)設(shè)計的原則和流程來詳細介紹架構(gòu)基礎(chǔ)。
-
架構(gòu)定義:三大易混淆核心概念
-
系統(tǒng)與子系統(tǒng):
系統(tǒng)泛指由一群有關(guān)聯(lián)的個體組成,根據(jù)某種規(guī)則運作,能完成個別元件不能單獨完成的工作的群體。
它的意思是“總體”“整體”或“聯(lián)盟”。
-
模塊與組件:
模塊:業(yè)務(wù)邏輯角度拆分
組件:物理部署角度拆分
-
框架與架構(gòu):
框架(Framework):軟件框架(Software framework)通常指的是為了實現(xiàn)某個業(yè)界標準或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實現(xiàn)某個軟件組件規(guī)范時,提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。例如mvc, mvvm,
-
架構(gòu)(Architecture):軟件架構(gòu)指軟件系統(tǒng)的“基礎(chǔ)結(jié)構(gòu)”,創(chuàng)造這些基礎(chǔ)結(jié)構(gòu)的準則,以及對這些結(jié)構(gòu)的描述。
4+1視圖:場景視圖(用例圖,需求)、邏輯視圖(類圖)、物理視圖(物理架構(gòu)圖)、處理流程視圖(流程圖,時序圖)和開發(fā)視圖(e.g. MVC, MVVM, MVP) https://zhuanlan.zhihu.com/p/352590602
4R定義架構(gòu):軟件架構(gòu)指軟件系統(tǒng)的頂層(Rank)結(jié)構(gòu),它定義了系統(tǒng)由哪些角色(Role)組成,角色之間的關(guān)系(Relation)和運作規(guī)則(Rule)
Rank、Role 和 Relation 是通過系統(tǒng)架構(gòu)圖來展示的。
Rule 是通過系統(tǒng)序列圖(System Sequence Diagram)來展示的。
-
-
架構(gòu)設(shè)計的歷史背景
機器語言 -> 匯編語言 -> 高級語言 -> 第一次軟件危機與結(jié)構(gòu)化程序設(shè)計 -> 第二次軟件危機與面向?qū)ο?/p>
-
架構(gòu)設(shè)計目的
-
遵循這條準則能夠讓“新手”架構(gòu)師心中有數(shù),而不是一頭霧水。
架構(gòu)也是為了應(yīng)對軟件系統(tǒng)復(fù)雜度而提出的一個解決方案,通過回顧架構(gòu)產(chǎn)生的歷史背景和原因,我們可以基本推導(dǎo)出答案:架構(gòu)設(shè)計的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題。
-
從哪里開始下手進行架構(gòu)設(shè)計呢?
通過熟悉和理解需求,識別系統(tǒng)復(fù)雜性所在的地方,然后針對這些復(fù)雜點進行架構(gòu)設(shè)計。
-
識別核心特點不需要面面俱到
而是要識別出復(fù)雜點然后有針對性地解決問題。
-
A & B該選哪一個?
理解每個架構(gòu)方案背后所需要解決的復(fù)雜點,然后才能對比自己的業(yè)務(wù)復(fù)雜點,參考復(fù)雜點相似的方案。
-
實例:學(xué)生管理系統(tǒng),復(fù)雜性分析
從性能, 可擴展性, 高可用,安全性,成本幾方面分析
-
-
復(fù)雜度來源----高性能
多臺計算機集群為了高性能帶來的復(fù)雜度, 而計算機內(nèi)部復(fù)雜度最關(guān)鍵的地方就是操作系統(tǒng)。
實現(xiàn)高性能方式:
-
任務(wù)分配,增加機器,實際性能為理論性能8折,首先增加硬件數(shù)量,未達到預(yù)期的性能提升。
常用任務(wù)分配器有DNS 輪詢、智能 DNS、CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò)),GSLB 設(shè)備(全局負載均衡)
-
任務(wù)分解, 提升性能的幾大因素:
簡單的系統(tǒng)更加容易做到高性能。
可以針對單個任務(wù)進行擴展。
要把握粒度,適當拆分,否則增加系統(tǒng)調(diào)用復(fù)雜度
-
-
復(fù)雜度來源----高可用
本質(zhì)通過“冗余”實現(xiàn), 數(shù)據(jù) + 邏輯 = 業(yè)務(wù)
計算高可用,任務(wù)分配器有主備,主主。
存儲高可用,難點不在于如何備份數(shù)據(jù),而在于如何減少或者規(guī)避數(shù)據(jù)不一致對業(yè)務(wù)造成的影響。
-
高可用狀態(tài)決策
常見決策方式:獨裁式, 協(xié)商式主備決策(通訊中斷,主備無法知道對方狀態(tài),可增加2,3連接),民主式(有腦裂問題)
-
復(fù)雜度來源----可擴展性
可擴展性的系統(tǒng),有兩個基本條件:正確預(yù)測變化和完美應(yīng)對變化。
-
預(yù)測變化:
復(fù)雜性:不能每個都可擴展,不能不擴展,預(yù)測有錯誤
心法:只預(yù)測 2 年內(nèi)的可能變化,不要試圖預(yù)測 5 年甚至 10 年后的變化。
-
應(yīng)對變化:
方案一:提煉出“變化層”和“穩(wěn)定層”,核心思想是通過變化層來隔離變化。
方案二:提煉出“抽象層”和“實現(xiàn)層”,核心思想是通過實現(xiàn)層來封裝變化。典型的實踐就是設(shè)計模式和規(guī)則引擎
方法論:Rule of three,Three Strikes And You Refactor,事不過三,過三重構(gòu),1 寫 2 抄 3 重構(gòu)。即相同的業(yè)務(wù)需求出現(xiàn)三次及以上則考慮重構(gòu)。
-
-
復(fù)雜度來源----低成本、安全、規(guī)模
低成本:架構(gòu)設(shè)計的附加約束。復(fù)雜度體現(xiàn)在,往往只有“創(chuàng)新”才能達到低成本目標。
-
安全:分兩類,功能上的安全 和 架構(gòu)上的安全。
功能安全:XSS 攻擊、CSRF 攻擊、SQL 注入、Windows 漏洞、密碼破解等
架構(gòu)安全:防火墻
-
規(guī)模:主要原因就是“量變引起質(zhì)變”
- 功能增加:復(fù)雜度計算公式:系統(tǒng)的復(fù)雜度 = 功能數(shù)量 + 功能之間的連接數(shù)量<V (G)=e-n+2>
- 數(shù)據(jù)增加:mysql 推薦5000W行
-
架構(gòu)設(shè)計三原則:合適原則、簡單原則、演化原則
-
合適原則:合適優(yōu)于業(yè)界領(lǐng)先。
失敗1:沒那么多人,卻想干那么多活,是失敗的第一個主要原因。
失敗2:沒有那么多積累,卻想一步登天,是失敗的第二個主要原因。
-
失敗3:沒有那么卓越的業(yè)務(wù)場景,卻幻想靈光一閃成為天才,是失敗的第三個主要原因。
總結(jié):真正優(yōu)秀的架構(gòu)都是在企業(yè)當前人力、條件、業(yè)務(wù)等各種約束下設(shè)計出來的,能夠合理地將資源整合在一起并發(fā)揮出最大功效,并且能夠快速落地
-
簡單原則:簡單優(yōu)于復(fù)雜?!禪NIX編程》KISS原則(Keep It Simple, Stupid!)
軟件領(lǐng)域復(fù)雜性:結(jié)構(gòu)的復(fù)雜性、邏輯的復(fù)雜性,需求的變更是復(fù)雜性的根本原因
-
演化原則:
根據(jù)業(yè)務(wù)發(fā)展不斷變化這個本質(zhì)特點,軟件架構(gòu)設(shè)計其實更加類似于大自然“設(shè)計”一個生物,通過演化讓生物適應(yīng)環(huán)境,逐步變得更加強大。
軟件架構(gòu)設(shè)計同樣是類似的過程:
- 首先,設(shè)計出來的架構(gòu)要滿足當時的業(yè)務(wù)需要。
- 其次,架構(gòu)要不斷地在實際應(yīng)用過程中迭代,保留優(yōu)秀的設(shè)計,修復(fù)有缺陷的設(shè)計,改正錯誤的設(shè)計,去掉無用的設(shè)計,使得架構(gòu)逐漸完善。
- 第三,當業(yè)務(wù)發(fā)生變化時,架構(gòu)要擴展、重構(gòu),甚至重寫;代碼也許會重寫,但有價值的經(jīng)驗、教訓(xùn)、邏輯、設(shè)計等(類似生物體內(nèi)的基因)卻可以在新架構(gòu)中延續(xù)。
-
架構(gòu)設(shè)計原則案例:
-
架構(gòu)設(shè)計流程:第一步,識別復(fù)雜度
場景:實際上大部分場景下,復(fù)雜度只是其中的某一個,少數(shù)情況下包含其中兩個,如果真的出現(xiàn)同時需要解決三個或者三個以上的復(fù)雜度,要么說明這個系統(tǒng)之前設(shè)計的有問題,要么可能就是架構(gòu)師的判斷出現(xiàn)了失誤,即使真的認為要同時滿足這三方面的要求,也必須要進行優(yōu)先級排序。
正確的做法是將主要的復(fù)雜度問題列出來,然后根據(jù)業(yè)務(wù)、技術(shù)、團隊等綜合情況進行排序,優(yōu)先解決當前面臨的最主要的復(fù)雜度問題
TPS、QPS,指標峰值2~8倍
-
架構(gòu)設(shè)計流程:第二步,設(shè)計備選方案
成熟的架構(gòu)師需要對已經(jīng)存在的技術(shù)非常熟悉,
對已經(jīng)經(jīng)過驗證的架構(gòu)模式爛熟于心,
然后根據(jù)自己對業(yè)務(wù)的理解,
挑選合適的架構(gòu)模式進行組合,
再對組合后的方案進行修改和調(diào)整。
第一種常見的錯誤:設(shè)計最優(yōu)秀的方案。
-
第二種常見的錯誤:只做一個方案。
備選方案的數(shù)量以 3 ~ 5 個為最佳。
備選方案的差異要比較明顯。
備選方案的技術(shù)不要只局限于已經(jīng)熟悉的技術(shù)。
-
第三種常見的錯誤:備選方案過于詳細。
做法是備選階段關(guān)注的是技術(shù)選型,而不是技術(shù)細節(jié),技術(shù)選型的差異要比較明顯。
-
架構(gòu)設(shè)計流程:第三步,評估和選擇備選方案
幾種指導(dǎo)思想:最簡派、最牛派、最熟派、領(lǐng)導(dǎo)派
方法論:“360 度環(huán)評表”!具體的操作方式為:列出我們需要關(guān)注的質(zhì)量屬性點,然后分別從這些質(zhì)量屬性的維度去評估每個方案,再綜合挑選適合當時情況的最優(yōu)方案。選擇方式為按優(yōu)先級選擇
常見的方案質(zhì)量屬性點有:性能、可用性、硬件成本、項目投入、復(fù)雜度、安全性、可擴展性等。
質(zhì)量屬性資源評估和未來業(yè)務(wù)發(fā)展關(guān)系 = 當前的業(yè)務(wù)規(guī)模 * (2 or 4)
-
架構(gòu)設(shè)計流程: 第四步,詳細方案設(shè)計
-
方法論:
- 架構(gòu)師不但要進行備選方案設(shè)計和選型,還需要對備選方案的關(guān)鍵細節(jié)有較深入的理解。
- 通過分步驟、分階段、分系統(tǒng)等方式,盡量降低方案復(fù)雜度
-
可能產(chǎn)生的問題:
詳細設(shè)計方案階段可能遇到的一種極端情況就是在詳細設(shè)計階段發(fā)現(xiàn)備選方案不可行,一般情況下主要的原因是備選方案設(shè)計時遺漏了某個關(guān)鍵技術(shù)點或者關(guān)鍵的質(zhì)量屬性。
-