大型網站架構技術一(yī)覽
- 發布時間: 2016-03-09 16:24:03
- 浏覽次數: 1666
本文內(nèi)容大部分來自(zì)《大型網站技術架構》,這本書很值得一(yī)看,強烈推薦。
網站系統架構層次如(rú)下圖所示:
1.前端架構
前端指用戶請求到達網站應用服務器之前經曆的(de)環節,通常不包含網站業務邏輯,不處理(lǐ)動态內(nèi)容。
浏覽器優化技術
并不是優化浏覽器,而是通過優化響應頁面,加快浏覽器頁面的(de)加載和(hé)顯示,常用的(de)有頁面緩存、合并HTTP減少請求次數、使用頁面壓縮等。
CDN
內(nèi)容分發網絡,部署在網絡運營商機房,通過将靜态頁面內(nèi)容分發到離(lí)用戶最近最近的(de)CDN服務器,使用戶可(kě)以通過最短(duǎn)路徑獲取內(nèi)容。
動靜分離(lí),靜态資源獨立部署
靜态資源,如(rú)JS、CSS等文件部署在專門的(de)服務器集群上,和(hé)Web應用動态內(nèi)容服務分離(lí),并使用專門的(de)(二級)域名。
圖片服務
圖片不是指網站Logo、按鈕圖标等,這些文件屬于上面提到的(de)靜态資源,應該和(hé)JS、CSS部署在一(yī)起。這裏的(de)圖片指用戶上傳的(de)圖片,如(rú)産品圖片、用戶頭像等,圖片服務同樣适用獨立部署的(de)圖片服務器集群,并使用獨立(二級)域名。
反向代理(lǐ)
部署在網站機房,在應用服務器、靜态資源服務器、圖片服務器之前,提供頁面緩存服務。
DNS
域名服務,将域名解析成IP地(dì)址,利用DNS可(kě)以實現DNS負載均衡,配置CDN也需要修改DNS,使域名解析後指向CDN服務器。
2.應用層架構
應用層是處理(lǐ)網站主要業務邏輯的(de)地(dì)方。
開發框架
網站業務是多變的(de),網站的(de)大部分軟件工程師都是在加班加點開發網站業務,一(yī)個好的(de)開發框架至關重要。一(yī)個号的(de)開發框架應該能夠分離(lí)關注面,使美工、開發工程師可(kě)以各司其事,易于協作。同時還應該內(nèi)置一(yī)些安全策略,防護Web用攻擊。
頁面渲染
将分别開發維護的(de)動态內(nèi)容和(hé)靜态頁面模闆集成起來,組合成最終顯示給用戶的(de)完整頁面。
負載均衡
将多台應用服務器組成一(yī)個集群,通過負載均衡技術将用戶請求分發到不同的(de)服務器上,以應對大量用戶同時訪問時産生的(de)高(gāo)并發負載壓力。
Session管理(lǐ)
為(wèi)了實現高(gāo)可(kě)用的(de)應用服務器集群,應用服務器通常設計為(wèi)無狀态,不保存用戶請求上下文信息,但是網站業務通常需要保持用戶會話信息,需要專門的(de)機制管理(lǐ)Session,使集群內(nèi)甚至跨集群的(de)應用服務器可(kě)以共享Session。
動态頁面靜态化
對于訪問量特别大而更新又不很頻繁的(de)動态頁面,可(kě)以将其靜态化,即生成一(yī)個靜态頁面,利用靜态頁面的(de)優化手段加速用戶訪問,如(rú)反向代理(lǐ)、CDN、浏覽器緩存等。
業務拆分
将複雜而龐大的(de)業務拆分開來,形成多個規模較小的(de)産品,獨立開發、部署、維護,除了降低(dī)系統耦合度,也便于數據庫業務分庫。按業務對關系數據庫進行拆分,技術難度相對較小,而效果又相對較好。
虛拟化服務器
将一(yī)台物理(lǐ)服務器虛拟化成多态虛拟服務器,對于并發訪問較低(dī)的(de)業務,更容易用較少的(de)資源構架高(gāo)可(kě)用的(de)應用服務器集群。
3.服務層架構
提供基礎服務,供應用層調用,完成網站業務。
分布式消息
利用消息隊列機制,實現業務和(hé)業務、業務和(hé)服務之間的(de)異步消息發送及低(dī)耦合的(de)業務關系。
分布式服務
提供高(gāo)性能、低(dī)耦合、易複用、易管理(lǐ)的(de)分布式服務,在網站實現面向服務架構(SOA)。
分布式緩存
通過可(kě)伸縮的(de)服務器集群提供大規模熱點數據的(de)緩存服務,是網站性能優化的(de)重要手段。
分布式配置
系統運行需要配置許多參數,如(rú)果這些參數需要修改,比如(rú)分布式緩存集群加入新的(de)緩存服務器,需要修改應用程序客戶端的(de)緩存服務器列表配置,并重啓應用程序服務器。分布式配置在系統運行期提供配置動态推送服務,将配置修改實時推送到應用系統,無需重啓服務器。
4.存儲層架構
提供數據、文件的(de)持久化存儲訪問與管理(lǐ)服務。
分布式文件
網站在線業務需要存儲的(de)文件大部分都是圖片、網頁、視(shì)頻等比較小的(de)文件,但是這些文件的(de)數量非常龐大,而且通常都在持續增加,需要伸縮性設計比較好的(de)分布式文件系統。
關系數據庫
大部分萬丈的(de)主要業務是基于關系數據庫開發的(de),但是關系數據庫對集群伸縮性的(de)支持表較差。通過在應用程序的(de)數據訪問層增加數據庫訪問的(de)路由功能,根據業務配置将數據庫訪問路由到不同的(de)物理(lǐ)數據庫上,可(kě)實現關系數據庫的(de)分布式訪問。
NoSQL數據庫
目前各種NoSQL數據庫層出不窮,在內(nèi)存管理(lǐ)、數據模型、集群分布式管理(lǐ)等方面各有優勢,不過從社區活動性角度看,HBase無疑是目前最好的(de)。
數據同步
在支持全球範圍內(nèi)數據共享的(de)分布式數據庫技術成熟之前,擁有多個數據中心的(de)網站必須在多個數據中心之間進行數據同步,以保證每個數據中心都擁有完整的(de)數據。在實踐中,為(wèi)了減輕數據庫壓力,将數據庫的(de)事物日志(或者NoSQL的(de)寫操作Log)同步到其他數據中心,根據Log進行數據重演,實現數據同步。
5.後台架構
網站應用中,除了要處理(lǐ)用戶的(de)實時訪問請求外,還有一(yī)些後台非實時數據分析要處理(lǐ)。
搜索引擎
即使是網站內(nèi)部的(de)搜索引擎,也需要進行數據增量更新及全量更新、構建索引等。這些操作通過後台系統定時執行。
數據倉庫
根據離(lí)線數據,提供數據分析與數據挖掘服務。
推薦系統
社交網站及購物網站通過挖掘人與人之間的(de)關系,人和(hé)商品之間的(de)關系,發展潛在的(de)人際關系和(hé)購物興趣,為(wèi)用戶提供個性化推薦服務。
6.數據采集與監控
監控網站訪問情況與系統運行情況,為(wèi)網站運營決策和(hé)運維管理(lǐ)提供支持保障。
浏覽器數據采集
通過在網站頁面中嵌入JS腳本采集用戶浏覽器環境與操作記錄,分析用戶行為(wèi)。
服務器業務數據采集
服務器業務數據包括兩種,一(yī)種是采集在服務器端記錄的(de)用戶請求操作日志;一(yī)種是采集應用程序運行期業務數據,比如(rú)待處理(lǐ)消息數目等。
服務器性能數據采集
采集服務器性能數據,如(rú)系統負載、內(nèi)存使用率、網卡流量等。
系統監控
将前述采集的(de)數據以圖表的(de)方式展示,以便運營和(hé)運維人員監控網站運行狀況,做(zuò)到這一(yī)步僅僅是系統監視(shì)。更先進的(de)做(zuò)法是根據采集的(de)數據進行自(zì)動化運維,自(zì)動處理(lǐ)系統異常狀況,是吸納自(zì)動化控制。
系統報警
如(rú)果采集來的(de)數據超過預設的(de)正常情況的(de)閥值,比如(rú)系統負載過高(gāo),就通過郵件、短(duǎn)信、語音電話等方式發出警報信号,等待工程師幹預。
7.安全架構
保護網站免遭攻擊及敏感信息洩露。
Web攻擊
以HTTP請求的(de)方式發起的(de)攻擊,危害最大的(de)就是XSS和(hé)SQL注入攻擊。但是隻要措施得當,這兩種攻擊都是比較容易防範的(de)。
數據保護
敏感信息加密傳輸與存儲,保護網站和(hé)用戶資産。
8.數據中心機房架構
大型網站需要的(de)服務器規模數以十萬計,機房物理(lǐ)架構也需要關注。
機房架構
對于一(yī)個擁有十萬台服務器的(de)大型網站,每台服務器耗電(包括服務器本身耗電及空調耗電)每年(nián)大約需要人民币2000元,那麽網站每年(nián)機房電費就需要兩億人民币。數據中心能耗問題日趨嚴重,Google、Facebook選擇數據中心地(dì)理(lǐ)位置的(de)時候趨向選擇散熱良好,供電充裕的(de)地(dì)方。
機櫃架構
包括機櫃大小,網線布局、指示燈規格、不間斷電源、電壓規格(是48V直流電還是220V民用交流電)等一(yī)系列問題。
服務器架構
大型網站由于服務器采購規模龐大,大都采用定制服務器的(de)方式代替購買服務器整機。根據網站應用需求,定制硬盤、內(nèi)存、甚至CPU,同時去(qù)除不必要的(de)外設接口(顯示器輸出接口,鼠标、鍵盤輸入接口),并使空間結構利于散熱。