架構(gòu)基礎(chǔ):
介紹架構(gòu)設(shè)計(jì)的本質(zhì)哆料、歷史背景和目的趣效,然后從復(fù)雜度來(lái)源以及架構(gòu)設(shè)計(jì)的原則和流程來(lái)詳細(xì)介紹架構(gòu)基礎(chǔ)嗜湃。
-
架構(gòu)定義:三大易混淆核心概念
-
系統(tǒng)與子系統(tǒng):
系統(tǒng)泛指由一群有關(guān)聯(lián)的個(gè)體組成邑雅,根據(jù)某種規(guī)則運(yùn)作硬梁,能完成個(gè)別元件不能單獨(dú)完成的工作的群體。
它的意思是“總體”“整體”或“聯(lián)盟”临梗。
-
模塊與組件:
模塊:業(yè)務(wù)邏輯角度拆分
組件:物理部署角度拆分
-
框架與架構(gòu):
框架(Framework):軟件框架(Software framework)通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范涡扼,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品盟庞。例如mvc, mvvm,
-
架構(gòu)(Architecture):軟件架構(gòu)指軟件系統(tǒng)的“基礎(chǔ)結(jié)構(gòu)”吃沪,創(chuàng)造這些基礎(chǔ)結(jié)構(gòu)的準(zhǔn)則,以及對(duì)這些結(jié)構(gòu)的描述什猖。
4+1視圖:場(chǎng)景視圖(用例圖票彪,需求)、邏輯視圖(類圖)不狮、物理視圖(物理架構(gòu)圖)降铸、處理流程視圖(流程圖,時(shí)序圖)和開發(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)和運(yùn)作規(guī)則(Rule)
Rank、Role 和 Relation 是通過(guò)系統(tǒng)架構(gòu)圖來(lái)展示的驻仅。
Rule 是通過(guò)系統(tǒng)序列圖(System Sequence Diagram)來(lái)展示的谅畅。
-
-
架構(gòu)設(shè)計(jì)的歷史背景
機(jī)器語(yǔ)言 -> 匯編語(yǔ)言 -> 高級(jí)語(yǔ)言 -> 第一次軟件危機(jī)與結(jié)構(gòu)化程序設(shè)計(jì) -> 第二次軟件危機(jī)與面向?qū)ο?/p>
-
架構(gòu)設(shè)計(jì)目的
-
遵循這條準(zhǔn)則能夠讓“新手”架構(gòu)師心中有數(shù),而不是一頭霧水噪服。
架構(gòu)也是為了應(yīng)對(duì)軟件系統(tǒng)復(fù)雜度而提出的一個(gè)解決方案毡泻,通過(guò)回顧架構(gòu)產(chǎn)生的歷史背景和原因,我們可以基本推導(dǎo)出答案:架構(gòu)設(shè)計(jì)的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來(lái)的問(wèn)題粘优。
-
從哪里開始下手進(jìn)行架構(gòu)設(shè)計(jì)呢仇味?
通過(guò)熟悉和理解需求呻顽,識(shí)別系統(tǒng)復(fù)雜性所在的地方,然后針對(duì)這些復(fù)雜點(diǎn)進(jìn)行架構(gòu)設(shè)計(jì)邪铲。
-
識(shí)別核心特點(diǎn)不需要面面俱到
而是要識(shí)別出復(fù)雜點(diǎn)然后有針對(duì)性地解決問(wèn)題芬位。
-
A & B該選哪一個(gè)?
理解每個(gè)架構(gòu)方案背后所需要解決的復(fù)雜點(diǎn)带到,然后才能對(duì)比自己的業(yè)務(wù)復(fù)雜點(diǎn)昧碉,參考復(fù)雜點(diǎn)相似的方案。
-
實(shí)例:學(xué)生管理系統(tǒng)揽惹,復(fù)雜性分析
從性能被饿, 可擴(kuò)展性, 高可用搪搏,安全性狭握,成本幾方面分析
-
-
復(fù)雜度來(lái)源----高性能
多臺(tái)計(jì)算機(jī)集群為了高性能帶來(lái)的復(fù)雜度, 而計(jì)算機(jī)內(nèi)部復(fù)雜度最關(guān)鍵的地方就是操作系統(tǒng)疯溺。
實(shí)現(xiàn)高性能方式:
-
任務(wù)分配论颅,增加機(jī)器,實(shí)際性能為理論性能8折囱嫩,首先增加硬件數(shù)量恃疯,未達(dá)到預(yù)期的性能提升。
常用任務(wù)分配器有DNS 輪詢墨闲、智能 DNS今妄、CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))鸳碧,GSLB 設(shè)備(全局負(fù)載均衡)
-
任務(wù)分解盾鳞, 提升性能的幾大因素:
簡(jiǎn)單的系統(tǒng)更加容易做到高性能。
可以針對(duì)單個(gè)任務(wù)進(jìn)行擴(kuò)展瞻离。
要把握粒度腾仅,適當(dāng)拆分,否則增加系統(tǒng)調(diào)用復(fù)雜度
-
-
復(fù)雜度來(lái)源----高可用
本質(zhì)通過(guò)“冗余”實(shí)現(xiàn)套利, 數(shù)據(jù) + 邏輯 = 業(yè)務(wù)
計(jì)算高可用攒砖,任務(wù)分配器有主備,主主日裙。
存儲(chǔ)高可用,難點(diǎn)不在于如何備份數(shù)據(jù)惰蜜,而在于如何減少或者規(guī)避數(shù)據(jù)不一致對(duì)業(yè)務(wù)造成的影響昂拂。
-
高可用狀態(tài)決策
常見決策方式:獨(dú)裁式, 協(xié)商式主備決策(通訊中斷抛猖,主備無(wú)法知道對(duì)方狀態(tài)格侯,可增加2,3連接)鼻听,民主式(有腦裂問(wèn)題)
-
復(fù)雜度來(lái)源----可擴(kuò)展性
可擴(kuò)展性的系統(tǒng),有兩個(gè)基本條件:正確預(yù)測(cè)變化和完美應(yīng)對(duì)變化联四。
-
預(yù)測(cè)變化:
復(fù)雜性:不能每個(gè)都可擴(kuò)展撑碴,不能不擴(kuò)展,預(yù)測(cè)有錯(cuò)誤
心法:只預(yù)測(cè) 2 年內(nèi)的可能變化朝墩,不要試圖預(yù)測(cè) 5 年甚至 10 年后的變化醉拓。
-
應(yīng)對(duì)變化:
方案一:提煉出“變化層”和“穩(wěn)定層”,核心思想是通過(guò)變化層來(lái)隔離變化收苏。
方案二:提煉出“抽象層”和“實(shí)現(xiàn)層”亿卤,核心思想是通過(guò)實(shí)現(xiàn)層來(lái)封裝變化。典型的實(shí)踐就是設(shè)計(jì)模式和規(guī)則引擎
方法論:Rule of three鹿霸,Three Strikes And You Refactor排吴,事不過(guò)三,過(guò)三重構(gòu)懦鼠,1 寫 2 抄 3 重構(gòu)钻哩。即相同的業(yè)務(wù)需求出現(xiàn)三次及以上則考慮重構(gòu)。
-
-
復(fù)雜度來(lái)源----低成本肛冶、安全街氢、規(guī)模
低成本:架構(gòu)設(shè)計(jì)的附加約束。復(fù)雜度體現(xiàn)在淑趾,往往只有“創(chuàng)新”才能達(dá)到低成本目標(biāo)阳仔。
-
安全:分兩類,功能上的安全 和 架構(gòu)上的安全扣泊。
功能安全:XSS 攻擊近范、CSRF 攻擊、SQL 注入延蟹、Windows 漏洞评矩、密碼破解等
架構(gòu)安全:防火墻
-
規(guī)模:主要原因就是“量變引起質(zhì)變”
- 功能增加:復(fù)雜度計(jì)算公式:系統(tǒng)的復(fù)雜度 = 功能數(shù)量 + 功能之間的連接數(shù)量<V (G)=e-n+2>
- 數(shù)據(jù)增加:mysql 推薦5000W行
-
架構(gòu)設(shè)計(jì)三原則:合適原則、簡(jiǎn)單原則阱飘、演化原則
-
合適原則:合適優(yōu)于業(yè)界領(lǐng)先斥杜。
失敗1:沒(méi)那么多人,卻想干那么多活沥匈,是失敗的第一個(gè)主要原因蔗喂。
失敗2:沒(méi)有那么多積累,卻想一步登天高帖,是失敗的第二個(gè)主要原因缰儿。
-
失敗3:沒(méi)有那么卓越的業(yè)務(wù)場(chǎng)景,卻幻想靈光一閃成為天才散址,是失敗的第三個(gè)主要原因乖阵。
總結(jié):真正優(yōu)秀的架構(gòu)都是在企業(yè)當(dāng)前人力宣赔、條件、業(yè)務(wù)等各種約束下設(shè)計(jì)出來(lái)的瞪浸,能夠合理地將資源整合在一起并發(fā)揮出最大功效儒将,并且能夠快速落地
-
簡(jiǎn)單原則:簡(jiǎn)單優(yōu)于復(fù)雜《云眩《UNIX編程》KISS原則(Keep It Simple, Stupid!)
軟件領(lǐng)域復(fù)雜性:結(jié)構(gòu)的復(fù)雜性钩蚊、邏輯的復(fù)雜性,需求的變更是復(fù)雜性的根本原因
-
演化原則:
根據(jù)業(yè)務(wù)發(fā)展不斷變化這個(gè)本質(zhì)特點(diǎn)齐蔽,軟件架構(gòu)設(shè)計(jì)其實(shí)更加類似于大自然“設(shè)計(jì)”一個(gè)生物两疚,通過(guò)演化讓生物適應(yīng)環(huán)境,逐步變得更加強(qiáng)大含滴。
軟件架構(gòu)設(shè)計(jì)同樣是類似的過(guò)程:
- 首先诱渤,設(shè)計(jì)出來(lái)的架構(gòu)要滿足當(dāng)時(shí)的業(yè)務(wù)需要。
- 其次谈况,架構(gòu)要不斷地在實(shí)際應(yīng)用過(guò)程中迭代勺美,保留優(yōu)秀的設(shè)計(jì),修復(fù)有缺陷的設(shè)計(jì)碑韵,改正錯(cuò)誤的設(shè)計(jì)赡茸,去掉無(wú)用的設(shè)計(jì),使得架構(gòu)逐漸完善祝闻。
- 第三占卧,當(dāng)業(yè)務(wù)發(fā)生變化時(shí),架構(gòu)要擴(kuò)展联喘、重構(gòu)华蜒,甚至重寫;代碼也許會(huì)重寫豁遭,但有價(jià)值的經(jīng)驗(yàn)叭喜、教訓(xùn)、邏輯蓖谢、設(shè)計(jì)等(類似生物體內(nèi)的基因)卻可以在新架構(gòu)中延續(xù)捂蕴。
-
架構(gòu)設(shè)計(jì)原則案例:
-
架構(gòu)設(shè)計(jì)流程:第一步,識(shí)別復(fù)雜度
場(chǎng)景:實(shí)際上大部分場(chǎng)景下闪幽,復(fù)雜度只是其中的某一個(gè)啥辨,少數(shù)情況下包含其中兩個(gè),如果真的出現(xiàn)同時(shí)需要解決三個(gè)或者三個(gè)以上的復(fù)雜度盯腌,要么說(shuō)明這個(gè)系統(tǒng)之前設(shè)計(jì)的有問(wèn)題溉知,要么可能就是架構(gòu)師的判斷出現(xiàn)了失誤,即使真的認(rèn)為要同時(shí)滿足這三方面的要求,也必須要進(jìn)行優(yōu)先級(jí)排序着倾。
正確的做法是將主要的復(fù)雜度問(wèn)題列出來(lái),然后根據(jù)業(yè)務(wù)燕少、技術(shù)卡者、團(tuán)隊(duì)等綜合情況進(jìn)行排序,優(yōu)先解決當(dāng)前面臨的最主要的復(fù)雜度問(wèn)題
TPS客们、QPS崇决,指標(biāo)峰值2~8倍
-
架構(gòu)設(shè)計(jì)流程:第二步,設(shè)計(jì)備選方案
成熟的架構(gòu)師需要對(duì)已經(jīng)存在的技術(shù)非常熟悉底挫,
對(duì)已經(jīng)經(jīng)過(guò)驗(yàn)證的架構(gòu)模式爛熟于心恒傻,
然后根據(jù)自己對(duì)業(yè)務(wù)的理解,
挑選合適的架構(gòu)模式進(jìn)行組合建邓,
再對(duì)組合后的方案進(jìn)行修改和調(diào)整盈厘。
第一種常見的錯(cuò)誤:設(shè)計(jì)最優(yōu)秀的方案。
-
第二種常見的錯(cuò)誤:只做一個(gè)方案官边。
備選方案的數(shù)量以 3 ~ 5 個(gè)為最佳沸手。
備選方案的差異要比較明顯。
備選方案的技術(shù)不要只局限于已經(jīng)熟悉的技術(shù)注簿。
-
第三種常見的錯(cuò)誤:備選方案過(guò)于詳細(xì)契吉。
做法是備選階段關(guān)注的是技術(shù)選型,而不是技術(shù)細(xì)節(jié)诡渴,技術(shù)選型的差異要比較明顯捐晶。
-
架構(gòu)設(shè)計(jì)流程:第三步,評(píng)估和選擇備選方案
幾種指導(dǎo)思想:最簡(jiǎn)派妄辩、最牛派惑灵、最熟派、領(lǐng)導(dǎo)派
方法論:“360 度環(huán)評(píng)表”恩袱!具體的操作方式為:列出我們需要關(guān)注的質(zhì)量屬性點(diǎn)泣棋,然后分別從這些質(zhì)量屬性的維度去評(píng)估每個(gè)方案,再綜合挑選適合當(dāng)時(shí)情況的最優(yōu)方案畔塔。選擇方式為按優(yōu)先級(jí)選擇
常見的方案質(zhì)量屬性點(diǎn)有:性能潭辈、可用性、硬件成本澈吨、項(xiàng)目投入把敢、復(fù)雜度、安全性谅辣、可擴(kuò)展性等修赞。
質(zhì)量屬性資源評(píng)估和未來(lái)業(yè)務(wù)發(fā)展關(guān)系 = 當(dāng)前的業(yè)務(wù)規(guī)模 * (2 or 4)
-
架構(gòu)設(shè)計(jì)流程: 第四步,詳細(xì)方案設(shè)計(jì)
-
方法論:
- 架構(gòu)師不但要進(jìn)行備選方案設(shè)計(jì)和選型,還需要對(duì)備選方案的關(guān)鍵細(xì)節(jié)有較深入的理解柏副。
- 通過(guò)分步驟勾邦、分階段、分系統(tǒng)等方式割择,盡量降低方案復(fù)雜度
-
可能產(chǎn)生的問(wèn)題:
詳細(xì)設(shè)計(jì)方案階段可能遇到的一種極端情況就是在詳細(xì)設(shè)計(jì)階段發(fā)現(xiàn)備選方案不可行眷篇,一般情況下主要的原因是備選方案設(shè)計(jì)時(shí)遺漏了某個(gè)關(guān)鍵技術(shù)點(diǎn)或者關(guān)鍵的質(zhì)量屬性。
-