大型網(wǎng)站的挑戰(zhàn)主要來(lái)自龐大的用戶(hù)劲件,高并發(fā)的訪問(wèn)和海量數(shù)據(jù)未巫,任何簡(jiǎn)單的業(yè)務(wù)一旦需要處理數(shù)以P計(jì)的數(shù)據(jù)和面對(duì)數(shù)以?xún)|計(jì)的用戶(hù)唇敞,問(wèn)題就會(huì)變得棘手蔗草。大型網(wǎng)站架構(gòu)主要就是解決這類(lèi)問(wèn)題。更多內(nèi)容也可以閱讀各大互聯(lián)網(wǎng)公司架構(gòu)演進(jìn)之路匯總疆柔、大型網(wǎng)站架構(gòu)演化歷程兩篇文章蕉世。
整體架構(gòu)圖
這個(gè)網(wǎng)站架構(gòu)層次,共分為8個(gè)層次婆硬,其中數(shù)據(jù)庫(kù)中心機(jī)房架構(gòu)是上面所有架構(gòu)的物理基礎(chǔ);安全架構(gòu)和數(shù)據(jù)庫(kù)采集監(jiān)控架構(gòu)是貫穿在各個(gè)層次的重要保障奸例,這兩個(gè)架構(gòu)主要解決五個(gè)業(yè)務(wù)相關(guān)層次的安全問(wèn)題和數(shù)據(jù)采集監(jiān)控問(wèn)題彬犯,是一直都需要關(guān)注的地方; 對(duì)于目前的大型網(wǎng)絡(luò)來(lái)看查吊,可以分為前端谐区、應(yīng)用層、服務(wù)層逻卖、存儲(chǔ)層宋列、后臺(tái)等5個(gè)方面,簡(jiǎn)單來(lái)說(shuō)评也,前端存放的是靜態(tài)網(wǎng)頁(yè)炼杖,不涉及業(yè)務(wù),就是為了客戶(hù)端能夠及時(shí)響應(yīng)盗迟,并展現(xiàn)一些靜態(tài)內(nèi)容坤邪;應(yīng)用層是處理業(yè)務(wù)邏輯的地方,前端開(kāi)發(fā)的代碼罚缕,主要就是發(fā)布在這個(gè)地方艇纺,實(shí)際用戶(hù)的各種業(yè)務(wù)處理,也主要在這個(gè)地方進(jìn)行邮弹;服務(wù)層介于應(yīng)用層和存儲(chǔ)層之間黔衡,主要為兩者提供各種分布式服務(wù),比如分布式緩存腌乡,能減少存儲(chǔ)層的壓力盟劫,并盡快響應(yīng)應(yīng)用層的請(qǐng)求,提高性能导饲;存儲(chǔ)層是存放各種業(yè)務(wù)數(shù)據(jù)的地方捞高,包括關(guān)系型氯材、非關(guān)系型數(shù)據(jù)庫(kù)、文件已經(jīng)它們之間的數(shù)據(jù)同步硝岗;上面4個(gè)層次可以說(shuō)是實(shí)時(shí)的業(yè)務(wù)功能氢哮,有一個(gè)層次出現(xiàn)問(wèn)題,就會(huì)直接影響用戶(hù)體驗(yàn)型檀,在這4個(gè)層次后面冗尤,還有一個(gè)后臺(tái),它是不直接與用戶(hù)溝通胀溺,但從上面的業(yè)務(wù)中通過(guò)搜索引擎裂七、數(shù)據(jù)倉(cāng)庫(kù)、推薦系統(tǒng)等仓坞,創(chuàng)造更加有價(jià)值的信息背零,在后臺(tái)為業(yè)務(wù)提供支撐。
1.前端架構(gòu)
前端指用戶(hù)請(qǐng)求到達(dá)網(wǎng)站應(yīng)用服務(wù)器之前經(jīng)歷的環(huán)節(jié)无埃,通常不包含網(wǎng)站業(yè)務(wù)邏輯徙瓶,不處理動(dòng)態(tài)內(nèi)容。
瀏覽器優(yōu)化技術(shù)
并不是優(yōu)化瀏覽器嫉称,而是通過(guò)優(yōu)化響應(yīng)頁(yè)面侦镇,加快瀏覽器頁(yè)面的加載和顯示,常用的有頁(yè)面緩存织阅、合并HTTP減少請(qǐng)求次數(shù)壳繁、使用頁(yè)面壓縮等。
CDN
內(nèi)容分發(fā)網(wǎng)絡(luò)荔棉,部署在網(wǎng)絡(luò)運(yùn)營(yíng)商機(jī)房闹炉,通過(guò)將靜態(tài)頁(yè)面內(nèi)容分發(fā)到離用戶(hù)最近最近的CDN服務(wù)器,使用戶(hù)可以通過(guò)最短路徑獲取內(nèi)容润樱。
動(dòng)靜分離剩胁,靜態(tài)資源獨(dú)立部署
靜態(tài)資源,如JS祥国、CSS等文件部署在專(zhuān)門(mén)的服務(wù)器集群上昵观,和Web應(yīng)用動(dòng)態(tài)內(nèi)容服務(wù)分離,并使用專(zhuān)門(mén)的(二級(jí))域名舌稀。
圖片服務(wù)
圖片不是指網(wǎng)站Logo啊犬、按鈕圖標(biāo)等,這些文件屬于上面提到的靜態(tài)資源壁查,應(yīng)該和JS觉至、CSS部署在一起。這里的圖片指用戶(hù)上傳的圖片睡腿,如產(chǎn)品圖片语御、用戶(hù)頭像等峻贮,圖片服務(wù)同樣適用獨(dú)立部署的圖片服務(wù)器集群,并使用獨(dú)立(二級(jí))域名应闯。
反向代理
部署在網(wǎng)站機(jī)房纤控,在應(yīng)用服務(wù)器、靜態(tài)資源服務(wù)器碉纺、圖片服務(wù)器之前船万,提供頁(yè)面緩存服務(wù)。
DNS
域名服務(wù)骨田,將域名解析成IP地址耿导,利用DNS可以實(shí)現(xiàn)DNS負(fù)載均衡,配置CDN也需要修改DNS态贤,使域名解析后指向CDN服務(wù)器舱呻。
2.應(yīng)用層架構(gòu)
應(yīng)用層是處理網(wǎng)站主要業(yè)務(wù)邏輯的地方。
開(kāi)發(fā)框架
網(wǎng)站業(yè)務(wù)是多變的悠汽,網(wǎng)站的大部分軟件工程師都是在加班加點(diǎn)開(kāi)發(fā)網(wǎng)站業(yè)務(wù)狮荔,一個(gè)好的開(kāi)發(fā)框架至關(guān)重要。一個(gè)號(hào)的開(kāi)發(fā)框架應(yīng)該能夠分離關(guān)注面介粘,使美工、開(kāi)發(fā)工程師可以各司其事晚树,易于協(xié)作姻采。同時(shí)還應(yīng)該內(nèi)置一些安全策略,防護(hù)Web用攻擊爵憎。
頁(yè)面渲染
將分別開(kāi)發(fā)維護(hù)的動(dòng)態(tài)內(nèi)容和靜態(tài)頁(yè)面模板集成起來(lái)慨亲,組合成最終顯示給用戶(hù)的完整頁(yè)面。
負(fù)載均衡
將多臺(tái)應(yīng)用服務(wù)器組成一個(gè)集群宝鼓,通過(guò)負(fù)載均衡技術(shù)將用戶(hù)請(qǐng)求分發(fā)到不同的服務(wù)器上刑棵,以應(yīng)對(duì)大量用戶(hù)同時(shí)訪問(wèn)時(shí)產(chǎn)生的高并發(fā)負(fù)載壓力。
Session管理
為了實(shí)現(xiàn)高可用的應(yīng)用服務(wù)器集群愚铡,應(yīng)用服務(wù)器通常設(shè)計(jì)為無(wú)狀態(tài)蛉签,不保存用戶(hù)請(qǐng)求上下文信息,但是網(wǎng)站業(yè)務(wù)通常需要保持用戶(hù)會(huì)話信息沥寥,需要專(zhuān)門(mén)的機(jī)制管理Session碍舍,使集群內(nèi)甚至跨集群的應(yīng)用服務(wù)器可以共享Session。
動(dòng)態(tài)頁(yè)面靜態(tài)化
對(duì)于訪問(wèn)量特別大而更新又不很頻繁的動(dòng)態(tài)頁(yè)面邑雅,可以將其靜態(tài)化片橡,即生成一個(gè)靜態(tài)頁(yè)面,利用靜態(tài)頁(yè)面的優(yōu)化手段加速用戶(hù)訪問(wèn)淮野,如反向代理捧书、CDN吹泡、瀏覽器緩存等。
業(yè)務(wù)拆分
將復(fù)雜而龐大的業(yè)務(wù)拆分開(kāi)來(lái)经瓷,形成多個(gè)規(guī)模較小的產(chǎn)品爆哑,獨(dú)立開(kāi)發(fā)、部署了嚎、維護(hù)泪漂,除了降低系統(tǒng)耦合度,也便于數(shù)據(jù)庫(kù)業(yè)務(wù)分庫(kù)歪泳。按業(yè)務(wù)對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行拆分萝勤,技術(shù)難度相對(duì)較小,而效果又相對(duì)較好呐伞。
虛擬化服務(wù)器
將一臺(tái)物理服務(wù)器虛擬化成多態(tài)虛擬服務(wù)器敌卓,對(duì)于并發(fā)訪問(wèn)較低的業(yè)務(wù),更容易用較少的資源構(gòu)架高可用的應(yīng)用服務(wù)器集群伶氢。
3.服務(wù)層架構(gòu)
提供基礎(chǔ)服務(wù)趟径,供應(yīng)用層調(diào)用,完成網(wǎng)站業(yè)務(wù)癣防。
分布式消息
利用消息隊(duì)列機(jī)制蜗巧,實(shí)現(xiàn)業(yè)務(wù)和業(yè)務(wù)、業(yè)務(wù)和服務(wù)之間的異步消息發(fā)送及低耦合的業(yè)務(wù)關(guān)系蕾盯。
分布式服務(wù)
提供高性能幕屹、低耦合、易復(fù)用级遭、易管理的分布式服務(wù)望拖,在網(wǎng)站實(shí)現(xiàn)面向服務(wù)架構(gòu)(SOA)。
分布式緩存
通過(guò)可伸縮的服務(wù)器集群提供大規(guī)模熱點(diǎn)數(shù)據(jù)的緩存服務(wù)挫鸽,是網(wǎng)站性能優(yōu)化的重要手段说敏。
分布式配置
系統(tǒng)運(yùn)行需要配置許多參數(shù),如果這些參數(shù)需要修改丢郊,比如分布式緩存集群加入新的緩存服務(wù)器盔沫,需要修改應(yīng)用程序客戶(hù)端的緩存服務(wù)器列表配置,并重啟應(yīng)用程序服務(wù)器枫匾。分布式配置在系統(tǒng)運(yùn)行期提供配置動(dòng)態(tài)推送服務(wù)迅诬,將配置修改實(shí)時(shí)推送到應(yīng)用系統(tǒng),無(wú)需重啟服務(wù)器婿牍。
4.存儲(chǔ)層架構(gòu)
提供數(shù)據(jù)侈贷、文件的持久化存儲(chǔ)訪問(wèn)與管理服務(wù)。
分布式文件
網(wǎng)站在線業(yè)務(wù)需要存儲(chǔ)的文件大部分都是圖片、網(wǎng)頁(yè)俏蛮、視頻等比較小的文件撑蚌,但是這些文件的數(shù)量非常龐大,而且通常都在持續(xù)增加搏屑,需要伸縮性設(shè)計(jì)比較好的分布式文件系統(tǒng)争涌。
關(guān)系數(shù)據(jù)庫(kù)
大部分萬(wàn)丈的主要業(yè)務(wù)是基于關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)的,但是關(guān)系數(shù)據(jù)庫(kù)對(duì)集群伸縮性的支持表較差辣恋。通過(guò)在應(yīng)用程序的數(shù)據(jù)訪問(wèn)層增加數(shù)據(jù)庫(kù)訪問(wèn)的路由功能亮垫,根據(jù)業(yè)務(wù)配置將數(shù)據(jù)庫(kù)訪問(wèn)路由到不同的物理數(shù)據(jù)庫(kù)上,可實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)的分布式訪問(wèn)伟骨。
NoSQL數(shù)據(jù)庫(kù)
目前各種NoSQL數(shù)據(jù)庫(kù)層出不窮饮潦,在內(nèi)存管理、數(shù)據(jù)模型携狭、集群分布式管理等方面各有優(yōu)勢(shì)继蜡,不過(guò)從社區(qū)活動(dòng)性角度看,HBase無(wú)疑是目前最好的逛腿。
數(shù)據(jù)同步
在支持全球范圍內(nèi)數(shù)據(jù)共享的分布式數(shù)據(jù)庫(kù)技術(shù)成熟之前稀并,擁有多個(gè)數(shù)據(jù)中心的網(wǎng)站必須在多個(gè)數(shù)據(jù)中心之間進(jìn)行數(shù)據(jù)同步,以保證每個(gè)數(shù)據(jù)中心都擁有完整的數(shù)據(jù)单默。在實(shí)踐中碘举,為了減輕數(shù)據(jù)庫(kù)壓力,將數(shù)據(jù)庫(kù)的事物日志(或者NoSQL的寫(xiě)操作Log)同步到其他數(shù)據(jù)中心搁廓,根據(jù)Log進(jìn)行數(shù)據(jù)重演引颈,實(shí)現(xiàn)數(shù)據(jù)同步。
5.后臺(tái)架構(gòu)
網(wǎng)站應(yīng)用中枚抵,除了要處理用戶(hù)的實(shí)時(shí)訪問(wèn)請(qǐng)求外,還有一些后臺(tái)非實(shí)時(shí)數(shù)據(jù)分析要處理明场。
搜索引擎
即使是網(wǎng)站內(nèi)部的搜索引擎汽摹,也需要進(jìn)行數(shù)據(jù)增量更新及全量更新、構(gòu)建索引等苦锨。這些操作通過(guò)后臺(tái)系統(tǒng)定時(shí)執(zhí)行逼泣。
數(shù)據(jù)倉(cāng)庫(kù)
根據(jù)離線數(shù)據(jù),提供數(shù)據(jù)分析與數(shù)據(jù)挖掘服務(wù)舟舒。
推薦系統(tǒng)
社交網(wǎng)站及購(gòu)物網(wǎng)站通過(guò)挖掘人與人之間的關(guān)系拉庶,人和商品之間的關(guān)系,發(fā)展?jié)撛诘娜穗H關(guān)系和購(gòu)物興趣秃励,為用戶(hù)提供個(gè)性化推薦服務(wù)氏仗。
6.數(shù)據(jù)采集與監(jiān)控
監(jiān)控網(wǎng)站訪問(wèn)情況與系統(tǒng)運(yùn)行情況,為網(wǎng)站運(yùn)營(yíng)決策和運(yùn)維管理提供支持保障
瀏覽器數(shù)據(jù)采集
通過(guò)在網(wǎng)站頁(yè)面中嵌入JS腳本采集用戶(hù)瀏覽器環(huán)境與操作記錄夺鲜,分析用戶(hù)行為皆尔。
服務(wù)器業(yè)務(wù)數(shù)據(jù)采集
服務(wù)器業(yè)務(wù)數(shù)據(jù)包括兩種呐舔,一種是采集在服務(wù)器端記錄的用戶(hù)請(qǐng)求操作日志;一種是采集應(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íng)和運(yùn)維人員監(jiān)控網(wǎng)站運(yùn)行狀況剑辫,做到這一步僅僅是系統(tǒng)監(jiān)視。更先進(jìn)的做法是根據(jù)采集的數(shù)據(jù)進(jìn)行自動(dòng)化運(yùn)維影兽,自動(dòng)處理系統(tǒng)異常狀況揭斧,是吸納自動(dòng)化控制。
系統(tǒng)報(bào)警
如果采集來(lái)的數(shù)據(jù)超過(guò)預(yù)設(shè)的正常情況的閥值峻堰,比如系統(tǒng)負(fù)載過(guò)高讹开,就通過(guò)郵件、短信捐名、語(yǔ)音電話等方式發(fā)出警報(bào)信號(hào)旦万,等待工程師干預(yù)。
7.安全架構(gòu)
保護(hù)網(wǎng)站免遭攻擊及敏感信息泄露镶蹋。
Web攻擊
以HTTP請(qǐng)求的方式發(fā)起的攻擊成艘,危害最大的就是XSS和SQL注入攻擊。但是只要措施得當(dāng)贺归,這兩種攻擊都是比較容易防范的淆两。
數(shù)據(jù)保護(hù)
敏感信息加密傳輸與存儲(chǔ),保護(hù)網(wǎng)站和用戶(hù)資產(chǎn)拂酣。
8.數(shù)據(jù)中心機(jī)房架構(gòu)
大型網(wǎng)站需要的服務(wù)器規(guī)模數(shù)以十萬(wàn)計(jì)秋冰,機(jī)房物理架構(gòu)也需要關(guān)注。
機(jī)房架構(gòu)
對(duì)于一個(gè)擁有十萬(wàn)臺(tái)服務(wù)器的大型網(wǎng)站婶熬,每臺(tái)服務(wù)器耗電(包括服務(wù)器本身耗電及空調(diào)耗電)每年大約需要人民幣2000元剑勾,那么網(wǎng)站每年機(jī)房電費(fèi)就需要兩億人民幣。數(shù)據(jù)中心能耗問(wèn)題日趨嚴(yán)重赵颅,Google虽另、Facebook選擇數(shù)據(jù)中心地理位置的時(shí)候趨向選擇散熱良好,供電充裕的地方饺谬。
機(jī)柜架構(gòu)
包括機(jī)柜大小捂刺,網(wǎng)線布局、指示燈規(guī)格、不間斷電源叠萍、電壓規(guī)格(是48V直流電還是220V民用交流電)等一系列問(wèn)題芝发。
服務(wù)器架構(gòu)
大型網(wǎng)站由于服務(wù)器采購(gòu)規(guī)模龐大,大都采用定制服務(wù)器的方式代替購(gòu)買(mǎi)服務(wù)器整機(jī)苛谷。根據(jù)網(wǎng)站應(yīng)用需求辅鲸,定制硬盤(pán)、內(nèi)存腹殿、甚至CPU独悴,同時(shí)去除不必要的外設(shè)接口(顯示器輸出接口,鼠標(biāo)锣尉、鍵盤(pán)輸入接口)刻炒,并使空間結(jié)構(gòu)利于散熱。
文章來(lái)源:http://blog.csdn.net/yumushui/article/details/45563527