軟件架構(gòu)師之基礎(chǔ)理論

架構(gòu)基礎(chǔ):

  1. 介紹架構(gòu)設(shè)計(jì)的本質(zhì)哆料、歷史背景和目的趣效,然后從復(fù)雜度來(lái)源以及架構(gòu)設(shè)計(jì)的原則和流程來(lái)詳細(xì)介紹架構(gòu)基礎(chǔ)嗜湃。

  2. 架構(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)展示的谅畅。

  3. 架構(gòu)設(shè)計(jì)的歷史背景

    機(jī)器語(yǔ)言 -> 匯編語(yǔ)言 -> 高級(jí)語(yǔ)言 -> 第一次軟件危機(jī)與結(jié)構(gòu)化程序設(shè)計(jì) -> 第二次軟件危機(jī)與面向?qū)ο?/p>

  4. 架構(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ò)展性, 高可用搪搏,安全性狭握,成本幾方面分析

  5. 復(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ù)雜度

  6. 復(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)。

  7. 復(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行
  8. 架構(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ù)捂蕴。
  9. 架構(gòu)設(shè)計(jì)原則案例:

  1. 架構(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倍

  2. 架構(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ù)選型的差異要比較明顯捐晶。

  3. 架構(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)

  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ì)量屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荔泳,一起剝皮案震驚了整個(gè)濱河市蕉饼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玛歌,老刑警劉巖昧港,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異支子,居然都是意外死亡创肥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門译荞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓤的,“玉大人,你說(shuō)我怎么就攤上這事吞歼∪Ω啵” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵篙骡,是天一觀的道長(zhǎng)稽坤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)糯俗,這世上最難降的妖魔是什么尿褪? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮得湘,結(jié)果婚禮上杖玲,老公的妹妹穿的比我還像新娘。我一直安慰自己淘正,他們只是感情好摆马,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸿吆,像睡著了一般囤采。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惩淳,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天蕉毯,我揣著相機(jī)與錄音,去河邊找鬼。 笑死代虾,一個(gè)胖子當(dāng)著我的面吹牛进肯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棉磨,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼坷澡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了含蓉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤项郊,失蹤者是張志新(化名)和其女友劉穎馅扣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着降,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡差油,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了任洞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓄喇。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖交掏,靈堂內(nèi)的尸體忽然破棺而出妆偏,到底是詐尸還是另有隱情,我是刑警寧澤盅弛,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布钱骂,位于F島的核電站,受9級(jí)特大地震影響挪鹏,放射性物質(zhì)發(fā)生泄漏见秽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一讨盒、第九天 我趴在偏房一處隱蔽的房頂上張望解取。 院中可真熱鬧,春花似錦返顺、人聲如沸禀苦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伦忠。三九已至,卻和暖如春稿辙,著一層夾襖步出監(jiān)牢的瞬間昆码,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赋咽,地道東北人旧噪。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脓匿,于是被迫代替她去往敵國(guó)和親淘钟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容