服務器架構:十張圖帶你了解大型網站架構
2021-02-07 分類:
網站建設
說道大型網站,就的先說大型網站的特點:高并發(fā),大流量,高可用,海量數據等。下面就說說大型網站的架構演化過程吧。
1、初始階段的網站架構
初始階段都比較簡單,通常一臺服務器就可以搞定一個網站了,看圖。
服務器架構:十張圖帶你了解大型網站架構
應用程序、數據庫、文件等所有資源都在一臺服務器上,通常使用 Linux PHP MySQL Apache 就可以完成整個項目部署,然后再買個
域名,租一個廉價的服務器就可以開始我們的網站之旅了
2、應用服務和數據服務分離
隨著網站業(yè)務的發(fā)展,一臺服務器逐漸不能滿足需求;這時候就需要將應用和數據分離,如圖。
對于這三臺服務器要求各不相同:
應用與數據分離后,各個的職責變得更加專一,網站的性能得到進一步的提升,但隨著用戶的繼續(xù)增加,我們需要對網站架構進一步優(yōu)化
3.使用緩存改善網站性能
毫無疑問,現在的網站基本上都會使用緩存,即:80%的業(yè)務訪問都會集中在20%的數據上。
網站的緩存可以分為兩種:緩存在應用服務器上的本地緩存和緩存在專門的分布式緩存服務器上的遠程緩存
4、使用應用服務器集群改善網站的并發(fā)處理能力
因為單一應用服務器能夠處理的請求連接有限,在網站訪問高峰時期,應用服務器會成為整個網站的瓶頸。因此使用負載均衡處理器勢在必然。通過負載均衡調度服務器,可將來自瀏覽器的訪問請求分發(fā)到應用的集群中的任何一臺服務器上。
5、數據庫讀寫分離
在使用了緩存后,大多數的操作不經過數據庫訪問就能完成,但仍有一部分讀操作(緩存訪問未命中,緩存過期)和所有的寫操作需要訪問數據庫,在網站的用戶量達到一定時,數據庫的負載問題就來了
當用戶達到一定規(guī)模后,數據庫因為負載壓力過高而成為網站的瓶頸。而目前主流的數據庫都提供主從熱備功能,通過配置兩臺數據庫主從關系,可以將一臺數據庫的數據更新同步到另一臺服務器上。網站利用數據庫這一功能實現數據庫讀寫分離,從而改善數據庫負載壓力。
應用服務器在寫操作的時候,訪問主數據庫,主數據庫通過主從復制機制把數據同步更新到從數據庫,這樣當應用服務器進行讀操作的時候,就能訪問從數據庫獲取數據
提高網站的訪問速度,主要手段有使用
CDN和反向代理。
CDN和反向代理的基本原理都是緩存,區(qū)別在于
CDN部署在網絡提供商的機房,而反向代理是部署在網站的中心機房,當用戶請求到達中心機房后,首先訪問的反向代理,如果反向代理緩存著用戶請求的資源,則直接返回給用戶。
7、使用分布式文件系統(tǒng)和分布式數據庫系統(tǒng)
任何強大的單一服務器都滿足不了大型網站持續(xù)增長的業(yè)務需求。
分布式數據庫時網站數據庫拆分的最后手段,只用在單表數據規(guī)模非常大的時候才使用。不到不得已時,網站更常用的數據庫拆分手段是業(yè)務拆分,將不同業(yè)務的數據部署在不同的物理服務器上。
8、使用NoSQL和搜索引擎
搜素引擎也基本已經形成現在大型網站必須提供的功能了,網站需要采用一些非關系數據庫技術如NoSQL和非數據庫查詢技術如搜索引擎。
9、業(yè)務拆分
對于大型網站,我們可以分而治之,把整個網站的業(yè)務分為不同的模塊,比如大型的交易購物完整可以分為首頁、店鋪、訂單、買家等,分別交給不同的業(yè)務團隊來負責
同時我們將一個網站根據模塊劃分拆分成多個應用,每個應用進行單獨的部署和維護,應用之間通過超鏈接建立關系(指向不同的應用地址),最后通過相同的數據存儲系統(tǒng)來構成一個互相關聯的完整系統(tǒng)
10、分布式服務
隨著業(yè)務拆分,整個系統(tǒng)越來越大,應用的整體復雜度呈指數級增加,部署維護越來越困難,并且所有的應用服務器都要與數據庫服務連接, 在數萬臺服務器規(guī)模的情況下,這些連接的數目是服務器規(guī)模的平方,導致資源不足
這時候就要對相同的業(yè)務進行提取,獨立部署,把這些可重用的業(yè)務和連接數據庫等,提取出來作為公共業(yè)務服務,而應用系統(tǒng)只需要通過分布式服務訪問公共業(yè)務服務完成業(yè)務操作