大型網站技術架構(二)--大型網站架構演化

涵s發表於2018-02-07

作者:13
GitHub:https://github.com/ZHENFENG13
版權宣告:本文為原創文章,未經允許不得轉載。
此篇已收錄至《大型網站技術架構:核心原理與案例分析》讀書筆記系列,點選訪問該目錄獲取完整內容。

何謂大型網站

大型網站系統特點:

大型網站技術架構(二)--大型網站架構演化

ps:符合這些要求的所謂大型網站真的很少,可遇而不可求也。

說到大型網站,就要先理一下大型網站的特點:高併發,大流量,高可用,海量資料等,本文根據《大型網站技術架構》一書整理如下:

初始階段的網站架構

初始階段都比較簡單,通常一臺伺服器就可以搞定一個網站了,ssm-demo系列既是如此,一臺伺服器搞定所有演示站點,後期逐漸優化,向更優的方向進化!
1

應用服務和資料服務分離

隨著網站業務的發展,一臺伺服器逐漸不能滿足需求,這時候就需要將應用和資料分離:
2

使用快取改善網站效能

現在的80%的業務訪問都會集中在20%的資料上,網站基本上都會使用快取,前文中也有關於快取的相關教程,我們的perfect-ssm專案目前處於這個階段中,通過快取層的接入,減少部分對資料庫的直接壓力,提升網站的響應效能。
3

使用應用伺服器叢集改善網站的併發處理能力

因為單一應用伺服器能夠處理的請求連線有限,在網站訪問高峰時期,應用伺服器會成為整個網站的瓶頸,因此使用負載均衡處理器勢在必然,通過負載均衡排程伺服器,可將來自瀏覽器的訪問請求分發到應用的叢集中的任何一臺伺服器上,進一步將壓力分擔掉。
4

資料庫讀寫分離

當使用者達到一定規模後,資料庫因為負載壓力過高而成為網站的瓶頸,而目前主流的資料庫都提供主從熱備功能,通過配置兩臺資料庫主從關係,可以將一臺資料庫的資料更新同步到另一臺伺服器上,網站利用資料庫這一功能實現資料庫讀寫分離,從而改善資料庫負載壓力。
5
目前很多雲服務商都有類似的產品提供,當然,也可以自己搭建資料庫叢集並在業務程式碼中進行讀寫分離的實現(有時間會整理相關教程)。

使用反向代理和CDN加上網站相應

提高網站的訪問速度,主要手段有使用CDN和反向代理。
6
CDN和反向代理的基本原理都是快取,區別在於CDN部署在網路提供商的機房,而反向代理是部署在網站的中心機房,當使用者請求到達中心機房後,首先訪問的反向代理,如果反向代理快取著使用者請求的資源,則直接返回給使用者。

使用分散式檔案系統和分散式資料庫系統

任何強大的單一伺服器都滿足不了大型網站持續增長的業務需求。
分散式資料庫時網站資料庫拆分的最後手段,只用在單表資料規模非常大的時候才使用。不到不得已時,網站更常用的資料庫拆分手段是業務拆分,將不同業務的資料部署在不同的物理伺服器上。
7

使用NoSQL和搜尋引擎

8
搜素引擎也基本已經形成現在大型網站必須提供的功能了,網站需要採用一些非關聯式資料庫技術如NoSQL和非資料庫查詢技術如搜尋引擎。各種開源產品不斷湧現,遍地開花:redis、mongodb、solr、elastic stack、hadoop、spark......

關於搜尋引擎的接入,目前考慮在My-Blog專案中接入elastic search,優化文章搜尋模組。

nosql

業務拆分

大型網站為了應對日益複雜的業務場景,通過使用分而治之的手段將真個網站業務拆分成不同的產品線。

具體到技術上,也會根據產品線話費,將一個網站拆分成許多不同的應用,每個應用獨立部署維護。應用之間可以通過超連結建立管理,也可以通過訊息佇列進行資料分發,當然最多的還是通過訪問同一個資料儲存系統來構成一個關聯的完整系統。
9

分散式服務

由於每一個應用系統都需要執行許多相同的業務操作,比如使用者管理,session管理,那麼可以將這些公用的業務提取出來,獨立部署。
10

本章節思維導圖

偷懶一下,直接用了前一篇文章的圖:
11

整理圖片整理的要吐血了。

首發於我的個人部落格.

相關文章