1. 程式人生 > >大型網站技術架構 讀書筆記1 網站架構的演化和模式

大型網站技術架構 讀書筆記1 網站架構的演化和模式

網站架構的演化和模式

  本讀書筆記涉及書中的第一章——大型網站架構演變和第二章——大型網站架構模式。在架構演變這塊,通過使用快取叢集分散式等手段實現網站架構的不斷升級以應對業務需要。架構模式則分別介紹了網站架構中的一些常用的模式。

一 大型網站架構演化

  架構:最高層次的規劃,難以更改的決定。

  軟體架構:有關軟體整體結構元件的抽象描述,用於指導大型軟體系統各個方面的設計

  由上述定義可知,網站架構核心任務是通過應用該架構使得網站能實現既定的任務。這裡的任務即包含系統功能需求,如收藏夾,購物車等;也包括核心架構要素,如系統性能,可用性等。

  而大型網站架構演化的根本原因
則是隨著併發量和流量訪問增大帶來的效能、可用性、安全性等非功能性需求問題。要知道,哪怕再簡單的功能,隨著併發訪問量的增大,都會出現各種棘手的問題,這就十分考驗網站架構。就如一個偉人說過,任何一個小問題,乘以13億,都是一個大問題。如果一個公司像淘寶這樣業務急速增長,那麼網站架構演變則是一件不得不經歷的過程。

1.1 大型網站軟體系統的特點

  1. 高併發、大流量

  2. 高可用:不輕易宕機

  3. 海量資料

  4. 使用者分佈廣泛、網路情況複雜:即使一個國家的不同地區,網路情況也千差萬別

  5. 安全環境惡劣:各種漏洞和資訊洩露

  6. 需求快速變更、釋出頻繁
:敏捷開發

  7. 漸進式發展:伴隨著架構演化

1.2 大型網站架構演化發展歷程

  大型網站的技術挑戰龐大客戶量高併發訪問海量資料,這也是大型網站架構需要解決的問題。這裡,從最簡單的單機LAMP方案到提供完整體系的分散式叢集方案,分十個歷程進行說明。這一塊最好看書,書上圖文結合,通俗易懂,下面簡單說明下。

  1. 初始架構:使用LAMP方案,整個架構使用各種開源軟體和一臺伺服器即可。作業系統使用Linux,應用程式使用PHP開發,並部署在上,資料庫使用MySQL。

  2. 將應用服務和資料服務分離:使用獨立的檔案伺服器資料庫伺服器部署資料。

  3. 使用快取
:這裡在應用伺服器配置本地快取,有需要的話建立獨立的分散式快取伺服器快取熱點資料以提高效能。此時,應用伺服器稱為網站瓶頸。

  4. 應用伺服器叢集:針對3的痛點,部署多臺應用伺服器並構成叢集,使用一臺獨立的負載均衡伺服器在前端進行請求分發操作。

  5.資料庫讀寫分離:對於關係型資料庫,可以使用主從模式,對資料庫進行讀寫分離,從而加快響應速度。

  6. 反向代理和CDN:這裡也是使用快取,不過是將快取部署在前端。其中,CDN位於網路提供商機房,離使用者最近;反向代理位於網站中心機房,在結構上位於負載均衡伺服器前端。

  7. 分散式系統:對6中的檔案系統資料庫系統使用分散式部署,以實現更大的檔案儲存能力。

  8. NoSQL和搜尋引擎:在應用伺服器中加入統一資料訪問模組,採用非關係資料庫和非資料庫查詢技術以實現對資料儲存和檢索的更高要求。

  9. 業務拆分:將網站拆分成不同應用,應用間採用超連結建立關係,使用訊息佇列進行資料分發。

  10.分散式服務:將共同使用的業務獨立部署,並使用專門的訊息佇列伺服器進行業務呼叫。

  到第十步時,整個網站架構已經相當複雜,需要其架構師具有很好的駕馭能力。應用得當,能解決網站中大部分技術問題。

1.3 其他

  大型網站架構技術的核心價值隨網站所需靈活應對。需求本身比技術重要,發現、提出併合理解決需求比炫技重要的多。

  驅動大型網站技術發展的主要力量是網站的業務發展:是業務成就了技術,是事業成就了人。按照吳軍博士的觀點:去站在風口。

二 大型網站架構模式

  模式:每一個模式描述了一個在我們週五不斷重複發生的問題及該問題解決方案的核心。這樣,可以對該方案進行複用而無需重複工作。模式的關鍵在於模式可重複性問題和場景可重複性帶來的解決方案可重複使用

  網站架構中有一些模式被許多大型網站一再驗證,通過對這些模式的學習,我們可以掌握大型網站架構的一般思路解決方法,以指導架構設計

2.1 分層

  分層:將系統在橫向維度上切分成幾個部分,每一個部分負責單一職能,然後通過上層對下層的依賴和呼叫組成一個完整的系統。

  網站系統的分層

應用層 負責具體業務和檢視展示,如網站首頁及搜尋的輸入和結果展示
服務層 為應用層提供服務支援,如使用者管理服務,購物車服務等
資料層 提供資料儲存訪問服務,如資料庫、快取、檔案、搜尋引擎等

  優點:可以將一個龐大的軟體系統切分成不同的部分,便於分工合作開發和維護;各層之間獨立,只需維護呼叫介面不變即可

  挑戰:需要合理規劃層次邊界和介面;開發過程中需要嚴格遵循分從架構的約束,禁止跨層次呼叫和逆向呼叫。

  說明封層架構是邏輯上的,還可進一步劃分,在物理部署上可以自由實現。

2.2 分割

  分割:在縱向方面對軟體系統進行切分,一般按功能服務進行分割。

  作用和功能:將不同功能和服務進行分割,包裝成高內聚低耦合模組單元,有助於軟體開發和維護;便於不同模組的分散式部署,提高網站的併發處理能力功能擴充套件能力

  說明:分割粒度視網站規模和業務而定,以模組為單位。

2.3 分散式

  分散式:將軟體系統部署按分層模組部署在不同伺服器上,通過網路頻寬進行遠端呼叫,實現軟體系統的擴充套件。對於大型網站,分割分層的一個主要目的就是為了切分後的模組便於焚無視部署——將不同模組部署在不同伺服器上,通過遠端呼叫協同工作。通過增加伺服器數量解決高併發問題。

  分散式系統主要問題

  1. 呼叫必須通過網路,可能影響效能;

  2. 加大伺服器宕機概率,可能會影響網站可用性;

  3. 難以保證資料一致性

  4. 導致網站依賴錯綜複雜,開發管理維護困難

  常用分散式方案

  1. 分散式應用和服務

  2. 分散式靜態資源:將JS、CSS、Logo圖片等靜態資源獨立分散式部署,使用獨立域名,實現動靜分離

  3. 分散式資料和儲存:會涉及到NoSQL產品

  4. 分散式計算:對於各種線上業務和後臺業務進行處理。常用的Hadoop解決方案採用移動計算進行本地計算的方案。

  5. 分散式配置分散式鎖分散式檔案系統

2.4 叢集

  叢集:在分散式情況下,使用多臺伺服器部署相同模組,並通過負載均衡裝置共同對外提供服務。

  作用:1. 提高系統的效能,實現高併發處理;2. 提高系統可用性,實現系統可伸縮性

2.5 快取

  快取:將資料放在舉例計算最近的位置以加快處理速度。快取是改善軟體效能的第一手段。除了加快訪問速度外,還可以減輕後端應用和資料儲存的負載壓力。

  快取的兩大前提:1. 資料訪問熱點不均勻;2. 資料在某個時間段內有效

  主要的快取設計

  1. CDN:內容分發網路,部署在離使用者最近的網路服務商,儲存訪問量最大的熱點內容(靜態資源),實現最快響應。

  2. 反向代理:屬於網路前端架構

  3. 本地快取:在應用伺服器端儲存熱點資料,可儲存資料有限

  4. 分散式快取:使用分散式快取叢集,可以實現大量的快取儲存

2.6 非同步

  非同步:對於業務之間的訊息傳遞不採用同步,而是將一個業務操作分成多個階段,每個階段之間通過共享資料的方式非同步執行進行協作。同分層分割分散式一樣,也是一種解耦手段。

  實現方式:伺服器內使用**多執行緒共享記憶體佇列,伺服器叢集間使用焚無視訊息佇列。非同步架構的典型應用是生產者消費者模式

  使用非同步訊息佇列優點:

  1. 提高系統可靠性

  2. 加快網站響應速度

  3. 消除併發訪問高峰

2.7 冗餘

  作用:在伺服器宕機的情況下保證網站可以繼續執行。

  實現:1.冷備份:定期備份,存檔儲存;2.熱備份:對資料庫進行主從分離,實時同步

2.8 自動化

  作用:主要用於網站的釋出運維

  釋出時應用場景:通過減少人為干預,使釋出過程自動化可以減少故障。包括自動化程式碼管理自動化測試自動化安全檢測自動化部署

  執行時應用場景自動化監控自動化報警自動化失效轉移自動化失效恢復自動化降級自動化分配資源

2.9 安全

  網站在安全架構方面的模式:

  1. 身份認證密碼手機校驗碼

  2. 加密

  3. 編碼轉化過濾

  4. 風險控制