標籤:使用者數 linux 不同 大型網站 分而治之 並且 原理 複雜度 這一
01初始階段
大型網站都是由小型網站演變而來的,網站架構也一樣
小型網站最開始沒有太多人訪問,只需要一台伺服器就綽綽有餘,就像這樣:
應用程式、資料庫、檔案等所有資源都在一台伺服器上,通常使用 Linux PHP MySQL Apache 就可以完成整個項目部署,然後再買個網域名稱,租一個廉價的伺服器就可以開始我們的網站之旅了。
02應用服務與資料服務分離
隨著業務的發展,逐漸的一台伺服器已經不能滿足需求,這時我們可以將 應用與資料分離
分離之後我們使用到三台伺服器:應用伺服器、檔案伺服器和資料庫伺服器,如下所示:
對於這三台伺服器要求各不相同:
應用伺服器 要處理大量的商務邏輯,所以需要更好更快更強大的 CPU
資料庫伺服器 需要快速的進行磁碟檢索和資料緩衝,因此需要更快的硬碟和更大的記憶體
檔案伺服器 需要儲存使用者上傳的檔案資源,因此需要更大的硬碟儲存空間
應用與資料分離後,各個的職責變得更加專一,網站的效能得到進一步的提升,但隨著使用者的繼續增加,我們需要對網站架構進一步最佳化。
03使用緩衝改善效能
網站的訪問一樣遵循二八定律:80% 的業務訪問集中在 20% 的資料上面
因此我們要對這一小部分的資料進行緩衝來減輕資料庫的訪問壓力,以提高整個網站的資料訪問速度,改善資料庫的讀寫效能
網站的緩衝可以分為兩種:緩衝在應用伺服器上的本機快取和緩衝在專門的分布式快取服務器上的遠程緩衝
本機快取 的訪問速度會快一些,但是受應用伺服器記憶體限制,快取資料量很有限,而且會出現記憶體爭用的情況;
遠程分布式緩衝 可以使用叢集的方式,部署大記憶體的伺服器作為專門的快取服務器,可以在理論上做到不受記憶體容量限制的快取服務。
如下所示:
使用緩衝後,資料訪問壓力得到了有效緩解,但單一的應用伺服器能夠處理的請求串連數有限,在訪問的高峰期,應用伺服器又會成為網站效能的瓶頸。
04使用應用伺服器叢集改善網站並發處理能力
使用叢集是網站解決高並發,海量資料問題的常用手段,當你縱向提升到一定程度後,那就該開始橫向提升了。
當一台伺服器的處理能力不足時,可以增加一台伺服器去分擔原有的伺服器壓力。對於大型網站而言,無論多麼強大的伺服器,都滿足不了持續增長的業務需求,更高效的方式就是增加伺服器來分擔壓力
對於網站架構而言,如果增添一台新的伺服器可以改善負載壓力,那麼就可以使用同樣的方式來應對源源不斷的業務需求,從而實現系統的延展性。
通過負載平衡調度伺服器,可以將使用者請求分發到應用伺服器叢集裡的任何一台伺服器上,如果有更多的使用者,可以增加更多的應用伺服器,使應用伺服器的負載壓力不再成為網站的效能問題。
05資料庫讀寫分離
在使用了緩衝後,大多數的操作不經過資料庫訪問就能完成,但仍有一部分讀操作(緩衝訪問未命中,緩衝到期)和所有的寫操作需要訪問資料庫,在網站的使用者量達到一定時,資料庫的負載問題就來了
目前大多數的資料庫都支援主從熱備份,通過配置兩台伺服器的主從關係,可以將一台資料庫伺服器的資料更新同步到另一台,網站利用這一功能,實現資料庫讀寫分離,從而進一步改善資料庫負載壓力
增加從資料庫,應用伺服器在寫操作的時候,訪問主要資料庫,主要資料庫通過主從複製機制把資料同步更新到從資料庫,這樣當應用伺服器進行讀操作的時候,就能訪問從資料庫擷取資料。
06使用反向 Proxy和 CDN 加速網站響應
CDN 和 反向 Proxy 的基本原理都是緩衝
CDN 部署在網路供應商的機房,使用者在進行請求時,會從距離最近的網路供應商機房擷取資料;
反向 Proxy 則部署在中心機房,當使用者請求到達中心機房後,會首先訪問反向 Proxy伺服器,如果反向 Proxy伺服器中緩衝這使用者請求的資源,就直接返回給使用者。
使用 CDN 和 反向 Proxy 都是為了儘快返回給使用者資料,一方面加快使用者訪問速度,另一方面也減輕了後端伺服器的壓力。
07使用Distributed File System和分散式資料庫系統
隨著網站業務的繼續發展,這時候就可以像分布式應用伺服器一樣,對資料庫系統和檔案系統進行分布式管理
分散式資料庫 是網站資料庫拆分的最後手段,一般我們可以採取業務分庫,根據不同業務的資料庫部署在不同的資料庫伺服器上
08使用 NoSQL 和搜尋引擎
這兩個方式都是依賴於互連網的技術手段,應用伺服器通過一個統一的資料訪問模組來訪問各種資料,從而減輕應用程式有多個資料來源的麻煩。
09業務拆分
對於大型網站,我們可以分而治之,把整個網站的業務分為不同的模組,比如大型的交易購物完整可以分為首頁、店鋪、訂單、買家等,分別交給不同的業務團隊來負責。
同時我們將一個網站根據模組劃分拆分成多個應用,每個應用進行單獨的部署和維護,應用之間通過超連結建立關係(指向不同的應用地址),最後通過相同的資料存放區系統來構成一個互相關聯的完整系統。
10分布式服務
隨著業務拆分,整個系統越來越大,應用的整體複雜度呈指數級增加,部署維護越來越困難,並且所有的應用伺服器都要與資料庫服務串連, 在數萬台伺服器規模的情況下,這些串連的數目是伺服器規模的平方,導致資源不足
這時候就要對相同的業務進行提取,獨立部署,把這些可重用的業務和串連資料庫等,提取出來作為公用商務服務,而應用系統只需要通過分布式服務訪問公用商務服務完成業務操作
大型網站技術架構