1 基礎(chǔ)概念
系統(tǒng)泛指由一群有關(guān)聯(lián)的個(gè)體組成沈贝,根據(jù)某種規(guī)則運(yùn)作,能完成個(gè)別元件不能單獨(dú)完成的工作的群體勋乾。它的意思是“總體”“整體”或“聯(lián)盟”宋下。
子系統(tǒng)也是由一群有關(guān)聯(lián)的個(gè)體所組成的系統(tǒng),多半會(huì)是更大系統(tǒng)中的一部分辑莫。
軟件模塊(Module)是一套一致而互相有緊密關(guān)連的軟件組織学歧。它分別包含了程序和數(shù)據(jù)結(jié)構(gòu)兩部分。現(xiàn)代軟件開(kāi)發(fā)往往利用模塊作為合成的單位各吨。模塊的接口表達(dá)了由該模塊提供的功能和調(diào)用它時(shí)所需的元素枝笨。模塊是可能分開(kāi)被編寫的單位。這使它們可再用和允許人員同時(shí)協(xié)作、編寫及研究不同的模塊横浑。(邏輯角度拆分剔桨,劃分目的是職責(zé)分離)
軟件組件定義為自包含的、可編程的徙融、可重用的领炫、與語(yǔ)言無(wú)關(guān)的軟件單元,軟件組件可以很容易被用于組裝應(yīng)用程序中张咳。(物理角度拆分帝洪,劃分目的是單元復(fù)用,獨(dú)立且可替換)
軟件框架(Software framework)通常指的是為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范脚猾,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí)葱峡,提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。
軟件架構(gòu)指軟件系統(tǒng)的“基礎(chǔ)結(jié)構(gòu)”龙助,創(chuàng)造這些基礎(chǔ)結(jié)構(gòu)的準(zhǔn)則砰奕,以及對(duì)這些結(jié)構(gòu)的描述。
架構(gòu)是頂層設(shè)計(jì)提鸟;框架是面向編程或配置的半成品军援;組件是從技術(shù)維度上的復(fù)用;模塊是從業(yè)務(wù)維度上職責(zé)的劃分称勋;系統(tǒng)是相互協(xié)同可運(yùn)行的實(shí)體胸哥。
架構(gòu)設(shè)計(jì)三原則:合適原則,簡(jiǎn)單原則赡鲜,演化原則空厌。
設(shè)計(jì)流程:識(shí)別復(fù)雜度,設(shè)計(jì)備選方案银酬,評(píng)估和選擇備選方案嘲更,詳細(xì)方案設(shè)計(jì)。
2 復(fù)雜度來(lái)源
①高性能
提高單機(jī)性能+集群揩瞪。性能是軟件的一個(gè)重要質(zhì)量屬性赋朦。衡量軟件性能包括了響應(yīng)時(shí)間、TPS李破、服務(wù)器資源利用率等客觀指標(biāo)宠哄,也可以是用戶的主觀感受(從程序員、業(yè)務(wù)用戶喷屋、終端用戶/客戶不同的視角琳拨,可能會(huì)得出不同的結(jié)論)。
常用手段:讀寫分離屯曹,分庫(kù)分表,NoSQL,緩存恶耽,負(fù)載均衡密任,Reactor。
負(fù)載均衡:硬件F5(百萬(wàn)級(jí))偷俭,A10浪讳。軟件Nginx(萬(wàn)級(jí),7層)涌萤,LVS(十萬(wàn)級(jí)淹遵,4層)
每秒事務(wù)處理量(TPS,Transaction Per Second)每秒鐘系統(tǒng)能夠處理的交易或事務(wù)的數(shù)量负溪。它是衡量系統(tǒng)處理能力的重要指標(biāo)透揣。
每秒查詢率(QPS,Queries Per Second)是對(duì)一個(gè)特定的查詢服務(wù)器在規(guī)定時(shí)間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn)川抡。
Reactor:I/O多路復(fù)用+資源池(進(jìn)程池/線程池)
進(jìn)程池:不再單獨(dú)為每個(gè)連接創(chuàng)建進(jìn)程辐真,而是創(chuàng)建一個(gè)進(jìn)程池,將連接分配給進(jìn)程崖堤,一個(gè)進(jìn)程可以處理多個(gè)連接的業(yè)務(wù)侍咱。
I/O多路復(fù)用:只有當(dāng)連接上有數(shù)據(jù)的時(shí)候進(jìn)程才去處理。當(dāng)多條連接共用一個(gè)阻塞對(duì)象后密幔,進(jìn)程只需要在一個(gè)阻塞對(duì)象上等待楔脯,而無(wú)須再輪詢所有連接,當(dāng)某條連接有新的數(shù)據(jù)可以處理時(shí)胯甩,操作系統(tǒng)會(huì)通知進(jìn)程淤年,進(jìn)程從阻塞狀態(tài)返回,開(kāi)始進(jìn)行業(yè)務(wù)處理蜡豹。
單Reactor單進(jìn)程(Redis)麸粮,單Reactor多線程,多Reactor多進(jìn)程(Nginx)镜廉,多Reactor多線程(Memcache弄诲,Netty)
②高可用
是系統(tǒng)無(wú)中斷地執(zhí)行其功能的能力,代表系統(tǒng)的可用性程度娇唯,是進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)的準(zhǔn)則之一齐遵。
常用手段:雙機(jī)架構(gòu)(主從,主備塔插,主主梗摇,主從/主備切換),集群想许,分區(qū)伶授,異地多活(同城断序,跨地,跨國(guó))糜烹。
業(yè)務(wù)分級(jí)(核心违诗,訪問(wèn)量大,主要收入)——數(shù)據(jù)分類(數(shù)據(jù)量疮蹦,唯一性诸迟,實(shí)時(shí)性,可丟失性愕乎,可恢復(fù)性)——數(shù)據(jù)同步(消息隊(duì)列阵苇,二次讀取,存儲(chǔ)系統(tǒng)同步感论,回源讀取绅项,重新生成)——異常處理(多通道同步,同步和訪問(wèn)結(jié)合笛粘,日志記錄趁怔,用戶補(bǔ)償)
異地多活要點(diǎn):核心業(yè)務(wù)異地多活,核心數(shù)據(jù)最終一致薪前,多手段同步數(shù)據(jù)润努,保證絕大部分用戶異地多活。
CAP理論:在一個(gè)分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點(diǎn)的集合)中示括,當(dāng)涉及讀寫操作時(shí)铺浇,只能保證一致性(Consistence)、可用性(Availability)垛膝、分區(qū)容錯(cuò)性 (Partition Tolerance)三者中的兩個(gè)鳍侣,另外一個(gè)必須被犧牲。
ACID理論:是數(shù)據(jù)庫(kù)管理系統(tǒng)為了保證事務(wù)的正確性而提出來(lái)的一個(gè)理論吼拥,ACID包含四個(gè)約束
Atomicity(原子性):一個(gè)事務(wù)中的所有操作倚聚,要么全部完成,要么全部不完成凿可,不會(huì)在中間某個(gè)環(huán)節(jié)結(jié)束惑折。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾到事務(wù)開(kāi)始前的狀態(tài)枯跑,就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣惨驶。
Consistency(一致性):在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞敛助。
Isolation(隔離性):數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)數(shù)據(jù)進(jìn)行讀寫和修改的能力粗卜。隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別纳击,包括讀未提交(Read uncommitted)续扔、讀提交(read committed)攻臀、可重復(fù)讀(repeatable read)和串行化(Serializable)。
Durability(持久性):事務(wù)處理結(jié)束后测砂,對(duì)數(shù)據(jù)的修改就是永久的茵烈,即便系統(tǒng)故障也不會(huì)丟失百匆。
BASE理論:是指基本可用(Basically Available)砌些、軟狀態(tài)( Soft State)、最終一致性( Eventual Consistency)加匈,核心思想是即使無(wú)法做到強(qiáng)一致性(CAP的一致性就是強(qiáng)一致 性)存璃,但應(yīng)用可以采用適合的方式達(dá)到最終一致性。
FMEA(Failure mode and efects analysis雕拼,故障模式與影響分析):是一種在各行各業(yè)都有廣泛應(yīng)用的可用性分析方法纵东,通過(guò)對(duì)系統(tǒng)范圍內(nèi)潛在的故障模式加以分析,并按照嚴(yán)重程度進(jìn)行分類啥寇,以確定失效對(duì)于系統(tǒng)的最終影響偎球。
③可擴(kuò)展性
業(yè)務(wù)需求、運(yùn)行環(huán)境方面的變化都會(huì)導(dǎo)致軟件系統(tǒng)發(fā)生變化辑甜,而這種軟件系統(tǒng)對(duì)上述變化的適應(yīng)能力就是可擴(kuò)展性衰絮。
面向流程拆分:分層架構(gòu)。2層(C/S架構(gòu)磷醋、B/S架構(gòu)),3層(MVC架構(gòu)猫牡、MVP架構(gòu)),多層(邏輯分層)邓线。
面向服務(wù)拆分:SOA(Service Oriented Architecture淌友,面向服務(wù)的架構(gòu))、微服務(wù)骇陈。
面向功能拆分:微內(nèi)核架構(gòu)震庭,也被稱為插件化架構(gòu)。
④低成本:往往只有“創(chuàng)新”才能達(dá)到低成本目標(biāo)你雌,引入新技術(shù)或創(chuàng)造新技術(shù)器联。
⑤安全:功能安全其實(shí)就是“防小偷”,架構(gòu)安全就是“防強(qiáng)盜”匪蝙。
⑥規(guī)模:是“量變引起質(zhì)變”主籍,當(dāng)數(shù)量超過(guò)一定的閾值后,復(fù)雜度會(huì)發(fā)生質(zhì)的變化逛球。功能增加/數(shù)據(jù)增加千元。
3 相關(guān)技術(shù)
①存儲(chǔ)技術(shù)
NoSQL
K-V存儲(chǔ):解決關(guān)系數(shù)據(jù)庫(kù)無(wú)法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的問(wèn)題,以Memcache颤绕,Redis為代表幸海。
文檔數(shù)據(jù)庫(kù):解決關(guān)系數(shù)據(jù)庫(kù)強(qiáng)schema約束的問(wèn)題祟身,以MongoDB為代表。
列式數(shù)據(jù)庫(kù):解決關(guān)系數(shù)據(jù)庫(kù)大數(shù)據(jù)場(chǎng)景下的I/O問(wèn)題物独,以HBase為代表袜硫。
全文搜索引擎:解決關(guān)系數(shù)據(jù)庫(kù)的全文搜索性能問(wèn)題,以Elasticsearch為代表挡篓。
SQL:MySQL婉陷,PostgreSQL,Oracle官研。
小文件存儲(chǔ):淘寶的TFS秽澳、京東JFS、Facebook的Haystack戏羽。
大文件存儲(chǔ):Hadoop担神、HBase、Storm始花、Hive妄讯,淘寶的云梯系統(tǒng)、騰訊的TDW系統(tǒng)酷宵。
②開(kāi)發(fā)技術(shù)
開(kāi)發(fā)框架
Java的SSH亥贸、SpringMVC、Play等忧吟。
Ruby的Ruby on Rails砌函。
PHP的ThinkPHP。
Python的Django溜族。
web服務(wù)器
Java的Tomcat讹俊、JBoss、Resin等煌抒,PHP/Python的用Nginx仍劈,最保險(xiǎn)的就是用Apache了,什么語(yǔ)言都支持寡壮。
容器
Docker贩疙。
消息隊(duì)列
RocketMQ、Kafka况既、ActiveMQ这溅。
③網(wǎng)絡(luò)技術(shù)
負(fù)載均衡
DNS,Nginx 棒仍、LVS 悲靴、F5,如阿里云的SLB莫其、UCloud的ULB癞尚,CDN