大型網(wǎng)站核心架構(gòu)要素
深圳網(wǎng)站建設(shè)關(guān)于什么是架構(gòu),一種比較通俗的說(shuō)法是“最高層次的規(guī)劃,難以改變的決定”,這些規(guī)劃和決定奠定了事物未來(lái)發(fā)展的方向和最終的藍(lán)圖。
從這個(gè)意義上說(shuō),人生規(guī)劃也是一種架構(gòu)。選什么學(xué)校、學(xué)什么專(zhuān)業(yè)、進(jìn)什么公司、找什么對(duì)象,過(guò)什么樣的生活,都是自己人生的架構(gòu)。
具體到軟件架構(gòu),維基百科是這樣定義的:有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用干指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)”。系統(tǒng)的各個(gè)重要組成部分及其關(guān)系構(gòu)成了系統(tǒng)的架構(gòu),這些組成部分可以是具體的功能模塊,也可以是非功能的設(shè)計(jì)與決策,他們相互關(guān)系組成一個(gè)整體,共同構(gòu)成了軟件系統(tǒng)的架構(gòu)。
一般說(shuō)來(lái),除了當(dāng)前的系統(tǒng)功能需求外,軟件架構(gòu)還需要關(guān)注性能、可用性、伸縮性、擴(kuò)展性和安全性這5個(gè)架構(gòu)要素,架構(gòu)設(shè)計(jì)過(guò)程中需要平衡這5個(gè)要索之間的關(guān)系以實(shí)現(xiàn)需求和架構(gòu)目標(biāo),也可以通過(guò)考察這些架構(gòu)要素來(lái)衡ft—個(gè)軟件架構(gòu)設(shè)計(jì)的優(yōu)劣,判斷其是否滿足期望。
3.1性能
性能是網(wǎng)站的一個(gè)重要指標(biāo),除非是沒(méi)得選擇(比如只能到WWW.12306.cn這一個(gè)網(wǎng)站上買(mǎi)火車(chē)票),否則用戶無(wú)法忍受一個(gè)響應(yīng)緩慢的網(wǎng)站。一個(gè)打開(kāi)緩慢的網(wǎng)站會(huì)導(dǎo)致嚴(yán)重的用戶流失,很多時(shí)候網(wǎng)站性能問(wèn)題是網(wǎng)站架構(gòu)升級(jí)優(yōu)化的觸發(fā)器??梢哉f(shuō)性能是網(wǎng)站架構(gòu)設(shè)計(jì)的一個(gè)重要方面,任何軟件架構(gòu)設(shè)計(jì)方案都必須考慮可能會(huì)帶來(lái)的性能問(wèn)題。
也正是因?yàn)樾阅軉?wèn)題幾乎無(wú)處不在,所以優(yōu)化網(wǎng)站性能的手段也非常多,從用戶瀏覽器到數(shù)據(jù)庫(kù),影響用戶請(qǐng)求的所有環(huán)節(jié)都可以進(jìn)行性能優(yōu)化。
在瀏覽器端,可以通過(guò)瀏覽器緩存、使用頁(yè)面壓縮、合理布局頁(yè)面、減少Cookie傳輸?shù)仁侄胃纳菩阅堋?/p>
還可以使用CDN,將網(wǎng)站靜態(tài)內(nèi)容分發(fā)至離用戶最近的網(wǎng)絡(luò)服務(wù)商機(jī)房,使用戶通過(guò)最短訪問(wèn)路徑獲取數(shù)據(jù)??梢栽诰W(wǎng)站機(jī)房部署反向代理服務(wù)器,緩存熱點(diǎn)文件,加快請(qǐng)求響應(yīng)速度,減輕應(yīng)用服務(wù)器負(fù)載壓力。
在應(yīng)用服務(wù)器端,可以使用服務(wù)器本地緩存和分布式緩存,通過(guò)緩存在內(nèi)存中的熱點(diǎn)數(shù)據(jù)處理用戶請(qǐng)求,加快請(qǐng)求處理過(guò)程,減輕數(shù)據(jù)庫(kù)負(fù)載壓力。
也可以通過(guò)異步操作將用戶請(qǐng)求發(fā)送至消息隊(duì)列等待后續(xù)任務(wù)處理,而當(dāng)前請(qǐng)求直接返回響應(yīng)給用戶。
在網(wǎng)站有很多用戶高并發(fā)請(qǐng)求的情況下,可以將多臺(tái)應(yīng)用服務(wù)器組成一個(gè)集群共同對(duì)外服務(wù),提高整體處理能力,改善性能。
在代碼層面,也可以通過(guò)使用多線程、改善內(nèi)存管理等手段優(yōu)化性能。
在數(shù)據(jù)庫(kù)服務(wù)器端,索引、緩存、SQL優(yōu)化等性能優(yōu)化手段都已經(jīng)比較成熟。而方興未艾的NoSQL數(shù)據(jù)庫(kù)通過(guò)優(yōu)化數(shù)據(jù)模型、存儲(chǔ)結(jié)構(gòu)、伸縮特性等手段在性能方面的優(yōu)勢(shì)也日趨明顯。
衡量網(wǎng)站性能有一系列指標(biāo),重要的有響應(yīng)時(shí)間、TPS、系統(tǒng)性能計(jì)數(shù)器等,通過(guò)測(cè)試這些指標(biāo)以確定系統(tǒng)設(shè)計(jì)是否達(dá)到目標(biāo)。這些指標(biāo)也是網(wǎng)站監(jiān)控的重要參數(shù),通過(guò)監(jiān)控這些指標(biāo)可以分析系統(tǒng)瓶頸,預(yù)測(cè)網(wǎng)站容量,并對(duì)異常指標(biāo)進(jìn)行報(bào)警,保障系統(tǒng)可用
大型網(wǎng)站技術(shù)架構(gòu)核心原理與案例分析性。
對(duì)于網(wǎng)站而言,性能符合預(yù)期僅僅是必要條件,因?yàn)闊o(wú)法預(yù)知網(wǎng)站可能會(huì)面臨的訪問(wèn)壓力,所以必須要考察系統(tǒng)在高并發(fā)訪問(wèn)情況下,超出負(fù)載設(shè)計(jì)能力的情況下可能會(huì)出現(xiàn)的性能問(wèn)題。網(wǎng)站需要長(zhǎng)時(shí)間持續(xù)運(yùn)行,還必須保證系統(tǒng)在持續(xù)運(yùn)行且訪問(wèn)壓力不均勻的情況下保持穩(wěn)定的性能特性。
3.2可用性
對(duì)于大型網(wǎng)站而言,特別是知名網(wǎng)站,網(wǎng)站宕掉、服務(wù)不可用是一個(gè)大的事故,輕則影響網(wǎng)站聲譽(yù),電則可能會(huì)攤上官司。對(duì)于電子商務(wù)類(lèi)網(wǎng)站,網(wǎng)站不可用還意味著損失金錢(qián)和用戶。因此幾乎所有網(wǎng)站都承諾7x24可用,但亊實(shí)上任何網(wǎng)站都不可能達(dá)到完全的7x24 用,總會(huì)有一些故障時(shí)間,扣除這些故障時(shí)間,就是網(wǎng)站的總可用時(shí)間,這個(gè)時(shí)間可以換兌成網(wǎng)站的可用性指標(biāo),以此衡M網(wǎng)站的可用性,一些知名大型網(wǎng)站可以做到4個(gè)9以上的可用性,也就是可用性超過(guò)99.99%。
因?yàn)榫W(wǎng)站使用的服務(wù)器硬件通常是普通的商用服務(wù)器,這些服務(wù)器的設(shè)計(jì)標(biāo)本身并不保證高可用,也就是說(shuō),很有可能會(huì)出現(xiàn)服務(wù)器硬件故障,也就是俗稱(chēng)的服務(wù)器宕機(jī)。大型網(wǎng)站通常都會(huì)有上萬(wàn)臺(tái)服務(wù)器,每天都必定會(huì)有一些服務(wù)器宕機(jī),因此網(wǎng)站高可用架構(gòu)設(shè)計(jì)的前提是必然會(huì)出現(xiàn)服務(wù)器宕機(jī),而高可用設(shè)計(jì)的S標(biāo)就趄當(dāng)服務(wù)器宕機(jī)的時(shí)候,服務(wù)或者應(yīng)用依然可用。
網(wǎng)站高可用的主要手段是冗余,應(yīng)用部署在多臺(tái)服務(wù)器上同時(shí)提供訪問(wèn),數(shù)據(jù)存儲(chǔ)在多臺(tái)服務(wù)器上互相備份,仟何一臺(tái)服務(wù)器宕機(jī)都不會(huì)影響應(yīng)用的整體可用,也不會(huì)導(dǎo)致數(shù)據(jù)丟失。
對(duì)于應(yīng)用服務(wù)器而言,多臺(tái)應(yīng)用服務(wù)器通過(guò)負(fù)載均衡設(shè)備組成-個(gè)集群共同對(duì)外提供服務(wù),任何一臺(tái)服務(wù)器宕機(jī),只需把請(qǐng)求切換到其他服務(wù)器就可實(shí)現(xiàn)應(yīng)用的高可用,但是一個(gè)前提條件是應(yīng)用服務(wù)器上不能保存請(qǐng)求的會(huì)話信息。否則服務(wù)器宕機(jī),會(huì)話丟失,即使將用戶請(qǐng)求轉(zhuǎn)發(fā)到其他服務(wù)器上也無(wú)法完成業(yè)務(wù)處理。
對(duì)于存儲(chǔ)服務(wù)器,由于其上存儲(chǔ)著數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)備份,當(dāng)服務(wù)器宕機(jī)時(shí)需要將數(shù)據(jù)訪問(wèn)轉(zhuǎn)移到可用的服務(wù)器上,并進(jìn)行數(shù)據(jù)恢復(fù)以保證繼續(xù)有服務(wù)器吉機(jī)的時(shí)候數(shù)據(jù)依然可用。
除了運(yùn)行環(huán)境,網(wǎng)站的高可用還需要軟件開(kāi)發(fā)過(guò)程的質(zhì)量保證。通過(guò)預(yù)發(fā)布驗(yàn)證、自動(dòng)化測(cè)試、自動(dòng)化發(fā)布、灰度發(fā)布等手段,減少將故障引入線上環(huán)境的可能,避免故障范圍擴(kuò)大。
衡量一個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)是否滿足高可用的目標(biāo).就是假設(shè)系統(tǒng)中任何一臺(tái)或者多臺(tái)服務(wù)器宕機(jī)時(shí),以及出現(xiàn)各種不可預(yù)期的問(wèn)題時(shí),系統(tǒng)整體是否依然可用。
3.3伸縮性
大型網(wǎng)站需要面對(duì)大《用戶的高并發(fā)訪問(wèn)和存儲(chǔ)海數(shù)據(jù),不可能只用一臺(tái)服務(wù)器就處理全部用戶請(qǐng)求,存儲(chǔ)全部數(shù)據(jù)。網(wǎng)站通過(guò)集群的方式將多臺(tái)服務(wù)器組成一個(gè)整體共同提供服務(wù)。所謂仲縮性是指迎過(guò)不斷向集群中加入服務(wù)器的手段來(lái)緩解不斷上升的用戶并發(fā)訪問(wèn)壓力和不斷增長(zhǎng)的數(shù)據(jù)存儲(chǔ)需求。
衡架構(gòu)伸縮性的主要標(biāo)準(zhǔn)就是是否可以用多臺(tái)服務(wù)器構(gòu)建糶群,是否容易向集群中添加新的服務(wù)器。加入新的服務(wù)器后是否可以提供和原來(lái)的服務(wù)器無(wú)差別的服務(wù)。集群中可容納的總的服務(wù)器數(shù)M是否有限制。
對(duì)于應(yīng)用服務(wù)器集群.只要服務(wù)器上不保存數(shù)據(jù),所有服務(wù)器都是對(duì)等的,通過(guò)使用合適的負(fù)載均衡設(shè)備就可以向集群中不斷加入服務(wù)器。
對(duì)于緩存服務(wù)器集群,加入新的服務(wù)器可能會(huì)導(dǎo)致緩存路由失效,進(jìn)而導(dǎo)致集群中大部分緩存數(shù)據(jù)都無(wú)法訪問(wèn)。雖然緩存的數(shù)據(jù)可以通過(guò)數(shù)據(jù)庫(kù)重新加載,但是如果應(yīng)用已經(jīng)嚴(yán)重依賴(lài)緩存,可能會(huì)導(dǎo)致整個(gè)網(wǎng)站崩潰。需要改進(jìn)緩存路由算法保證緩存數(shù)據(jù)的可訪問(wèn)性。
關(guān)系數(shù)據(jù)庫(kù)雖然支持?jǐn)?shù)據(jù)復(fù)制,主從熱備等機(jī)制,但是很難做到大規(guī)模集群的可伸縮性,因此關(guān)系數(shù)據(jù)庫(kù)的集群伸縮性方案必須在數(shù)據(jù)庫(kù)之外實(shí)現(xiàn),通過(guò)路巾分區(qū)等手段將部署有多個(gè)數(shù)據(jù)庫(kù)的服務(wù)器組成一個(gè)集群。
至于大部分NoSQL數(shù)據(jù)庫(kù)產(chǎn)品,由于其先天就是為海¥.數(shù)據(jù)而生,因此其對(duì)伸縮性的支持通常都非常好,可以做到在較少運(yùn)維參與的情況F實(shí)現(xiàn)集群規(guī)模的線性伸縮。
3.4擴(kuò)展性
不同于其他架構(gòu)要尜主要關(guān)注非功能性需求,網(wǎng)站的擴(kuò)展性架構(gòu)直接關(guān)注網(wǎng)站的功能需求。網(wǎng)站快速發(fā)展,功能不斷擴(kuò)展,如何設(shè)計(jì)網(wǎng)站的架構(gòu)使其能夠快速響應(yīng)需求變化,是網(wǎng)站可擴(kuò)展架構(gòu)主要的目的。
衡請(qǐng)網(wǎng)站架構(gòu)擴(kuò)展性好壞的主要標(biāo)準(zhǔn)就是在網(wǎng)站增加新的業(yè)務(wù)產(chǎn)品時(shí),是否可以實(shí)現(xiàn)對(duì)現(xiàn)有產(chǎn)品透明無(wú)影響,不需要任何改動(dòng)或者很少改動(dòng)既有業(yè)務(wù)功能就可以上線新產(chǎn)品。不同產(chǎn)品之間是否很少耦合,一個(gè)產(chǎn)品改動(dòng)對(duì)其他產(chǎn)品無(wú)影響,其他產(chǎn)品和功能不需要受牽連進(jìn)行改動(dòng)。
網(wǎng)站可伸縮架構(gòu)的主要手段是事件驅(qū)動(dòng)架構(gòu)和分布式服務(wù)。
事件驅(qū)動(dòng)架構(gòu)在網(wǎng)站通常利用消息隊(duì)列實(shí)現(xiàn),將用戶請(qǐng)求和其他業(yè)務(wù)事件構(gòu)造成消息發(fā)布到消息隊(duì)列,消息的處理者作為消費(fèi)者從消息隊(duì)列中獲取消息進(jìn)行處理。通過(guò)這種方式將消息產(chǎn)生和消息處理分離開(kāi)來(lái),可以透明地增加新的消息生產(chǎn)者任務(wù)或者新的消息消費(fèi)者任務(wù)。
分布式服務(wù)則是將業(yè)務(wù)和可復(fù)用服務(wù)分離開(kāi)來(lái),通過(guò)分布式服務(wù)框架調(diào)用。新增產(chǎn)品可以通過(guò)調(diào)用可復(fù)用的服務(wù)實(shí)現(xiàn)自身的業(yè)務(wù)邏輯,而對(duì)現(xiàn)有產(chǎn)品沒(méi)有任何影響??蓮?fù)用服務(wù)升級(jí)變更的時(shí)候,也可以通過(guò)提供多版本服務(wù)對(duì)應(yīng)用實(shí)現(xiàn)透明升級(jí),不需要強(qiáng)制應(yīng)用同步變更。
大型網(wǎng)站為了保持市場(chǎng)地位,還會(huì)吸引第三方開(kāi)發(fā)者,調(diào)用網(wǎng)站服務(wù),使用網(wǎng)站數(shù)據(jù)開(kāi)發(fā)周邊產(chǎn)品,擴(kuò)展網(wǎng)站業(yè)務(wù)。第三方開(kāi)發(fā)者使用網(wǎng)站服務(wù)的主要途徑是大型網(wǎng)站提供的開(kāi)放平臺(tái)接口。
3.5安全性
互聯(lián)網(wǎng)是開(kāi)放的,任何人在任何地方都可以訪問(wèn)網(wǎng)站。網(wǎng)站的安全架構(gòu)就是保護(hù)網(wǎng)站不受惡意訪問(wèn)和攻擊,保護(hù)網(wǎng)站的重要數(shù)據(jù)不被竊取。
衡量網(wǎng)站安全架構(gòu)的標(biāo)準(zhǔn)就是針對(duì)現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應(yīng)對(duì)策略。
3.6小結(jié)
性能、可用性、伸縮性、擴(kuò)展性和安全性是網(wǎng)站架構(gòu)最核心的幾個(gè)要素,這幾個(gè)問(wèn)題解決了,大型網(wǎng)站架構(gòu)設(shè)計(jì)的大部分挑戰(zhàn)也就克服了。因此本書(shū)第二篇即按這五個(gè)架構(gòu)要素進(jìn)行組織。
本章既可以看作本書(shū)第二篇的前情提要,同時(shí)也可以當(dāng)做第二篇的總結(jié)和歸納,閱讀本章過(guò)程中如果有任何困惑都不必糾結(jié),請(qǐng)直接跳過(guò),等讀完全書(shū)后可以再回頭重新回顧。