對于大型網(wǎng)站技術(shù)的理解,可以從架構(gòu)技術(shù)原理的組織方式以架構(gòu)要素作為維度,從系統(tǒng)性能、可用性、伸縮性、擴(kuò)展性、安全性幾個角度闡述網(wǎng)站架構(gòu)的技術(shù)要點。還有另一種較為直觀的組織方式,是從不同架構(gòu)層次所使用的網(wǎng)站架構(gòu)技術(shù)這個維度進(jìn)行描述的。
網(wǎng)站系統(tǒng)架構(gòu)層次如下圖所示:
這個網(wǎng)站架構(gòu)層次,共分為8個層次,其中數(shù)據(jù)庫中心機(jī)房架構(gòu)是上面所有架構(gòu)的物理基礎(chǔ);安全架構(gòu)和數(shù)據(jù)庫采集監(jiān)控架構(gòu)是貫穿在各個層次的重要保障,這兩個架構(gòu)主要解決五個業(yè)務(wù)相關(guān)層次的安全問題和數(shù)據(jù)采集監(jiān)控問題,是一直都需要關(guān)注的地方;
對于目前的大型網(wǎng)絡(luò)來看,可以分為前端、應(yīng)用層、服務(wù)層、存儲層、后臺等5個方面,簡單來說,前端存放的是靜態(tài)網(wǎng)頁,不涉及業(yè)務(wù),就是為了客戶端能夠及時響應(yīng),并展現(xiàn)一些靜態(tài)內(nèi)容;應(yīng)用層是處理業(yè)務(wù)邏輯的地方,前端開發(fā)的代碼,主要就是發(fā)布在這個地方,實際用戶的各種業(yè)務(wù)處理,也主要在這個地方進(jìn)行;服務(wù)層介于應(yīng)用層和存儲層之間,主要為兩者提供各種分布式服務(wù),比如分布式緩存,能減少存儲層的壓力,并盡快響應(yīng)應(yīng)用層的請求,提高性能;存儲層是存放各種業(yè)務(wù)數(shù)據(jù)的地方,包括關(guān)系型、非關(guān)系型數(shù)據(jù)庫、文件已經(jīng)它們之間的數(shù)據(jù)同步;上面4個層次可以說是實時的業(yè)務(wù)功能,有一個層次出現(xiàn)問題,就會直接影響用戶體驗,在這4個層次后面,還有一個后臺,它是不直接與用戶溝通,但從上面的業(yè)務(wù)中通過搜索引擎、數(shù)據(jù)倉庫、推薦系統(tǒng)等,創(chuàng)造更加有價值的信息,在后臺為業(yè)務(wù)提供支撐。
1.前端架構(gòu)
(包括:瀏覽器優(yōu)化技術(shù)、CDN、動靜分離,靜態(tài)資源獨(dú)立部署、圖片服務(wù)、反向代理、DNS等7種技術(shù))
前端指用戶請求到達(dá)網(wǎng)站應(yīng)用服務(wù)器之前經(jīng)歷的環(huán)節(jié),通常不包含網(wǎng)站業(yè)務(wù)邏輯,不處理動態(tài)內(nèi)容。一般打開網(wǎng)頁或界面時,一輸入URL就可以看到的信息,就屬于這部分,然后再慢慢加載的,就是后面業(yè)務(wù)層的內(nèi)容了,因為內(nèi)容都是靜態(tài)的,不會發(fā)生改變,所有可以在各個地方準(zhǔn)備好,放在CDN中,達(dá)到瞬時響應(yīng)的效果。為了實現(xiàn)這樣的效果,有下面幾種架構(gòu)技術(shù):
瀏覽器優(yōu)化技術(shù)
并不是優(yōu)化瀏覽器,而是通過優(yōu)化響應(yīng)頁面,加快瀏覽器頁面的加載和顯示,常用的有頁面緩存、合并HTTP減少請求次數(shù)、使用頁面壓縮等。
CDN
內(nèi)容分發(fā)網(wǎng)絡(luò),部署在網(wǎng)絡(luò)運(yùn)營商機(jī)房,通過將靜態(tài)頁面內(nèi)容分發(fā)到離用戶最近最近的CDN服務(wù)器,使用戶可以通過最短路徑獲取內(nèi)容。
動靜分離,靜態(tài)資源獨(dú)立部署
靜態(tài)資源,如JS、CSS等文件部署在專門的服務(wù)器集群上,和Web應(yīng)用動態(tài)內(nèi)容服務(wù)分離,并使用專門的(二級)域名。
圖片服務(wù)
圖片不是指網(wǎng)站Logo、按鈕圖標(biāo)等,這些文件屬于上面提到的靜態(tài)資源,應(yīng)該和JS、CSS部署在一起。這里的圖片指用戶上傳的圖片,如產(chǎn)品圖片、用戶頭像等,圖片服務(wù)同樣適用獨(dú)立部署的圖片服務(wù)器集群,并使用獨(dú)立(二級)域名。
反向代理
部署在網(wǎng)站機(jī)房,在應(yīng)用服務(wù)器、靜態(tài)資源服務(wù)器、圖片服務(wù)器之前,提供頁面緩存服務(wù)。
DNS
域名服務(wù),將域名解析成IP地址,利用DNS可以實現(xiàn)DNS負(fù)載均衡,配置CDN也需要修改DNS,使域名解析后指向CDN服務(wù)器。
2.應(yīng)用層架構(gòu)
(包括:開發(fā)框架、頁面渲染、負(fù)載均衡、Session管理、動態(tài)頁面靜態(tài)化、業(yè)務(wù)拆分、虛擬化服務(wù)器等7種技術(shù))
應(yīng)用層是處理網(wǎng)站主要業(yè)務(wù)邏輯的地方。一般說的使用PHP或則Java等技術(shù)實現(xiàn)的網(wǎng)絡(luò)邏輯和前端框架,就是指這部分的內(nèi)容,該部分是交互式業(yè)務(wù)實現(xiàn)的主要層次,相應(yīng)的架構(gòu)技術(shù)有:
開發(fā)框架
網(wǎng)站業(yè)務(wù)是多變的,網(wǎng)站的大部分軟件工程師都是在加班加點開發(fā)網(wǎng)站業(yè)務(wù),一個好的開發(fā)框架至關(guān)重要。一個號的開發(fā)框架應(yīng)該能夠分離關(guān)注面,使美工、開發(fā)工程師可以各司其事,易于協(xié)作。同時還應(yīng)該內(nèi)置一些安全策略,防護(hù)Web用攻擊。
頁面渲染
將分別開發(fā)維護(hù)的動態(tài)內(nèi)容和靜態(tài)頁面模板集成起來,組合成最終顯示給用戶的完整頁面。
負(fù)載均衡
將多臺應(yīng)用服務(wù)器組成一個集群,通過負(fù)載均衡技術(shù)將用戶請求分發(fā)到不同的服務(wù)器上,以應(yīng)對大量用戶同時訪問時產(chǎn)生的高并發(fā)負(fù)載壓力。
Session管理
為了實現(xiàn)高可用的應(yīng)用服務(wù)器集群,應(yīng)用服務(wù)器通常設(shè)計為無狀態(tài),不保存用戶請求上下文信息,但是網(wǎng)站業(yè)務(wù)通常需要保持用戶會話信息,需要專門的機(jī)制管理Session,使集群內(nèi)甚至跨集群的應(yīng)用服務(wù)器可以共享Session。
動態(tài)頁面靜態(tài)化
對于訪問量特別大而更新又不很頻繁的動態(tài)頁面,可以將其靜態(tài)化,即生成一個靜態(tài)頁面,利用靜態(tài)頁面的優(yōu)化手段加速用戶訪問,如反向代理、CDN、瀏覽器緩存等。
業(yè)務(wù)拆分
將復(fù)雜而龐大的業(yè)務(wù)拆分開來,形成多個規(guī)模較小的產(chǎn)品,獨(dú)立開發(fā)、部署、維護(hù),除了降低系統(tǒng)耦合度,也便于數(shù)據(jù)庫業(yè)務(wù)分庫。按業(yè)務(wù)對關(guān)系數(shù)據(jù)庫進(jìn)行拆分,技術(shù)難度相對較小,而效果又相對較好。
虛擬化服務(wù)器
將一臺物理服務(wù)器虛擬化成多態(tài)虛擬服務(wù)器,對于并發(fā)訪問較低的業(yè)務(wù),更容易用較少的資源構(gòu)架高可用的應(yīng)用服務(wù)器集群。
3.服務(wù)層架構(gòu)
(包括:分布式消息、分布式服務(wù)、分布式緩存、分布式配置等4種技術(shù))
提供基礎(chǔ)服務(wù),供應(yīng)用層調(diào)用,完成網(wǎng)站業(yè)務(wù)。服務(wù)層介于應(yīng)用層和存儲層之間,顧名思義就是為應(yīng)用層提供各種服務(wù)的,而服務(wù)層本身內(nèi)容的來源,又可能與存儲層有關(guān),比如緩存就是將存儲層中的一部分?jǐn)?shù)據(jù)做以加工和展現(xiàn),供應(yīng)用層快速調(diào)用的。服務(wù)層的架構(gòu)技術(shù)主要是幾種分布式的服務(wù)功能:
分布式消息
利用消息隊列機(jī)制,實現(xiàn)業(yè)務(wù)和業(yè)務(wù)、業(yè)務(wù)和服務(wù)之間的異步消息發(fā)送及低耦合的業(yè)務(wù)關(guān)系。
分布式服務(wù)
提供高性能、低耦合、易復(fù)用、易管理的分布式服務(wù),在網(wǎng)站實現(xiàn)面向服務(wù)架構(gòu)(SOA)。
分布式緩存
通過可伸縮的服務(wù)器集群提供大規(guī)模熱點數(shù)據(jù)的緩存服務(wù),是網(wǎng)站性能優(yōu)化的重要手段。
分布式配置
系統(tǒng)運(yùn)行需要配置許多參數(shù),如果這些參數(shù)需要修改,比如分布式緩存集群加入新的緩存服務(wù)器,需要修改應(yīng)用程序客戶端的緩存服務(wù)器列表配置,并重啟應(yīng)用程序服務(wù)器。分布式配置在系統(tǒng)運(yùn)行期提供配置動態(tài)推送服務(wù),將配置修改實時推送到應(yīng)用系統(tǒng),無需重啟服務(wù)器。
4.存儲層架構(gòu)
(包括:分布式文件、關(guān)系數(shù)據(jù)庫、NoSQL數(shù)據(jù)庫、數(shù)據(jù)同步等4種技術(shù))
提供數(shù)據(jù)、文件的持久化存儲訪問與管理服務(wù)。該層次也是一般意義上的數(shù)據(jù)庫層,主要用來存放各種數(shù)據(jù)的,當(dāng)然在大型網(wǎng)站中數(shù)據(jù)層的概念,不僅包括傳統(tǒng)關(guān)系型數(shù)據(jù)庫,還包括分布式文件數(shù)據(jù),nosql數(shù)據(jù)庫以及數(shù)據(jù)同步技術(shù)。存儲層的架構(gòu)技術(shù)主要有:
分布式文件
網(wǎng)站在線業(yè)務(wù)需要存儲的文件大部分都是圖片、網(wǎng)頁、視頻等比較小的文件,但是這些文件的數(shù)量非常龐大,而且通常都在持續(xù)增加,需要伸縮性設(shè)計比較好的分布式文件系統(tǒng)。
關(guān)系數(shù)據(jù)庫
大部分萬丈的主要業(yè)務(wù)是基于關(guān)系數(shù)據(jù)庫開發(fā)的,但是關(guān)系數(shù)據(jù)庫對集群伸縮性的支持表較差。通過在應(yīng)用程序的數(shù)據(jù)訪問層增加數(shù)據(jù)庫訪問的路由功能,根據(jù)業(yè)務(wù)配置將數(shù)據(jù)庫訪問路由到不同的物理數(shù)據(jù)庫上,可實現(xiàn)關(guān)系數(shù)據(jù)庫的分布式訪問。
NoSQL數(shù)據(jù)庫
目前各種NoSQL數(shù)據(jù)庫層出不窮,在內(nèi)存管理、數(shù)據(jù)模型、集群分布式管理等方面各有優(yōu)勢,不過從社區(qū)活動性角度看,Hbase無疑是目前最好的。
數(shù)據(jù)同步
在支持全球范圍內(nèi)數(shù)據(jù)共享的分布式數(shù)據(jù)庫技術(shù)成熟之前,擁有多個數(shù)據(jù)中心的網(wǎng)站必須在多個數(shù)據(jù)中心之間進(jìn)行數(shù)據(jù)同步,以保證每個數(shù)據(jù)中心都擁有完整的數(shù)據(jù)。在實踐中,為了減輕數(shù)據(jù)庫壓力,將數(shù)據(jù)庫的事物日志(或者NoSQL的寫操作Log)同步到其他數(shù)據(jù)中心,根據(jù)Log進(jìn)行數(shù)據(jù)重演,實現(xiàn)數(shù)據(jù)同步。
5.后臺架構(gòu)
(包括:搜索引擎、數(shù)據(jù)倉庫、推薦系統(tǒng)等3種技術(shù))
網(wǎng)站應(yīng)用中,除了要處理用戶的實時訪問請求外,還有一些后臺非實時數(shù)據(jù)分析要處理。后臺架構(gòu)主要是進(jìn)行一些非實時操作,對前端業(yè)務(wù)處理提供支撐,主要的架構(gòu)技術(shù)有:
搜索引擎
即使是網(wǎng)站內(nèi)部的搜索引擎,也需要進(jìn)行數(shù)據(jù)增量更新及全量更新、構(gòu)建索引等。這些操作通過后臺系統(tǒng)定時執(zhí)行。
數(shù)據(jù)倉庫
根據(jù)離線數(shù)據(jù),提供數(shù)據(jù)分析與數(shù)據(jù)挖掘服務(wù)。
推薦系統(tǒng)
社交網(wǎng)站及購物網(wǎng)站通過挖掘人與人之間的關(guān)系,人和商品之間的關(guān)系,發(fā)展?jié)撛诘娜穗H關(guān)系和購物興趣,為用戶提供個性化推薦服務(wù)。
6.數(shù)據(jù)采集與監(jiān)控
(包括:瀏覽器數(shù)據(jù)采集、服務(wù)器業(yè)務(wù)數(shù)據(jù)采集、服務(wù)器性能數(shù)據(jù)采集、系統(tǒng)監(jiān)控、系統(tǒng)報警等5種技術(shù))
監(jiān)控網(wǎng)站訪問情況與系統(tǒng)運(yùn)行情況,為網(wǎng)站運(yùn)營決策和運(yùn)維管理提供支持保障。數(shù)據(jù)采集與監(jiān)控存在于整個業(yè)務(wù)架構(gòu)的生命周期,在業(yè)務(wù)上線后,業(yè)務(wù)運(yùn)行狀態(tài)是否正常,運(yùn)維人員日常做的主要工作,就是數(shù)據(jù)采集與監(jiān)控,在業(yè)務(wù)系統(tǒng)發(fā)生故障或者性能問題時,也需要改系統(tǒng)進(jìn)行支持和問題定位,進(jìn)而解決問題。該層次的主要架構(gòu)技術(shù)有:
瀏覽器數(shù)據(jù)采集
通過在網(wǎng)站頁面中嵌入JS腳本采集用戶瀏覽器環(huán)境與操作記錄,分析用戶行為。
服務(wù)器業(yè)務(wù)數(shù)據(jù)采集
服務(wù)器業(yè)務(wù)數(shù)據(jù)包括兩種,一種是采集在服務(wù)器端記錄的用戶請求操作日志;一種是采集應(yīng)用程序運(yùn)行期業(yè)務(wù)數(shù)據(jù),比如待處理消息數(shù)目等。
服務(wù)器性能數(shù)據(jù)采集
采集服務(wù)器性能數(shù)據(jù),如系統(tǒng)負(fù)載、內(nèi)存使用率、網(wǎng)卡流量等。
系統(tǒng)監(jiān)控
將前述采集的數(shù)據(jù)以圖表的方式展示,以便運(yùn)營和運(yùn)維人員監(jiān)控網(wǎng)站運(yùn)行狀況,做到這一步僅僅是系統(tǒng)監(jiān)視。更先進(jìn)的做法是根據(jù)采集的數(shù)據(jù)進(jìn)行自動化運(yùn)維,自動處理系統(tǒng)異常狀況,是吸納自動化控制。
系統(tǒng)報警
如果采集來的數(shù)據(jù)超過預(yù)設(shè)的正常情況的閥值,比如系統(tǒng)負(fù)載過高,就通過郵件、短信、語音電話等方式發(fā)出警報信號,等待工程師干預(yù)。
7.安全架構(gòu)
(包括:Web攻擊、數(shù)據(jù)保護(hù)等2種技術(shù))
保護(hù)網(wǎng)站免遭攻擊及敏感信息泄露。安全也業(yè)務(wù)能夠正常運(yùn)行的一個非常重要的問題,安全主要有兩方面,一是來自外邊的攻擊與防護(hù),會影響到網(wǎng)站業(yè)務(wù)的可用性和性能;二是網(wǎng)站內(nèi)部的數(shù)據(jù)安裝和保護(hù),會影響到數(shù)據(jù)層總的敏感信息。安全架構(gòu)技術(shù)主要有:
Web攻擊
以HTTP請求的方式發(fā)起的攻擊,危害最大的就是XSS和SQL注入攻擊。但是只要措施得當(dāng),這兩種攻擊都是比較容易防范的。
數(shù)據(jù)保護(hù)
敏感信息加密傳輸與存儲,保護(hù)網(wǎng)站和用戶資產(chǎn)。
8.數(shù)據(jù)中心機(jī)房架構(gòu)
(包括:機(jī)房架構(gòu)、機(jī)柜架構(gòu)、服務(wù)器架構(gòu)等3種技術(shù))
大型網(wǎng)站需要的服務(wù)器規(guī)模數(shù)以十萬計,機(jī)房物理架構(gòu)也需要關(guān)注。對于大型網(wǎng)絡(luò)系統(tǒng)來說,物理服務(wù)器數(shù)量必然是非常巨大的,這樣在機(jī)房、機(jī)柜、服務(wù)器等層次都要有相應(yīng)的規(guī)劃,這樣才能比較好的支撐上面的各個層次。
機(jī)房架構(gòu)
對于一個擁有十萬臺服務(wù)器的大型網(wǎng)站,每臺服務(wù)器耗電(包括服務(wù)器本身耗電及空調(diào)耗電)每年大約需要人民幣2000元,那么網(wǎng)站每年機(jī)房電費(fèi)就需要兩億人民幣。數(shù)據(jù)中心能耗問題日趨嚴(yán)重,Google、Facebook選擇數(shù)據(jù)中心地理位置的時候趨向選擇散熱良好,供電充裕的地方。
機(jī)柜架構(gòu)
包括機(jī)柜大小,網(wǎng)線布局、指示燈規(guī)格、不間斷電源、電壓規(guī)格(是48V直流電還是220V民用交流電)等一系列問題。
服務(wù)器架構(gòu)
大型網(wǎng)站由于服務(wù)器采購規(guī)模龐大,大都采用定制服務(wù)器的方式代替購買服務(wù)器整機(jī)。根據(jù)網(wǎng)站應(yīng)用需求,定制硬盤、內(nèi)存、甚至CPU,同時去除不必要的外設(shè)接口(顯示器輸出接口,鼠標(biāo)、鍵盤輸入接口),并使空間結(jié)構(gòu)利于散熱。
原文:https://blog.csdn.net/wwd0501/article/details/47838871
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由信途科技轉(zhuǎn)載于網(wǎng)絡(luò),如有侵權(quán)聯(lián)系站長刪除。
轉(zhuǎn)載請注明出處http://www.quickersubmitter.com/xintu/16857.html