個(gè)人網(wǎng)站怎么建設(shè)關(guān)鍵詞分為哪幾類
架構(gòu)設(shè)計(jì)的真正目的:是為了解決軟件系統(tǒng)復(fù)雜度帶來(lái)的問(wèn)題,一個(gè)解決方案。
系統(tǒng)復(fù)雜度,如何入手:
1、通過(guò)熟悉和理解需求,識(shí)別系統(tǒng)復(fù)雜性所在的地方,然后針對(duì)這些復(fù)雜點(diǎn)進(jìn)行架構(gòu)設(shè)計(jì)。
2、架構(gòu)設(shè)計(jì)并不是要面面俱到,不需要每個(gè)架構(gòu)都具備高性能、高可用、高擴(kuò)展等特點(diǎn),而 是要識(shí)
別出復(fù)雜點(diǎn)然后有針對(duì)性地解決問(wèn)題。
3、理解每個(gè)架構(gòu)方案背后所需要解決的復(fù)雜點(diǎn),然后才能對(duì)比自己的業(yè)務(wù)復(fù)雜點(diǎn),參考復(fù)雜 點(diǎn)相似
的方案。
架構(gòu)即(重要)決策:是 在一個(gè)有約束的盒子里去求解或接近最合適的解。這個(gè)有約束的盒子是團(tuán)隊(duì)經(jīng)驗(yàn)、成本、資 源、進(jìn)度、業(yè)務(wù)所處階段等所編織、摻雜在一起的綜合體(人,財(cái),物,時(shí)間,事等)。架構(gòu)無(wú)優(yōu)劣,但是存在恰當(dāng)?shù)募軜?gòu)用在合適的軟件系統(tǒng)中,而這些就是決策的結(jié)果。需求驅(qū)動(dòng)架構(gòu),如下幾點(diǎn):
1、架構(gòu)是為了應(yīng)對(duì)軟件系統(tǒng)復(fù)雜度而提出的一個(gè)解決方案;
2、架構(gòu)即(重要)決策 ;
3、需求驅(qū)動(dòng)架構(gòu),架起分析與設(shè)計(jì)實(shí)現(xiàn)的橋梁 ;
4、架構(gòu)與開(kāi)發(fā)成本的關(guān)系。
在分析設(shè)計(jì)階段,需要考慮一定的人力與時(shí)間去"跳出代碼,總攬全局",為 業(yè)務(wù)和IT技術(shù)之間搭建一座"橋梁"。
架構(gòu)設(shè)計(jì)處于軟件研制的前期,一方面,越是前期,如有問(wèn)題,就能夠越早發(fā)現(xiàn),修改的代價(jià)也就越低;另外一方面,也意味著,軟件實(shí)施后期若有架構(gòu)上的修改,也需要付出更多的價(jià)。
復(fù)雜度來(lái)源:高性能
1、單機(jī)復(fù)雜度-單臺(tái)計(jì)算機(jī)內(nèi)部為了高性能帶來(lái)的復(fù)雜度;
2、集群的復(fù)雜度-多臺(tái)計(jì)算機(jī)集群為了高性能帶來(lái)的復(fù)雜度。
單機(jī)復(fù)雜度
計(jì)算機(jī)內(nèi)部復(fù)雜度有個(gè)重要關(guān)鍵點(diǎn):操作系統(tǒng)。硬件是操作系統(tǒng)的保證
操作系統(tǒng)和性能最相關(guān)的就是進(jìn)程和線程,
進(jìn)程是操作系統(tǒng)分配資源最小單位,與其他進(jìn)程資源互相獨(dú)立。
線程是操作系統(tǒng)調(diào)度的最小單位,共用進(jìn)程內(nèi)的資源。
集群的復(fù)雜度
主要是通過(guò)大量機(jī)器來(lái)提升性能,并不僅僅是增加機(jī)器這么簡(jiǎn)單,讓多臺(tái)機(jī)器配合起來(lái)達(dá)到高性能的目 的,是一個(gè)復(fù)雜的任務(wù),針對(duì)常見(jiàn)的幾種方式簡(jiǎn)單分析一下。
1、任務(wù)分配
任務(wù)分配的意思是指每臺(tái)機(jī)器都可以處理完整的業(yè)務(wù)任務(wù),不同的任務(wù)分配到不同的機(jī)器上執(zhí)行。
如圖1 臺(tái)服務(wù)器演變?yōu)?2 臺(tái)服務(wù)器后,架構(gòu)上明顯要復(fù)雜多了,主要體現(xiàn)在:
1、需要增加一個(gè)任務(wù)分配器,這個(gè)分配器可能是硬件網(wǎng)絡(luò)設(shè)備(例如,F5、交換機(jī)等),可能 是軟件網(wǎng)絡(luò)設(shè)備(例如,LVS),也可能是負(fù)載均衡軟件(例如,Nginx、HAProxy),還可 能是自己開(kāi)發(fā)的系統(tǒng)。選擇合適的任務(wù)分配器也是一件復(fù)雜的事情,需要綜合考慮性能、成 本、可維護(hù)性、可用性等各方面的因素。
2、任務(wù)分配器和真正的業(yè)務(wù)服務(wù)器之間有連接和交互(即圖中任務(wù)分配器到業(yè)務(wù)服務(wù)器的連接 線),需要選擇合適的連接方式,并且對(duì)連接進(jìn)行管理。例如,連接建立、連接檢測(cè)、連接 中斷后如何處理等。
3、任務(wù)分配器需要增加分配算法。例如,是采用輪詢算法,還是按權(quán)重分配,又或者按照負(fù)載 進(jìn)行分配。如果按照服務(wù)器的負(fù)載進(jìn)行分配,則業(yè)務(wù)服務(wù)器還要能夠上報(bào)自己的狀態(tài)給任務(wù) 分配器。
假如繼續(xù)提高性能,那么任務(wù)分配器由于瓶頸問(wèn)題也需要增多,如圖:
1、任務(wù)分配器從 1 臺(tái)變成了多臺(tái)(對(duì)應(yīng)圖中的任務(wù)分配器 1 到任務(wù)分配器 M),這個(gè)變化帶來(lái) 的復(fù)雜度就是需要將不同的用戶分配到不同的任務(wù)分配器上(即圖中的虛線“用戶分配”部 分),常見(jiàn)的方法包括 DNS 輪詢、智能 DNS、CDN(Content Delivery Network,內(nèi)容 分發(fā)網(wǎng)絡(luò))、GSLB 設(shè)備(Global Server Load Balance,全局負(fù)載均衡)等。
2、任務(wù)分配器和業(yè)務(wù)服務(wù)器的連接從簡(jiǎn)單的“1 對(duì)多”(1 臺(tái)任務(wù)分配器連接多臺(tái)業(yè)務(wù)服務(wù) 器)變成了“多對(duì)多”(多臺(tái)任務(wù)分配器連接多臺(tái)業(yè)務(wù)服務(wù)器)的網(wǎng)狀結(jié)構(gòu)。
3、 機(jī)器數(shù)量從 3 臺(tái)擴(kuò)展到 30 臺(tái)(一般任務(wù)分配器數(shù)量比業(yè)務(wù)服務(wù)器要少,這里我們假設(shè)業(yè)務(wù) 服務(wù)器為 25 臺(tái),任務(wù)分配器為 5 臺(tái)),狀態(tài)管理、故障處理復(fù)雜度也大大增加。
上面這兩個(gè)例子都是以業(yè)務(wù)處理為例,實(shí)際上“任務(wù)”涵蓋的范圍很廣,可以指完整的業(yè)務(wù)處 理,也可以單指某個(gè)具體的任務(wù)。例如,“存儲(chǔ)”“運(yùn)算”“緩存”等都可以作為一項(xiàng)任務(wù),因 此存儲(chǔ)系統(tǒng)、運(yùn)算系統(tǒng)、緩存系統(tǒng)都可以按照任務(wù)分配的方式來(lái)搭建架構(gòu)。此外,“任務(wù)分配 器”也并不一定只能是物理上存在的機(jī)器或者一個(gè)獨(dú)立運(yùn)行的程序,也可以是嵌入在其他程序中 的算法,例如 Memcache 的集群架構(gòu)。
2、任務(wù)分解
通過(guò)任務(wù)分配的方式,我們能夠突破單臺(tái)機(jī)器處理性能的瓶頸,通過(guò)增加更多的機(jī)器來(lái)滿足業(yè)務(wù) 的性能需求,但如果業(yè)務(wù)本身也越來(lái)越復(fù)雜,單純只通過(guò)任務(wù)分配的方式來(lái)擴(kuò)展性能,收益會(huì)越 來(lái)越低。
1、提升任務(wù)性能關(guān)鍵點(diǎn):
簡(jiǎn)單的系統(tǒng)更加容易做到高性能
系統(tǒng)的功能越簡(jiǎn)單,影響性能的點(diǎn)就越少,就更加容易進(jìn)行有針對(duì)性的優(yōu)化。而系統(tǒng)很復(fù)雜的情 況下,首先是比較難以找到關(guān)鍵性能點(diǎn),因?yàn)樾枰紤]和驗(yàn)證的點(diǎn)太多;其次是即使花費(fèi)很大力 氣找到了,修改起來(lái)也不容易,因?yàn)榭赡軐?A 關(guān)鍵性能點(diǎn)提升了,但卻無(wú)意中將 B 點(diǎn)的性能降 低了,整個(gè)系統(tǒng)的性能不但沒(méi)有提升,還有可能會(huì)下降。
2、可以針對(duì)單個(gè)任務(wù)進(jìn)行擴(kuò)展
當(dāng)各個(gè)邏輯任務(wù)分解到獨(dú)立的子系統(tǒng)后,整個(gè)系統(tǒng)的性能瓶頸更加容易發(fā)現(xiàn),而且發(fā)現(xiàn)后只需要 針對(duì)有瓶頸的子系統(tǒng)進(jìn)行性能優(yōu)化或者提升,不需要改動(dòng)整個(gè)系統(tǒng),風(fēng)險(xiǎn)會(huì)小很多。以微信的后 臺(tái)架構(gòu)為例,如果用戶數(shù)增長(zhǎng)太快,注冊(cè)登錄子系統(tǒng)性能出現(xiàn)瓶頸的時(shí)候,只需要優(yōu)化登錄注冊(cè) 子系統(tǒng)的性能(可以是代碼優(yōu)化,也可以簡(jiǎn)單粗暴地加機(jī)器),消息邏輯、LBS 邏輯等其他子系 統(tǒng)完全不需要改動(dòng)。
總結(jié):
硬件角度-垂直維度可包括以下措施:
增大內(nèi)存減少I/O操作
更換為固態(tài)硬盤(SSD)提升I/O訪問(wèn)速度
使用RAID增加I/O吞吐能力
置換服務(wù)器獲得更多的處理器或分配更多的虛擬核
升級(jí)網(wǎng)絡(luò)接口或增加網(wǎng)絡(luò)接口
操作系統(tǒng)-水平維度可包括以下措施:
功能分解:基于功能將系統(tǒng)分解為更小的子系統(tǒng)
多實(shí)例副本:同一組件重復(fù)部署到多臺(tái)不同的服務(wù)器
數(shù)據(jù)分割:在每臺(tái)機(jī)器上都只部署一部分?jǐn)?shù)據(jù)
垂直維度方案比較適合業(yè)務(wù)階段早期和成本可接受的階段,該方案是提升性能最簡(jiǎn)單直接的 方式,但是受成本與硬件能力天花板的限制。
水平維度方案所帶來(lái)的好處要在業(yè)務(wù)發(fā)展的后期才能體現(xiàn)出來(lái)。起初,該方案會(huì)花費(fèi)更多的 硬件成本,另外一方面對(duì)技術(shù)團(tuán)隊(duì)也提出了更高的要求;但是,沒(méi)有垂直方案的天花板問(wèn) 題。一旦達(dá)到一定的業(yè)務(wù)階段,水平維度是技術(shù)發(fā)展的必由之路。