說道大型網站,就的先說大型網站的特點:高併發,大流量,高可用,海量資料等。下面就說說大型網站的架構演化過程吧。
1、初始階段的網站架構
初始階段都比較簡單,通常一臺伺服器就可以搞定一個網站了,看圖。
應用程式、資料庫、檔案等所有資源都在一臺伺服器上,通常使用 Linux PHP MySQL Apache 就可以完成整個專案部署,然後再買個域名,租一個廉價的伺服器就可以開始我們的網站之旅了
2、應用服務和資料服務分離
隨著網站業務的發展,一臺伺服器逐漸不能滿足需求;這時候就需要將應用和資料分離,如圖。
對於這三臺伺服器要求各不相同:
應用伺服器 要處理大量的業務邏輯,所以需要更好更快更強大的 CPU資料庫伺服器 需要快速的進行磁碟檢索和資料快取,因此需要更快的硬碟和更大的記憶體檔案伺服器 需要儲存使用者上傳的檔案資源,因此需要更大的硬碟儲存空間應用與資料分離後,各個的職責變得更加專一,網站的效能得到進一步的提升,但隨著使用者的繼續增加,我們需要對網站架構進一步優化
3.使用快取改善網站效能
毫無疑問,現在的網站基本上都會使用快取,即:80%的業務訪問都會集中在20%的資料上。
網站的快取可以分為兩種:快取在應用伺服器上的本地快取和快取在專門的分散式快取伺服器上的遠端快取
本地快取 的訪問速度會快一些,但是受應用伺服器記憶體限制,快取資料量很有限,而且會出現記憶體爭用的情況遠端分散式快取 可以使用叢集的方式,部署大記憶體的伺服器作為專門的快取伺服器,可以在理論上做到不受記憶體容量限制的快取服務4、使用應用伺服器叢集改善網站的併發處理能力
因為單一應用伺服器能夠處理的請求連線有限,在網站訪問高峰時期,應用伺服器會成為整個網站的瓶頸。因此使用負載均衡處理器勢在必然。通過負載均衡排程伺服器,可將來自瀏覽器的訪問請求分發到應用的叢集中的任何一臺伺服器上。
5、資料庫讀寫分離
在使用了快取後,大多數的操作不經過資料庫訪問就能完成,但仍有一部分讀操作(快取訪問未命中,快取過期)和所有的寫操作需要訪問資料庫,在網站的使用者量達到一定時,資料庫的負載問題就來了
當用戶達到一定規模後,資料庫因為負載壓力過高而成為網站的瓶頸。而目前主流的資料庫都提供主從熱備功能,通過配置兩臺資料庫主從關係,可以將一臺資料庫的資料更新同步到另一臺伺服器上。網站利用資料庫這一功能實現資料庫讀寫分離,從而改善資料庫負載壓力。
應用伺服器在寫操作的時候,訪問主資料庫,主資料庫通過主從複製機制把資料同步更新到從資料庫,這樣當應用伺服器進行讀操作的時候,就能訪問從資料庫獲取資料
6、使用反向代理和CDN加上網站相應
提高網站的訪問速度,主要手段有使用CDN和反向代理。
CDN和反向代理的基本原理都是快取,區別在於CDN部署在網路提供商的機房,而反向代理是部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的反向代理,如果反向代理快取著使用者請求的資源,則直接返回給使用者。
7、使用分散式檔案系統和分散式資料庫系統
任何強大的單一伺服器都滿足不了大型網站持續增長的業務需求。
分散式資料庫時網站資料庫拆分的最後手段,只用在單表資料規模非常大的時候才使用。不到不得已時,網站更常用的資料庫拆分手段是業務拆分,將不同業務的資料部署在不同的物理伺服器上。
8、使用NoSQL和搜尋引擎
搜素引擎也基本已經形成現在大型網站必須提供的功能了,網站需要採用一些非關係資料庫技術如NoSQL和非資料庫查詢技術如搜尋引擎。
9、業務拆分
對於大型網站,我們可以分而治之,把整個網站的業務分為不同的模組,比如大型的交易購物完整可以分為首頁、店鋪、訂單、買家等,分別交給不同的業務團隊來負責
同時我們將一個網站根據模組劃分拆分成多個應用,每個應用進行單獨的部署和維護,應用之間通過超連結建立關係(指向不同的應用地址),最後通過相同的資料儲存系統來構成一個互相關聯的完整系統
10、分散式服務
隨著業務拆分,整個系統越來越大,應用的整體複雜度呈指數級增加,部署維護越來越困難,並且所有的應用伺服器都要與資料庫服務連線, 在數萬臺伺服器規模的情況下,這些連線的數目是伺服器規模的平方,導致資源不足
這時候就要對相同的業務進行提取,獨立部署,把這些可重用的業務和連線資料庫等,提取出來作為公共業務服務,而應用系統只需要通過分散式服務訪問公共業務服務完成業務操作