日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

架構(gòu)定義

什么是架構(gòu)

一直以來,在軟件行業(yè),對(duì)于什么是架構(gòu),都有很多的爭論,每個(gè)人都有自己的理解。為了準(zhǔn)確的理解架構(gòu),我們將和架構(gòu)有關(guān)系而且相似的幾個(gè)概念進(jìn)行梳理:

系統(tǒng)(system):泛指由一群有關(guān)聯(lián)的個(gè)體組成,根據(jù)某種規(guī)則運(yùn)作,能完成個(gè)別元件不能單獨(dú)完成的工作的群體。系統(tǒng)分為自然系統(tǒng)與人為系統(tǒng)兩大類。

模塊(Module):是一套一致而互相有緊密關(guān)連的軟件組織。它分別包含了程序和數(shù)據(jù)結(jié)構(gòu)兩部分。

組件(Component):自包含的、可編程的、可重用的、與語言無關(guān)的軟件單元,軟件組件可以很容易被用于組裝應(yīng)用程序中。

軟件框架(Software Framework),通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí),提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。

維基百科對(duì)于軟件架構(gòu)的定義:軟件架構(gòu)( Software Architecture)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。

我比較認(rèn)可的軟件架構(gòu)定義如下:軟件架構(gòu)定義了軟件有哪些組件,模塊,框架組成,以及他們是怎么交互了連通,體現(xiàn)了軟件的其他非功能特性,例如擴(kuò)展性,可維護(hù)性。

架構(gòu)目的

從這個(gè)定義上看,也不是很清晰。為了講清楚這個(gè)問題,我們先來看看為什么會(huì)產(chǎn)生架構(gòu)。從軟件開發(fā)進(jìn)化的歷史,探索一下軟件架構(gòu)出現(xiàn)的歷史背景。

機(jī)器語言(1940 年之前):直接使用二進(jìn)制碼 0 和 1 來表示機(jī)器可以識(shí)別的指令和數(shù)據(jù),主要問題是三難:太難寫、太難讀、太難改!

匯編語言(20 世紀(jì) 40 年代):為了解決機(jī)器語言編寫、閱讀、修改復(fù)雜的問題,匯編語言應(yīng)運(yùn)而生。但是本身編寫復(fù)雜,同時(shí)還要考慮不同 CPU 的匯編指令和結(jié)構(gòu)是不同的。

高級(jí)語言(20 世紀(jì) 50 年代):這些語言讓程序員不需要關(guān)注機(jī)器底層的低級(jí)結(jié)構(gòu)和邏輯,而只要關(guān)注具體的問題和業(yè)務(wù)即可。

第一次軟件危機(jī)與結(jié)構(gòu)化程序設(shè)計(jì)(20 世紀(jì) 60 年代~20 世紀(jì) 70 年代) :高級(jí)語言的出現(xiàn),解放了程序員,但好景不長,隨著軟件的規(guī)模和復(fù)雜度的大大增加,20 世紀(jì) 60 年代中期開始爆發(fā)了第一次軟件危機(jī),典型表現(xiàn)有軟件質(zhì)量低下、項(xiàng)目無法如期完成、項(xiàng)目嚴(yán)重超支等,因?yàn)檐浖鴮?dǎo)致的重大事故時(shí)有發(fā)生。為了解決問題,“結(jié)構(gòu)化程序設(shè)計(jì)”被提了出來。結(jié)構(gòu)化程序設(shè)計(jì)本質(zhì)上還是一種面向過程的設(shè)計(jì)思想,但通過“自頂向下、逐步細(xì)化、模塊化”的方法,將軟件的復(fù)雜度控制在一定范圍內(nèi),從而從整體上降低了軟件開發(fā)的復(fù)雜度。

第二次軟件危機(jī)與面向?qū)ο螅旱诙诬浖C(jī)主要體現(xiàn)在軟件的“擴(kuò)展”變得非常復(fù)雜。結(jié)構(gòu)化程序設(shè)計(jì)雖然能夠解決(也許用“緩解”更合適)軟件邏輯的復(fù)雜性,但是對(duì)于業(yè)務(wù)變化帶來的軟件擴(kuò)展卻無能為力,軟件領(lǐng)域迫切希望找到新的銀彈來解決軟件危機(jī),在這種背景下,面向?qū)ο蟮乃枷腴_始流行起來。雖然面向?qū)ο箝_始也被當(dāng)作解決軟件危機(jī)的銀彈,但事實(shí)證明,和軟件工程一樣,面向?qū)ο笠膊皇倾y彈,而只是一種新的軟件方法而已。

軟件架構(gòu):軟件架構(gòu)的出現(xiàn)有其歷史必然性。到了 20 世紀(jì) 90 年代“軟件架構(gòu)”開始流行,創(chuàng)造了“組件”概念。我們可以看到,“模塊”“對(duì)象”“組件”本質(zhì)上都是對(duì)達(dá)到一定規(guī)模的軟件進(jìn)行拆分,差別只是在于隨著軟件的復(fù)雜度不斷增加,拆分的粒度越來越粗,拆分的層次越來越高。

架構(gòu)設(shè)計(jì)的目的:為了解決復(fù)雜度帶來的問題

架構(gòu)復(fù)雜度來源

高性能

軟件系統(tǒng)中高性能帶來的復(fù)雜度主要體現(xiàn)在兩方面,一方面是單臺(tái)計(jì)算機(jī)內(nèi)部為了高性能帶來的復(fù)雜度;另一方面是多臺(tái)計(jì)算機(jī)集群為了高性能帶來的復(fù)雜度。

  1. 提高單機(jī)性。針對(duì)單臺(tái)計(jì)算機(jī),通過升級(jí)軟、硬件能力實(shí)現(xiàn)性能提升。例如增大內(nèi)存減少I/O操作(更換為固態(tài)硬盤(SSD)提升I/O訪問速度、使用RAID增加I/O吞吐能力)。能常見的技術(shù)點(diǎn):多進(jìn)程,多線程,進(jìn)程間通信,并發(fā)。常見的服務(wù)器體系結(jié)構(gòu),SMP (Symmetric Multiprocessing) , 對(duì)稱多處理器、NUMA ( Non-Uniform Memory Access),非均勻訪問存儲(chǔ)模型、MPP (Massively ParallelProcessing),海量并行處理架構(gòu)。
  2. 提高集群性能。利用合理的任務(wù)分配與任務(wù)分解實(shí)現(xiàn)性能的提升.常見的技術(shù)點(diǎn):分配算法,負(fù)載均衡,系統(tǒng)拆分。

高可用

高可用是指系統(tǒng)無中斷地執(zhí)行其功能的能力,代表系統(tǒng)的可用性程度,本質(zhì)是通過“冗余”來實(shí)現(xiàn)。常見高可用類型包括計(jì)算高可用,存儲(chǔ)高可用。

可擴(kuò)展性

可擴(kuò)展性指系統(tǒng)為了應(yīng)對(duì)將來需求變化而提供的一種擴(kuò)展能力,當(dāng)有新的需求出現(xiàn)時(shí),系統(tǒng)不需要或者僅需要少量修改就可以支持,無須整個(gè)系統(tǒng)重構(gòu)或者重建。由于軟件系統(tǒng)固有的多變性,新的需求總會(huì)不斷提出來,因此可擴(kuò)展性顯得尤其重要。對(duì)架構(gòu)師要求:

  1. 預(yù)測(cè)變化:如何把握預(yù)測(cè)的準(zhǔn)確性比較復(fù)雜,沒有固定的標(biāo)準(zhǔn),靠直覺和經(jīng)驗(yàn)。
  2. 應(yīng)對(duì)變化:技術(shù)上做到開閉原則,如何對(duì)擴(kuò)展開放付對(duì)修改關(guān)閉,抽象出穩(wěn)定和變化。

低成本

低成本可以是人力成本,服務(wù)器成本。低成本給架構(gòu)設(shè)計(jì)帶來的主要復(fù)雜度體現(xiàn)在,往往只有“創(chuàng)新”才能達(dá)到低成本目標(biāo)。這里的“創(chuàng)新”既包括開創(chuàng)一個(gè)全新的技術(shù)領(lǐng)域(這個(gè)要求對(duì)絕大部分公司太高),也包括引入新技術(shù),如果沒有找到能夠解決自己問題的新技術(shù),那么就真的需要自己創(chuàng)造新技術(shù)了。

安全

安全本身是一個(gè)龐大而又復(fù)雜的技術(shù)領(lǐng)域,并且一旦出問題,對(duì)業(yè)務(wù)和企業(yè)形象影響非常大。

從技術(shù)的角度來講,安全可以分為兩類:

一類是功能上的安全;功能安全其實(shí)就是“防小偷”,本質(zhì)上是因?yàn)橄到y(tǒng)實(shí)現(xiàn)有漏洞。常見的安全問題,例如:常見的XSS攻擊、CSRF攻擊、SQL注入等。

另一類是架構(gòu)上的安全。如果說“功能安全”是為了防小偷,那么架構(gòu)安全就是為了防強(qiáng)盜。

規(guī)模

規(guī)模帶來的復(fù)雜度主要原因在于“量變引起質(zhì)變”,當(dāng)數(shù)量超過一定閾值后,復(fù)雜度會(huì)發(fā)生質(zhì)的變化。常見的規(guī)模帶來的復(fù)雜度有:

  1. 功能越來越多,導(dǎo)致系統(tǒng)的復(fù)雜度指數(shù)越來越高;
  2. 數(shù)據(jù)越來越多,系統(tǒng)的復(fù)雜度發(fā)生質(zhì)變;

架構(gòu)原則

合適原則

合適原則,合適優(yōu)于業(yè)界領(lǐng)先。真正優(yōu)秀的架構(gòu)都是在企業(yè)當(dāng)前人力、條件、業(yè)務(wù)等各種約束下設(shè)計(jì)出來的,能夠合理地將資源整合在一起并發(fā)揮出最大功效,并且能夠快速落地,不要面向簡歷去設(shè)計(jì)架構(gòu),高大上的架構(gòu)不等于適用。

簡單原則

簡單原則,簡單優(yōu)于復(fù)雜。面對(duì)系統(tǒng)結(jié)構(gòu)、業(yè)務(wù)邏輯和復(fù)雜性,我們可以編寫出復(fù)雜的系統(tǒng),但在軟件領(lǐng)域,復(fù)雜代表的是“問題”。架構(gòu)設(shè)計(jì)時(shí)如果簡單的方案和復(fù)雜的方案都可以滿足需求,最好選擇簡單的方案。其實(shí),簡單比復(fù)雜更加困難。

演化原則

演化原則,演化優(yōu)于一步到位。業(yè)務(wù)在發(fā)展、技術(shù)在創(chuàng)新、外部環(huán)境在變化,這一切都是在告誡架構(gòu)師不要貪大求全,或者盲目照搬大公司的做法。應(yīng)該認(rèn)真分析當(dāng)前業(yè)務(wù)的特點(diǎn),明確業(yè)務(wù)面臨的主要問題,設(shè)計(jì)合理的架構(gòu),快速落地以滿足業(yè)務(wù)需要,然后在運(yùn)行過程中不斷完善架構(gòu),不斷隨著業(yè)務(wù)演化架構(gòu)。

架構(gòu)設(shè)計(jì)流程

識(shí)別復(fù)雜度

識(shí)別復(fù)雜度主要的復(fù)雜度問題列出來,然后根據(jù)業(yè)務(wù)、技術(shù)、團(tuán)隊(duì)等綜合情況進(jìn)行排序,優(yōu)先解決當(dāng)前面臨的最主要的復(fù)雜度問題。

(1)構(gòu)建復(fù)雜度的來源清單——高性能、可用性、擴(kuò)展性、安全、低成本、規(guī)模等。

(2)結(jié)合需求、技術(shù)、團(tuán)隊(duì)、資源等對(duì)上述復(fù)雜度逐一分析是否需要?是否關(guān)鍵? “高性能”主要從軟件系統(tǒng)未來的TPS、響應(yīng)時(shí)間、服務(wù)器資源利用率等客觀指標(biāo),也可以從用戶的主觀感受方面去考慮。 “可用性”主要從服務(wù)不中斷等質(zhì)量方面去考慮。 “擴(kuò)展性”則主要從功能需求的未來變更幅度等方面去考慮。

(3)按照上述的分析結(jié)論,得到復(fù)雜度按照優(yōu)先級(jí)的排序清單,越是排在前面的復(fù)雜度,就越關(guān)鍵,就越優(yōu)先解決。

設(shè)計(jì)備選方案

確定了系統(tǒng)面臨的主要復(fù)雜度問題后,方案設(shè)計(jì)就有了明確的目標(biāo),我們就可以開始真正進(jìn)行架構(gòu)方案設(shè)計(jì)了

架構(gòu)設(shè)計(jì)備選方案的工作更多的是從需求、團(tuán)隊(duì)、技術(shù)、資源等綜合情況出發(fā),對(duì)主流、成熟的架構(gòu)模式進(jìn)行選擇、組合、調(diào)整、創(chuàng)新。

(1)根據(jù)自己的經(jīng)驗(yàn)設(shè)計(jì)一個(gè)方案。因?yàn)榭蛇x的模式有很多,組合的方案更多,往往一個(gè)問題的解決方案有很多個(gè);如果再在組合的方案上進(jìn)行一些創(chuàng)新,解決方案會(huì)更多。簡單原則,適合原則。

(2)看看業(yè)界優(yōu)秀的方案是什么,和我們業(yè)務(wù)場(chǎng)景比較,比較關(guān)鍵復(fù)雜度問題

(3)設(shè)計(jì)多個(gè)備選方案,3-5個(gè)左右,備選方案有差異,

評(píng)估和選擇備選方案

列出我們需要關(guān)注的質(zhì)量屬性點(diǎn),然后分別從這些質(zhì)量屬性的維度去評(píng)估每個(gè)方案,再綜合挑選適合當(dāng)時(shí)情況的最優(yōu)方案。質(zhì)量屬性按照優(yōu)先級(jí)排序,首先挑選滿足第一優(yōu)先級(jí)的,如果方案都滿足,那就再看第二優(yōu)先級(jí)……以此類推。不要糾結(jié),當(dāng)差不多的時(shí)候,先落地比爭論搖擺要強(qiáng)

詳細(xì)方案設(shè)計(jì)

詳細(xì)方案設(shè)計(jì)就是將方案涉及的關(guān)鍵技術(shù)細(xì)節(jié)給確定下來。

架構(gòu)模式實(shí)戰(zhàn)

高性能架構(gòu)模式

存儲(chǔ)高性能

關(guān)系型數(shù)據(jù)庫。單個(gè)數(shù)據(jù)庫無法滿足業(yè)務(wù)需要,必須考慮數(shù)據(jù)庫集群的方式。高性能數(shù)據(jù)庫集群的第一種方式“讀寫分離”,將訪問的壓力分散到集群的多個(gè)節(jié)點(diǎn)上去。第二種方式“分庫分表”分散訪問壓力,分散存儲(chǔ)壓力。常見的開源框架:淘寶TDDL,360的Atlas。

高性能NOSQL:常見的NoSQL 方案有如下4 類:

  • K-V 存儲(chǔ):解決關(guān)系數(shù)據(jù)庫無法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的問題,以redis 為代表。
  • 文檔數(shù)據(jù)庫:解決關(guān)系數(shù)據(jù)庫強(qiáng)schema 約束的問題,以MongoDB 為代表。
  • 列式數(shù)據(jù)庫: 解決關(guān)系數(shù)據(jù)庫大數(shù)據(jù)場(chǎng)景下的I/O 問題,以HBase 為代表。
  • 全文搜索引擎:解決關(guān)系數(shù)據(jù)庫的全文搜索性能問題,以Elasticsearch 為代表。

緩存:緩存就是為了彌補(bǔ)存儲(chǔ)系統(tǒng)在這些復(fù)雜業(yè)務(wù)場(chǎng)景下的不足,其基本原理是將可能重復(fù)使用的數(shù)據(jù)放到內(nèi)存中,一次生成、多次使用,避免每次使用都去訪問存儲(chǔ)系統(tǒng)。緩存常見問題有緩存雪崩、緩存穿透、緩存預(yù)熱、緩存熱點(diǎn)等。

  • 緩存雪崩是指當(dāng)緩存失效(過期)后引起系統(tǒng)性能急劇下降的情況。
  • 緩存穿透是指緩存沒有發(fā)揮作用,業(yè)務(wù)系統(tǒng)雖然去 查緩存,但沒有命中,就需要再次去存儲(chǔ)系統(tǒng)查詢數(shù)據(jù)。
  • 緩存預(yù)熱(warm up)指系統(tǒng)上線后,將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng),而不是等待用戶訪問才來觸發(fā)緩存加載。
  • 緩存熱點(diǎn):對(duì)于一些特別熱點(diǎn)的數(shù)據(jù),如果大部分甚至所有的業(yè)務(wù)請(qǐng)求都命中同一份緩存數(shù)據(jù),則這份數(shù)據(jù)所在的緩存服務(wù)器的壓力也很大

計(jì)算高性能

計(jì)算高性能主要集中在兩方面:

(1 )盡量提升單服務(wù)器的性能,將單服務(wù)器的性能發(fā)揮到極致。

(2 )如果單服務(wù)器無法支撐性能,設(shè)計(jì)服務(wù)器集群方案。

單機(jī)服務(wù)器高性能。單機(jī)高性能關(guān)鍵之一網(wǎng)絡(luò)編程模型涉及到兩個(gè)關(guān)鍵點(diǎn):I/O 模型和進(jìn)程模型

  • I/0 模型:阻塞、非阻塞、同步、異步。
  • 進(jìn)程模型:單進(jìn)程、多進(jìn)程、多線程 PPC,TPC,Reactor,Proactor

集群高性能。高性能集群的本質(zhì)很簡單,通過增加更多的服務(wù)器來提升系統(tǒng)整體的計(jì)算能力。高性能集群的復(fù)雜性主要體現(xiàn)在負(fù)載均衡和分配算法。

  1. 負(fù)載均衡:常用的負(fù)載均衡系統(tǒng)包括3種:DNS負(fù)載均衡、硬件負(fù)載均衡和軟件負(fù)載均衡。DNS負(fù)載均衡實(shí)現(xiàn)簡單、成本低,但也存在粒度太粗、負(fù)載均衡算法少等缺點(diǎn)。軟件和硬件的最主要區(qū)別就在于性能,硬件負(fù)載均衡性能遠(yuǎn)遠(yuǎn)高于軟件負(fù)載均衡性能。Nginx的性能是萬級(jí),一般的linux服務(wù)器上裝一個(gè)Nginx大概能到5萬/秒;LVS的性能是十萬級(jí),據(jù)說可達(dá)到80萬/秒;而F5性能是百萬級(jí),從200萬/秒到800萬/秒都有。

上述三種負(fù)載均衡的分類架構(gòu),各有自己的所長,其實(shí)可以遵循一個(gè)組合原則來使用它們。

  1. 負(fù)載均衡常見算法:

根據(jù)算法期望達(dá)到的目的,大體可以分為這么幾類:

(1)任務(wù)平分類:負(fù)載均衡系統(tǒng)將接收到的任務(wù)平均分配給服務(wù)器進(jìn)行處理

(2)負(fù)載均衡類:負(fù)載均衡系統(tǒng)根據(jù)服務(wù)器的負(fù)載來進(jìn)行分配,

(3)性能最優(yōu)類:負(fù)載均衡系統(tǒng)根據(jù)服務(wù)器的響應(yīng)時(shí)間來進(jìn)行任務(wù)分配

(4)Hash類:負(fù)載均衡系統(tǒng)根據(jù)任務(wù)中的某些關(guān)鍵信息進(jìn)行Hash運(yùn)算

高可用架構(gòu)模式

高可用架構(gòu)理論

CAP理論:在一個(gè)分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點(diǎn)的集合)中,當(dāng)涉及讀寫操作時(shí),只能保證一致性(Consistence)、可用性(Availability)、 分區(qū)容錯(cuò)性(Partition Tolerance)三者中的兩個(gè),另外一個(gè)必須被犧牲。

可以注意上述描述中著重強(qiáng)調(diào)了兩點(diǎn):互相連接和共享數(shù)據(jù)。因?yàn)榉植际较到y(tǒng)并不一定會(huì)互聯(lián)和共享數(shù)據(jù),只有滿足這兩點(diǎn)的系統(tǒng)才符合CAP理論。CAP原理是忽略網(wǎng)絡(luò)延遲的。

BASE是Basically Available(基本可用)、SofState(軟狀態(tài))和Eventually Consistency(最終一致性)三個(gè)短語的縮寫,其核心思想是即使無法做到強(qiáng)一致性(CAP的一致性就是強(qiáng)一致性),但應(yīng)用可以采用適合的方式達(dá)到最終一致性(Eventual Consistency)。

當(dāng)談到數(shù)據(jù)一致性時(shí),CAP、ACID、BASE難免都會(huì)被拿出來進(jìn)行討論的,原因在于這三者都是和數(shù)據(jù)一致性相關(guān)的理論。ACID,數(shù)據(jù)庫事務(wù)的特性。CAP,分布式系統(tǒng)設(shè)計(jì)理論。BASE,也是分布式系統(tǒng)設(shè)計(jì)理論,延伸了CAP理論中AP方案。

FEMA分析方法

FMEA(Failure mode and effects analysis,故障模式與影響分析)又稱為失效模式與后果分析

FMEA 是一種在各行各業(yè)都有廣泛應(yīng)用的可用性分析方法,通過對(duì)系統(tǒng)范圍內(nèi)潛在的故障模式加以分析,并按照嚴(yán)重程度進(jìn)行分類,以確定失效對(duì)于系統(tǒng)的最終影響。

回到軟件架構(gòu)設(shè)計(jì)領(lǐng)域,F(xiàn)MEA 并不能指導(dǎo)我們?nèi)绾巫黾軜?gòu)設(shè)計(jì),而是當(dāng)我們?cè)O(shè)計(jì)出一個(gè)架構(gòu)后,再使用 FMEA 對(duì)這個(gè)架構(gòu)進(jìn)行分析,看看架構(gòu)是否還存在某些可用性的隱患。

在架構(gòu)設(shè)計(jì)領(lǐng)域,F(xiàn)MEA的具體分析方法如下:

  1. 給出初始的架構(gòu)圖
  2. 假設(shè)架構(gòu)中某個(gè)部件發(fā)生故障
  3. 分析此故障對(duì)系統(tǒng)功能的影響
  4. 根據(jù)分析結(jié)果,判斷架構(gòu)是否需要優(yōu)化。

存儲(chǔ)高可用

存儲(chǔ)高可用的本質(zhì)是通過將數(shù)據(jù)復(fù)制到多和存儲(chǔ)設(shè)備,通過數(shù)據(jù)的冗余方式來實(shí)現(xiàn)高可用。常見高可用存儲(chǔ)架構(gòu):主備(備庫只是一個(gè)備份),主從(主機(jī)負(fù)責(zé)讀寫,備庫可以用來讀),主主(都可以負(fù)責(zé)讀寫,保障數(shù)據(jù)能夠被雙向復(fù)制),數(shù)據(jù)分散集群(急群眾的每臺(tái)服務(wù)器會(huì)負(fù)責(zé)存儲(chǔ)一部分?jǐn)?shù)據(jù),同時(shí)也會(huì)備份一份數(shù)據(jù)),數(shù)據(jù)按照地理級(jí)別分區(qū)主備架構(gòu)一些復(fù)雜點(diǎn):主備狀態(tài)判斷(常見直連方式,中介方式,客戶端判斷),數(shù)據(jù)一致性。

在數(shù)據(jù)一致性中,常見技術(shù)有分布式事務(wù)例如 兩階段提交,三階段提交;一致性算法例如Paxos,Raft,ZAB。

計(jì)算高可用

計(jì)算高可用的主要設(shè)計(jì)目標(biāo)是當(dāng)出現(xiàn)部分硬件損壞時(shí),計(jì)算任務(wù)能夠繼續(xù)正常運(yùn)行。因此計(jì)算高可用的本質(zhì)是通過冗余來規(guī)避部分故障的風(fēng)險(xiǎn),單臺(tái)服務(wù)器是無論如何都達(dá)不到這個(gè)目標(biāo)的。所以計(jì)算高可用的設(shè)計(jì)思想很簡單:通過增加更多服務(wù)器來達(dá)到計(jì)算高可用。計(jì)算高可用架構(gòu)的設(shè)計(jì)復(fù)雜度主要體現(xiàn)在任務(wù)管理方面,即當(dāng)任務(wù)在某臺(tái)服務(wù)器上執(zhí)行失敗后,如何將任務(wù)重新分配到新的服務(wù)器進(jìn)行執(zhí)行。計(jì)算高可用架構(gòu):主備,計(jì)算集群。

業(yè)務(wù)高可用

從“異地多活”和“接口級(jí)別故障”兩個(gè)業(yè)務(wù)場(chǎng)景中,考慮如何保障業(yè)務(wù)高可用。

異地多活是指,正常情況下用戶無論訪問哪一個(gè)地點(diǎn)的業(yè)務(wù)系統(tǒng),都能夠得到正確的業(yè)務(wù)服務(wù);若某個(gè)地方業(yè)務(wù)異常的時(shí)候,用戶訪問其他不同地理位置正常的業(yè)務(wù)系統(tǒng),也能夠得到正確的業(yè)務(wù)服務(wù)。

異地多活架構(gòu)設(shè)計(jì)是為了應(yīng)對(duì)在一些極端場(chǎng)景下,服務(wù)器出現(xiàn)故障如機(jī)房斷電、地震等等。但是,要實(shí)現(xiàn)異地多活的代價(jià)比較高,一方面系統(tǒng)的復(fù)雜度會(huì)變變高;另一方面,系統(tǒng)實(shí)現(xiàn)的成本也會(huì)變高。

設(shè)計(jì)技巧:異地多活設(shè)計(jì)技巧:保證核心業(yè)務(wù)的異地多活、保證核心數(shù)據(jù)最終一致性、采用多種手段同步數(shù)據(jù)、只保證絕大部分用戶的異地多活。

異地多活方案主要針對(duì)系統(tǒng)級(jí)別的故障,而接口級(jí)別故障,顧名思義就是針對(duì)接口級(jí)別的故障。其典型表現(xiàn)就是,系統(tǒng)沒有宕機(jī)、網(wǎng)絡(luò)沒有中斷,但是業(yè)務(wù)出現(xiàn)問題。內(nèi)部可能是程序bug問題,外部可能是黑客攻擊、大量請(qǐng)求訪問等等。解決辦法一般分為三種:降級(jí)、熔斷、限流、排隊(duì)。

可擴(kuò)展架構(gòu)模式

軟件系統(tǒng)與硬件和建筑系統(tǒng)最大的差異在于軟件是可擴(kuò)展的,一個(gè)硬件生產(chǎn)出來后就不會(huì)再進(jìn)行改變。而我們需要不斷地讓軟件系統(tǒng)具備更多的功能和特性,滿足新的需求或者順應(yīng)技術(shù)發(fā)展的趨勢(shì)。

如何避免擴(kuò)展時(shí)改動(dòng)范圍太大,是軟件架構(gòu)可擴(kuò)展性設(shè)計(jì)的主要思考點(diǎn)。可擴(kuò)展架構(gòu)的基本思想就是:“拆”。就是將原本大一統(tǒng)的系統(tǒng)拆分成多個(gè)規(guī)模小的部分,擴(kuò)展時(shí)只修改其中一部分即可,無須整個(gè)系統(tǒng)到處都改。

可以減少改動(dòng)范圍,降低改動(dòng)風(fēng)險(xiǎn)。3種拆分思路,面向流程拆分、面向服務(wù)拆分、面向功能拆分。

1.面向流程拆分:將整個(gè)業(yè)務(wù)流程拆分為幾個(gè)階段,每個(gè)階段作為一部分。面向流程拆分:展示層--》業(yè)務(wù)層--》數(shù)據(jù)層--》存儲(chǔ)層

精讀《從零開始做架構(gòu)》

 

2.面向服務(wù)拆分:將系統(tǒng)提供的服務(wù)拆分,每個(gè)服務(wù)作為一部分。面向服務(wù)拆分:注冊(cè)服務(wù)、登錄服務(wù)、信息管理服務(wù)、安全設(shè)置服務(wù)。

精讀《從零開始做架構(gòu)》

 

3.面向功能拆分:將系統(tǒng)提供的功能拆分,每個(gè)功能作為一部分。面向功能拆分:手機(jī)號(hào)注冊(cè)、郵箱注冊(cè)、手機(jī)號(hào)登錄、郵箱登錄、課程信息管理、成績信息管理、修改密碼、找回密碼。

精讀《從零開始做架構(gòu)》

 

面向流程拆分:分層架構(gòu)

分層架構(gòu)是很常見的架構(gòu)模式,它也叫 N 層架構(gòu),通常情況下,N 至少是 2 層。例如,C/S 架構(gòu)、B/S 架構(gòu)。常見的是 3 層架構(gòu)(例如,MVC、MVP 架構(gòu))、4 層架構(gòu),5 層架構(gòu)的比較少見,一般是比較復(fù)雜的系統(tǒng)才會(huì)達(dá)到或者超過 5 層,比如操作系統(tǒng)內(nèi)核架構(gòu)。

無論采取何種分層維度,分層架構(gòu)設(shè)計(jì)最核心的一點(diǎn)就是需要保證各層之間的差異足夠清晰,邊界足夠明顯,讓人看到架構(gòu)圖后就能看懂整個(gè)架構(gòu),這也是分層不能分太多層的原因。

分層架構(gòu)另外一個(gè)典型的缺點(diǎn)就是性能,因?yàn)槊恳淮螛I(yè)務(wù)請(qǐng)求都需要穿越所有的架構(gòu)分層。

面向服務(wù)拆分:SOA、微服務(wù)

SOA 的全稱是 Service Oriented Architecture,中文翻譯為“面向服務(wù)的架構(gòu)”。為了應(yīng)對(duì)傳統(tǒng) IT 系統(tǒng)存在的問題,SOA 提出了 3 個(gè)關(guān)鍵概念。ESB:ESB 的全稱是 Enterprise Service Bus。松耦合:松耦合的目的是減少各個(gè)服務(wù)間的依賴和互相影響。服務(wù):所有業(yè)務(wù)功能都是一項(xiàng)服務(wù)。

微服務(wù)架構(gòu)(Microservice Architecture)是一種架構(gòu)概念,微服務(wù)架構(gòu)是一種將單應(yīng)用程序作為一套小型服務(wù)開發(fā)的方法,每種應(yīng)用程序都在其自己的進(jìn)程中運(yùn)行,并與輕量級(jí)機(jī)制(通常是HTTP資源的API)進(jìn)行通信。這些服務(wù)是圍繞業(yè)務(wù)功能構(gòu)建的,可以通過全自動(dòng)部署機(jī)制進(jìn)行獨(dú)立部署。這些服務(wù)的集中化管理已經(jīng)是最少的,它們可以用不同的編程語言編寫,并使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)。

SOA 和微服務(wù)本質(zhì)上是兩種不同的架構(gòu)設(shè)計(jì)理念,只是在“服務(wù)”這個(gè)點(diǎn)上有交集而已。

精讀《從零開始做架構(gòu)》

 


精讀《從零開始做架構(gòu)》

 

微服務(wù)具體有哪些坑:

  • 服務(wù)劃分過細(xì),服務(wù)間關(guān)系復(fù)雜
  • 服務(wù)數(shù)量太多,團(tuán)隊(duì)效率急劇下降
  • 調(diào)用鏈太長,性能下降
  • 調(diào)用鏈太長,問題定位困難
  • 沒有自動(dòng)化支撐,無法快速交付
  • 沒有服務(wù)治理,微服務(wù)數(shù)量多了后管理混亂

微服務(wù)架構(gòu)最佳實(shí)踐:

服務(wù)粒度:“三個(gè)火槍手”原則,即一個(gè)微服務(wù)三個(gè)人負(fù)責(zé)開發(fā)。“三個(gè)火槍手”的原則主要應(yīng)用于微服務(wù)設(shè)計(jì)和開發(fā)階段,如果微服務(wù)經(jīng)過一段時(shí)間發(fā)展后已經(jīng)比較穩(wěn)定,處于維護(hù)期了,無須太多的開發(fā),那么平均 1 個(gè)人維護(hù) 1 個(gè)微服務(wù)甚至幾個(gè)微服務(wù)都可以。當(dāng)然考慮到人員備份問題,每個(gè)微服務(wù)最好都安排 2 個(gè)人維護(hù),每個(gè)人都可以維護(hù)多個(gè)微服務(wù)。

拆分方法:基于業(yè)務(wù)邏輯拆分,基于可靠性拆分,基于性能拆分,基于可擴(kuò)展拆分(將系統(tǒng)中的業(yè)務(wù)模塊按照穩(wěn)定性排序,將已經(jīng)成熟和改動(dòng)不大的服務(wù)拆分為穩(wěn)定服務(wù),將經(jīng)常變化和迭代的服務(wù)拆分為變動(dòng)服務(wù))

面向功能拆分:微內(nèi)核架構(gòu)

微內(nèi)核架構(gòu)(Microkernel architecture)模式也被稱為插件架構(gòu)(plugin architecture)模式。可以用來實(shí)現(xiàn)基于產(chǎn)品的應(yīng)用, 比如Eclipse,在微內(nèi)核的基礎(chǔ)上添加一些插件,就可以提供不同的產(chǎn)品,如C++, JAVA等。

微內(nèi)核包含兩個(gè)組件: core system 和 plug-in modules。應(yīng)用邏輯被分隔成核心系統(tǒng)和插件模塊,可以提供可擴(kuò)展的,靈活的,特性隔離的功能。

精讀《從零開始做架構(gòu)》

 

微內(nèi)核的架構(gòu)本質(zhì)就是將變化部分封裝在插件里面,從而達(dá)到快速靈活擴(kuò)展的目的,而又不影響整體系統(tǒng)的穩(wěn)定。

微內(nèi)核的核心系統(tǒng)設(shè)計(jì)的關(guān)鍵技術(shù)有:插件管理(有哪些插件,怎么加載,什么時(shí)候加載)、插件連接(插件怎么連接到核心系統(tǒng))和插件通信(插件之間的通信)。相關(guān)框架技術(shù):OSGi 的全稱是 Open Services Gateway initiative。

軟件可擴(kuò)展性方法總結(jié):

  1. 思想:拆分。開放/關(guān)閉原則:軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開放,但對(duì)修改關(guān)閉。單一職責(zé)原則:一個(gè)類應(yīng)該只有一個(gè)職責(zé)依賴倒置原則:依賴抽象
  2. 方法:面向?qū)ο蠓椒ā⒉鸱址椒?/li>
  3. 實(shí)戰(zhàn)模式:設(shè)計(jì)模式、架構(gòu)模式、技術(shù)框架

互聯(lián)網(wǎng)標(biāo)準(zhǔn)技術(shù)架構(gòu)圖

架構(gòu)圖如下圖所示。這張圖基本涵蓋了互聯(lián)網(wǎng)技術(shù)公司的大部分技術(shù)點(diǎn),不同公司只是在具體的技術(shù)實(shí)現(xiàn)上稍有差異,但不會(huì)跳出這個(gè)框架的范疇。

精讀《從零開始做架構(gòu)》

 

分享到:
標(biāo)簽:架構(gòu)
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定