1. 程式人生 > >淺談網站架構演變

淺談網站架構演變

查詢 伸縮 機器 程序員 取數 流行 負載 dia 計算

淺談網站架構

作為一個從事後臺開發已經2年的程序員來講,大部分時間都忙於業務邏輯分析,往往忽略了業務之上的架構層面的設計。

本文作為網站架構知識的補充,不僅開拓了眼界,也對以後的程序設計益處多多。下面我們就一起來看看網站架構的演變歷史。

網站架構的演變大致分為如下幾個階段:

1

初始階段的網站架構

網站在最初開始時沒有太多人訪問,用一臺服務器就完全可以勝任,此時的網站架構如下圖所示。

技術分享圖片

應用程序,文件存儲,數據庫所有的資源都在一臺服務器上。也就是經典的LAMP架構模型(Linux操作系統+部署在Apache上+MySql存儲+PHP開發)。

2

應用服務和數據服務分離

網站有了越來越多的用戶,不斷增長的訪問量導致網站性能越來越差,數據庫存儲空間也越來越不足,此時由初始架構演變為應用程序與數據服務分離的架構,如下圖所示。

技術分享圖片

各個服務器對硬件的資源要求各不相同:

  1. 應用服務器由於處理大量業務邏輯,因此需要更強大的CPU;

  2. 數據庫服務器需要快速磁盤檢索和數據緩存,因此需要更快的硬盤和更大的內存;

  3. 文件服務器需要存儲大量的文件,因此需要更大的硬盤。

3

緩存改善網站性能

網站訪問也遵循二八定律:80% 的業務訪問集中在 20% 的數據上。

既然大部分的業務訪問集中在一小部分數據上,那麽把這一小部分數據緩存在內存中,自然可以提高網站性能,加入緩存後的網站架構如下圖所示。

技術分享圖片

網站使用的緩存分為兩種:

  1. 緩存在應用服務器上的本地緩存;

  2. 緩存在專門的分布式緩存服務器上的遠程緩存。

那兩者的區別有哪些呢?

本地緩存訪問速度更快,但是受本地服務器內存限制,緩存數據有限。

遠程分布式緩存一般使用集群的方式,部署大內存服務器作為專門的緩存服務器,可以理論上做到不受內存容量限制的緩存服務。

4

應用服務器集群

加入緩存後,數據訪問壓力緩解,但是單一服務器可以處理的請求有限,在訪問高峰期,這會成為網站的瓶頸。

所以對於網站來說,既然可以通過增加一臺服務器的方式改善負載壓力,那就可以以同樣的方式持續增加服務器不斷改善系統性能,從而實現系統的可伸縮性。應用服務器集群則應運而生。此時網站架構如下圖所示。

技術分享圖片

通過負載均衡將請求分發到應用服務器集群,如果用戶訪問量持續增長,那麽就在集群中加入更多的服務器,使服務器的負載壓力不再成為整個網站的瓶頸。

5

數據庫的讀寫分離

隨著網站用戶不斷增多,服務器搭建了集群便不再是網站的瓶頸,數據庫反而會因為負載過高而成為瓶頸。

由於大部分主流數據庫都有主從熱備的功能,通過配置兩臺數據庫的主從關系,可是實現數據庫之間的數據復制,從而實現數據庫的讀寫分離,減輕數據庫壓力。

此時網站架構如下圖所示。

技術分享圖片

讀寫分離:

應用服務器在寫數據時,訪問數據庫,主數據庫通過主從復制機制將數據更新到從數據庫,當應用服務器讀數據的時候就可用通過從數據庫讀取數據。

6

CDN和反向代理

CDN和反向代理本質也是緩存。加入CDN和反向代理會有效加速網站訪問速度。此時網站架構如下圖所示。

技術分享圖片

CDN一般部署在網絡提供商的機房,使得用戶在請求網站服務時,可從最近的網絡提供商機房獲取數據。

反向代理則部署在網站的中心機房,當用戶請求到達中心機房後,先訪問反向代理服務器,獲取反向代理服務器中的緩存的資源,直接返回給用戶。

7

分布式文件系統和分布式數據庫

單一服務器都滿足不了大型網站持續增長的需求,這時數據庫要使用分布式數據庫,文件系統使用分布式文件系統。此時網站架構如下圖所示。

技術分享圖片

分布式數據庫是網站數據庫拆分的最後手段,只有在單表數據特別大時才使用。一般更常用的是業務分庫,將不同業務的數據庫部署在不同機器上。

8

使用NoSQL數據庫和搜索引擎

隨著網站運營越來越久,業務增長越來越大,數據的產生也就越來越大。此時對數據的檢索和存儲也就越來越復雜,那就需要采用非關系數據庫技術-NoSQL數據庫和數據庫查詢技術-搜索引擎。此時網站架構如下圖所示。

技術分享圖片

9

業務拆分

大型網站業務日益復雜,會使用拆分的手段將整個網站分為不同的產品線。在技術角度上講,就是講網站拆分成許多不同的應用,每個應用都要獨立部署。此時網站架構如下圖所示。

技術分享圖片

應用之間可以通過超鏈接建立關系,如在首頁導航欄添加各個應用的鏈接地址。也可以通過消息隊列進行數據分發,進行業務調用。

10

分布式服務架構

隨著業務拆分越來越細,存儲系統則越來越大,可能會出現不同的應用系統需要執行許多相同的業務操作的情況。那將這些共用的業務提出出來,獨立部署。通過分布式服務調用共用業務服務完成具體的業務操作。此時網站架構如下圖所示。

技術分享圖片

大型網站架構演化到這一步,也就是時下流行的分布式架構。但架構發展並不會止步於此,目前許多大型網站都開始有自己的雲計算平臺,將計算作為一種資源出售。一些中小網站不需要再關心技術架構問題,未來的網站架構肯定還會繼續發展下去,會繼續適應未來持續增長的業務需求。

網站架構概述大致分為以上幾個階段,後續我們會針對網站架構優化方面再做分享,主要從網站的性能、可用性、伸縮性、擴展性、安全性這幾個方面入手,繼續討論網站架構方面所遇到的問題,分享架構優化的知識。

參考資料:《大型網站技術架構》----李智慧

關註一下,我寫的就更來勁兒啦

技術分享圖片

淺談網站架構演變