標籤:

大型網站架構技術一覽

學習一門東西有如繪畫,必須打一個大輪廓,對全局發展變化有一個概略的認識,然後逐漸畫細節,施色彩,畫出一個有血有肉的人物來。

以上是朱光潛大師的一段論述,用於學習技術亦然。在互聯網公司做開發,必須對(大型)網站架構有一個全局的認識。

大型網站的挑戰主要來自龐大的用戶,高並發的訪問和海量數據,任何簡單的業務一旦需要處理數以P計的數據和面對數以億計的用戶,問題就會變得棘手。

前端架構

前端是指用戶請求未到達網站伺服器之前經歷的環節,通常不包括網站業務邏輯,不處理動態內容。

1 瀏覽器優化技術

不是優化瀏覽器,而是通過優化響應頁面,加快瀏覽器頁面的載入和顯示,常見方法有頁面緩存,合併HTTP減少請求次數,使用頁面壓縮等。

2 CDN

內容分發網路,部署在網路運營商機房,通過將靜態頁面內容分發到離用戶最近的CDN伺服器,是用戶可以通過最短路徑獲取內容。

3 動靜分離

靜態資源,如JS,CSS等文件部署在專門的伺服器集群上,和web應用動態內容服務分離,並使用專門的(二級)域名

4 圖片服務

圖片不是指網站Logo,按鈕圖標等,這些文件屬於靜態資源,應該和JS,CSS部署在一起。這裡的圖片是指用戶上傳的圖片,圖片服務同樣適用獨立部署的圖片伺服器集群,並使用獨立(二級)域名

5 反向代理

部署在網站機房,並在應用伺服器、靜態資源伺服器、圖片伺服器之前,提供頁面緩存服務。

6 DNS

域名服務,將域名解析成IP地址。配置CDN也需要修改DNS,使域名解析後指向CDN伺服器。

應用層架構

應用層是指處理網站主要業務邏輯的地方

1 開發框架

網站業務是多變的,為了提高開發效率,好的開發框架至關重要。好的開發框架能夠分離關注面,還有一些安全策略,防護web攻擊。

2 頁面渲染

將分別開發維護的動態內容和靜態內容頁面模板集成起來,組合成最終顯示給用戶的完整頁面。

3 負載均衡

將多台應用伺服器組成一個集群,通過負載均衡將用戶請求分發到不同的伺服器上,以應對大量用戶訪問時的高並發負載壓力。

4 session管理

為了實現高可用應用伺服器集群,應用伺服器通常設計為無狀態,不保存用戶的上下文信息,但是網站業務需要保存用戶會話信息,需要專門的機制管理session,使集群內甚至跨集群的應用伺服器可以共享。

5 動態頁面靜態化

對於訪問量巨大而更新不是很頻繁的頁面,可以將其靜態化,即生成一個靜態頁面,利用靜態頁面的優化手段加速用戶訪問,如反向代理,CDN等。

6 業務拆分

將複雜而龐大的業務拆分開來,形成多個規模較小的產品,獨立開發、部署、維護,除了降低系統耦合度,也便於資料庫業務分庫。按業務對關係資料庫進行拆分,技術難度相對較小,效果相對較好。

7 虛擬化伺服器

將一台伺服器虛擬haul成多台虛擬伺服器,對並發訪問較低的業務,更容易用較少的資源架構高可用的伺服器集群。

服務層架構

提供基礎服務,供應用層調用,完整網站業務。

1 分散式消息

利用消息隊列機制,實現業務和業務,業務和服務之間的非同步消息發送及低耦合的業務關係。

2 分散式服務

在網站實現面向服務機構SOA

3 分散式緩存

優化的最常用手段就是使用緩存

4 分散式配置

系統需要運行配置許多參數,如果這些參數需要修改,如分散式緩存集群需要加入新的緩存伺服器,需要修改應用程序客戶端的緩存伺服器列表配置,並重啟應用程序伺服器。分散式配置在系統運行期提供配置動態推送服務,將配置修改實現推送到應用系統,無需重啟伺服器。

存儲層架構

提供數據、文件的持久化存儲和訪問服務

1 分散式文件系統

網站在線業務需要存儲的文件大部分都是圖片、網頁、視頻等比較小的文件,單數數量非常龐大,而且都在持續增加,需要擴展性較好的分散式文件系統。

2 關係資料庫

大部分網站的主要業務都是基於關係型資料庫開發的,這種資料庫對集群的擴展性支持較差。通過在應用程序的數據訪問層增加資料庫訪問的路由功能,根據業務配置將資料庫訪問路由到不同的資料庫上,可以實現關係資料庫的分散式訪問。

3 NoSQL

4. 數據同步

在支持全球範圍內數據共享的分散式資料庫技術成熟之前,擁有多個數據中心的網站必須在多個數據中心之間進行數據同步,以保證每個數據中心都擁有完整的數據。在實踐中,為了減輕資料庫壓力,將資料庫的事物日誌(或者NoSQL的寫操作Log)同步到其他數據中心,根據Log進行數據重演,實現數據同步。

後台架構

除了要處理用戶的實時訪問請求以外,還有一些非實時的數據分析要處理。

1 搜索引擎

即使是網站內部的搜索引擎,也需要進行數據增量以及全量更新、構建索引等,這些操作後台系統定時執行。

2 推薦系統

社交網站以及購物網站通過挖掘人與人之間的關係,人和商品之間的關係,發展潛在的人際關係和購物興趣,為用戶提供個性化的推薦服務。

3 數據倉庫

根據離線數據,提供數據分析和數據挖掘服務。

數據採集和監控

監控網站訪問情況與系統運行情況,為網站運行決策和運維管理提供支持保障。

1 瀏覽器數據採集

通過在網管站頁面嵌入JS腳本採集用戶瀏覽器環境與操作記錄,分析用戶行為。

2 伺服器業務數據採集

伺服器業務數據包括兩種,一個是採集伺服器端記錄的用戶請求操作日誌,一個是採集應用程序運行期業務數據,比如待處理消息數目等。

3 伺服器性能數據採集

採集伺服器性能數據,如系統負載,內存使用率,網卡流量等。

4 系統採集

將前述採集的數據以圖表的方式展示,以便運營和運維人員監控網站運行狀況,做到這一步僅僅是系統監視。更先進的做、法是根據採集的數據進行自動化運維,自動處理系統異常狀況,是吸納自動化控制。

5 系統報警

如果採集來的數據超過預設的正常情況的閥值,比如系統負載過高,就通過郵件、簡訊、語音電話等方式發出警報信號,等待工程師干預。

安全架構

保護網站免遭攻擊及敏感信息泄露

1 Web攻擊

以HTTP請求的方式發起的攻擊,危害最大的就是XSS和SQL注入攻擊。但是只要措施得當,這兩種攻擊都是比較容易防範的。

2 數據保護

敏感信息加密傳輸與存儲,保護網站和用戶資產。

數據中心機房架構

大型網站需要的伺服器規模數以十萬計,機房物理架構也需要關注。

1 機房架構

對於一個擁有十萬台伺服器的大型網站,每台伺服器耗電(包括伺服器本身耗電及空調耗電)每年大約需要人民幣2000元,那麼網站每年機房電費就需要兩億人民幣。數據中心能耗問題日趨嚴重,Google、Facebook選擇數據中心地理位置的時候趨向選擇散熱良好,供電充裕的地方。

2 機櫃架構

包括機櫃大小,網線布局、指示燈規格、不間斷電源、電壓規格(是48V直流電還是220V民用交流電)等一系列問題。

3 伺服器架構

大型網站由於伺服器採購規模龐大,大都採用定製伺服器的方式代替購買伺服器整機。根據網站應用需求,定製硬碟、內存、甚至CPU,同時去除不必要的外設介面(顯示器輸出介面,滑鼠、鍵盤輸入介面),並使空間結構利於散熱。

鳴謝:大型網站架構技術一覽

推薦閱讀:

MySQL高可用架構之MHA(2)
藍圖系列(一):高並發、高可用、高性能、分散式系統架構
秒殺系統優化思路
高可用架構

TAG:系統架構 |