【服務器架構】大型網站結構介紹

大型網站架構介紹

特點:高併發、大流量、高可用、海量數據。

目錄

大型網站架構介紹

1、初始階段的網絡架構

2、應用服務和數據服務分離

3、使用緩存改善網站性能

4、使用應用服務器集羣改善網站的併發處理能力

5、數據庫讀寫分離

6、使用反向代理和CDN加上網站響應

7、使用分佈式文件系統和分佈式數據庫系統

8、使用NoSQL和搜索引擎

9、業務拆分

10、分佈式服務


1、初始階段的網絡架構

      初始階段的網站結構比較簡單,通常一臺服務器就可以搞定一個網站。應用程序、數據庫、文件等所有資源都在一臺服務器上,通常使用Linux PHP MySQL Apache就可以完成整個項目部署,然後再買個域名,租一個廉價的服務器就可以了。

PHP:一種HTML內嵌式語言,在服務器端執行的嵌入HTML文檔的腳本語言,豐富支持數據庫方面,在Internet上也支持了相當多的通訊協議,除此之外,用PHP寫出來的web後端CGI程序,可以很輕易的移植到不同的操作系統上。

Apache:一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由於其多臺平臺和安全性被廣泛使用,是最流行的web服務器端軟件之一。

                                                                                   圖1 初始階段的網絡架構 

2、應用服務和數據服務分離

     隨着網站業務的發展,一臺服務器逐漸不能滿足需求,這時候就需要將應用和數據分離。各個的職責變得更加專一,網站的性能得到進一步的提升,但隨着用戶的繼續增加,我們需要對網站架構進一步優化。

                                                                              圖2 應用服務和數據服務分離

應用服務器:要處理大量的業務邏輯,所以需要更好更快更強大的CPU;

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

文件服務器:需要存儲用戶上傳的文件資源,因此需要更大的磁盤存儲空間。

3、使用緩存改善網站性能

      現在的網站基本上都會使用緩存,即:80%的業務訪問都會集中在20%的數據上。網站的緩存可以分爲兩種:緩存在應用服務器上的本地緩存和緩存在專門的分佈式緩存服務器上的遠程緩存

本地緩存:訪問速度會快一些,但是受應用服務器內存限制,緩存數據量很有限,而且會出現內存爭用的情況;

遠程分佈式緩存:可以使用集羣的方式,部署大內存的服務器作爲專門的緩存服務器,可以在理論上做到不受內存容量限制的緩存服務。

                                                                         圖3 使用緩存改善網站性能 

4、使用應用服務器集羣改善網站的併發處理能力

    因爲單一應用服務器能夠處理的請求連接有限,在網站訪問高峯時器,應用服務器會成爲整個網站的瓶頸。因此使用負載均衡處理器勢在必然。通過負載均衡調度服務器,可將來自瀏覽器的訪問請求分發到應用的集羣中的任何一臺服務器上。

                                                                                 圖4 使用應用服務器集羣

5、數據庫讀寫分離

     在使用了緩存後,大多數的操作不經過數據庫訪問就能完成,但仍有一部分讀操作(緩存訪問未命中,緩存過期)和所有的寫操作需要訪問數據庫,在網站的用戶量達到一定時,數據庫的負載問題就來了。當用戶達到一定規模後,數據庫因爲負載壓力多高而成爲網站的瓶頸。而目前主流的數據庫都提供主從熱備份功能,通過配置兩臺數據庫主從關係,可以將一臺數據庫的數據更新同步到另一臺服務器上。網站利用數據庫這一功能實現數據庫讀寫分離,從而改善數據庫負載壓力

                                                                                    圖5 數據庫讀寫分離 

應用服務器在寫操作的時候,訪問主數據庫,主數據庫通過主從複製機制把數據同步更新到從數據庫,這樣當應用服務器進行讀操作的時候,就能訪問從數據庫獲取數據。

6、使用反向代理和CDN加上網站響應

      提高網站的訪問速度,主要手段有使用CDN和反向代理。

      CDN和反向代理的基本原理都是緩存,區別在於CDN部署網絡提供商的機房,而反向代理是部署在網站的中心機房,當用戶請求到達中心機房後,首先訪問的反向代理,如果反向代理緩存着用戶請求的資源,則直接返回給用戶。 

                                                                                   圖6 反向代理+CDN 

7、使用分佈式文件系統和分佈式數據庫系統

        任何強大的單一服務器都滿足不了大型網站持續增長的業務需求。

        分佈式數據庫時網站數據庫拆分的最後手段,只用在單表數據規模非常大的時候才使用。不到不得已時,網站更常用的數據庫拆分手段是業務拆分,將不同業務的數據部署在不同的物理服務器上。

                                                                 圖7 分佈式文件系統+分佈式數據庫系統 

8、使用NoSQL和搜索引擎

      搜索引擎也基本已經形成現在大型網站必須提供的功能了,網站需要採用一些非關係數據庫技術如NoSQL和非數據庫查詢技術如搜索引擎。

                                                                    圖8 使用NoSQL和搜索引擎 

9、業務拆分

      對於大型網站,我們可以分而治之,把整個網站的業務分爲不同的模塊,比如大型的交易購物完整可以分爲首頁、店鋪、訂單、買家等,分別給不同的業務團隊來負責。

      同時我們將一個網站根據模塊拆分成多個應用,每個應用進行單獨的部署和維護,應用之間通過超鏈接建立關係(指向不同的應用地址),最後通過相同的數據存儲系統來構成一個互相關聯的完整系統。

                                                                                 圖9 業務拆分 

10、分佈式服務

       隨着業務拆分,整個系統越來越大,應用的整體複雜度呈指數增加,部署維護越來越困難,並且所有的應用服務器都要與數據庫服務連接,在數萬臺服務器規模的情況下,這些連接的數目是服務器規模的平方,導致資源不足。

       這時候就要對相同的業務進行提取,獨立部署,把這些可重用的業務和連接數據庫等,提取出來作爲公共業務服務,而應用系統只需要通過分佈式服務訪問公共業務服務完成業務操作。

                                                                                          圖10 分佈式服務 

參考

https://blog.csdn.net/baidu_39511645/article/details/78345573?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章