大型網站技術架構 讀書筆記1 網站架構的演化和模式
阿新 • • 發佈:2019-01-30
網站架構的演化和模式
本讀書筆記涉及書中的第一章——大型網站架構演變和第二章——大型網站架構模式。在架構演變這塊,通過使用快取、叢集、分散式等手段實現網站架構的不斷升級以應對業務需要。架構模式則分別介紹了網站架構中的一些常用的模式。
一 大型網站架構演化
架構:最高層次的規劃,難以更改的決定。
軟體架構:有關軟體整體結構與元件的抽象描述,用於指導大型軟體系統各個方面的設計。
由上述定義可知,網站架構的核心任務是通過應用該架構使得網站能實現既定的任務。這裡的任務即包含系統功能需求,如收藏夾,購物車等;也包括核心架構要素,如系統性能,可用性等。
而大型網站架構演化的根本原因 則是隨著併發量和流量訪問增大帶來的效能、可用性、安全性等非功能性需求問題。要知道,哪怕再簡單的功能,隨著併發訪問量的增大,都會出現各種棘手的問題,這就十分考驗網站架構。就如一個偉人說過,任何一個小問題,乘以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 分層
分層:將系統在橫向維度上切分成幾個部分,每一個部分負責單一職能,然後通過上層對下層的依賴和呼叫組成一個完整的系統。
網站系統的分層:
應用層 | 負責具體業務和檢視展示,如網站首頁及搜尋的輸入和結果展示 |
---|---|
服務層 | 為應用層提供服務支援,如使用者管理服務,購物車服務等 |
資料層 | 提供資料儲存訪問服務,如資料庫、快取、檔案、搜尋引擎等 |