大型網站架構的挑戰主要來自龐大的使用者,高并發的通路和海量資料,任何簡單的業務一旦需要處理數以P計的資料和面對數以億計的使用者,問題就會變得棘手。大型網站架構主要就是解決這類問題。更多内容也可以閱讀各大網際網路公司架構演進之路彙總、大型網站架構演化曆程兩篇文章。
大型網站系統架構層次如下圖所示:

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