一、掌握專(zhuān)業(yè)名詞
系統(tǒng)

舉例:

模塊和組件

舉例:



框架與架構(gòu)
框架是一種開(kāi)發(fā)規(guī)范。

架構(gòu)(Architecture):
1、架構(gòu)需要明確系統(tǒng)包含哪些個(gè)體,這些個(gè)體可以是子系統(tǒng)、組件、模塊。
2、架構(gòu)需要明確個(gè)體運(yùn)作和協(xié)作的規(guī)則。
二、架構(gòu)設(shè)計(jì)歷史
軟件架構(gòu)發(fā)展史

三、分析一個(gè)簡(jiǎn)單的架構(gòu)(來(lái)自極客時(shí)間)
假設(shè)我們需要設(shè)計(jì)一個(gè)大學(xué)的學(xué)生管理系統(tǒng),其基本功能包括登錄、注冊(cè)、成績(jī)管理、課程管理等。當(dāng)我們對(duì)這樣一個(gè)系統(tǒng)進(jìn)行架構(gòu)設(shè)計(jì)的時(shí)候,首先應(yīng)識(shí)別其復(fù)雜度到底體現(xiàn)在哪里。
性能
- 總共有多少用戶(hù)會(huì)訪問(wèn)這個(gè)系統(tǒng)?
- 訪問(wèn)頻率是多高?
- 訪問(wèn)峰值,并發(fā)多少?
一個(gè)學(xué)校的學(xué)生大約 1 ~ 2 萬(wàn)人,學(xué)生管理系統(tǒng)的訪問(wèn)頻率并不高,平均每天單個(gè)學(xué)生的訪問(wèn)次數(shù)平均不到 1 次,因此性能這部分并不復(fù)雜,存儲(chǔ)用 MySQL 完全能夠勝任,緩存都可以不用,Web 服務(wù)器用 Nginx 綽綽有余。
可擴(kuò)展性
學(xué)生管理系統(tǒng)的功能比較穩(wěn)定,可擴(kuò)展的空間并不大,因此可擴(kuò)展性也不復(fù)雜。
高可用------業(yè)務(wù)連續(xù)性+數(shù)據(jù)高可靠
- 為什么要高可用?主要考慮業(yè)務(wù)連續(xù)性和數(shù)據(jù)高可靠。
- 到底要多高?是1分鐘都不能停,還是可以停1個(gè)小時(shí)?是數(shù)據(jù)絕對(duì)不能丟,還是可以丟一部分?jǐn)?shù)據(jù)然后其它方式修復(fù)?對(duì)于高可用,千萬(wàn)不能說(shuō)越高越好,一定要結(jié)合業(yè)務(wù),例如,絕大部分內(nèi)部系統(tǒng)的宕機(jī)容忍時(shí)間可以是一個(gè)小時(shí)。
學(xué)生管理系統(tǒng)即使宕機(jī) 2 小時(shí),對(duì)學(xué)生管理工作影響并不大,因此可以不做負(fù)載均衡,更不用考慮異地多活這類(lèi)復(fù)雜的方案了。但是,如果學(xué)生的數(shù)據(jù)全部丟失,修復(fù)是非常麻煩的,只能靠人工逐條修復(fù),這個(gè)很難接受,因此需要考慮存儲(chǔ)高可靠,這里就有點(diǎn)復(fù)雜了。我們需要考慮多種異常情況:機(jī)器故障、機(jī)房故障,針對(duì)機(jī)器故障,我們需要設(shè)計(jì) MySQL 同機(jī)房主備方案;針對(duì)機(jī)房故障,我們需要設(shè)計(jì) MySQL 跨機(jī)房同步方案。
安全性
- 有隱私性高或者企業(yè)核心機(jī)密數(shù)據(jù)么?
- 數(shù)據(jù)泄露造成的危害有多大?
學(xué)生管理系統(tǒng)存儲(chǔ)的信息有一定的隱私性,例如學(xué)生的家庭情況,但并不是和金融相關(guān)的,也不包含強(qiáng)隱私(例如玉照、情感)的信息,因此安全性方面只要做 3 個(gè)事情就基本滿(mǎn)足要求了:Nginx 提供 ACL 控制、用戶(hù)賬號(hào)密碼管理、數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限控制。
成本
由于系統(tǒng)很簡(jiǎn)單,基本上幾臺(tái)服務(wù)器就能夠搞定,對(duì)于一所大學(xué)來(lái)說(shuō)完全不是問(wèn)題,可以無(wú)需太多關(guān)注。
通過(guò)我上面的分析,可以看到這個(gè)方案的主要復(fù)雜性體現(xiàn)在存儲(chǔ)可靠性上,需要保證異常的時(shí)候,不要丟失所有數(shù)據(jù)即可(丟失幾個(gè)或者幾十個(gè)學(xué)生的信息問(wèn)題不大),對(duì)應(yīng)的架構(gòu)如下:
