天天看點

高并發叢集技術講解

假如一個WEB伺服器(裝有Nginx和PHP的伺服器)能支撐100個并發量,此時網站的請求有200個并發量,這時候就需要有兩個支撐100個并發量的WEB伺服器共同承擔,怎麼做到呢?我們還需要一個負載均衡伺服器(這個負載均衡伺服器的配置要求很低,因為負載均衡隻需要轉發使用者的請求給WEB伺服器就可以了,隻要有好的網卡就行,他屬于網卡消耗型,可以看做是一個入口伺服器,負載均衡是通過輪詢的方式發送請求給多個WEB伺服器,我們這裡假設有兩個web伺服器,就是重新整理一次請求一個,再重新整理一次請求另一個),用Nginx就可以當做負載均衡伺服器,這樣就實作了web伺服器平均分擔并發量。

但是光有多個web伺服器還不夠,還需要有多個資料庫伺服器(這時候的mysql就不需要安裝在web伺服器中了,需要單獨裝在這個資料庫伺服器上),這就叫做主從複制(就是有個主資料庫伺服器,多個從資料庫伺服器,主伺服器用來寫操作,從伺服器用來讀操作,從伺服器相當于主伺服器的一個鏡像,兩個伺服器需要保持一緻,從伺服器會自動跟主伺服器保持一緻,隻需要做一些配置就行,這個後面會介紹到),主從複制就涉及到了讀寫分離技術,需要通過php程式實作(就是從web伺服器上發送請求給資料庫伺服器時實作,後面會介紹到)。

這個時候我們需要考慮到一個問題,大家都知道session是存放到伺服器上的,這時候有兩個web伺服器,假設請求第一個伺服器的時候我們是登入狀态,這個時候再重新整理一次就會請求第二個伺服器,但是第二個伺服器上沒有你登入時存放的session,沒有session就處于未登入狀态,再重新整理又變成了登入狀态,這是為什麼呢?這就是SESSION丢失的情況,想要解決很簡單,隻要把session存放到主伺服器上就行了(就是存到資料庫裡),這就叫SESSION共享。

一般情況下還要有個圖檔伺服器,用來存放圖檔的(把通過php上傳的圖檔寫到這個伺服器上,圖檔伺服器也有可能是個叢集)。

如果是以靜态頁面為主的網站還可以web伺服器和負載均衡伺服器之間搭建一個反向代理伺服器(其實就是将頁面生成緩存存放到這個伺服器上),發送的請求會先經過這個緩存代理伺服器,如果有緩存直接傳回給用戶端就行了,後面的一系列操作都不需要了,如果沒有則再将請求發送給web伺服器,如果說某個頁面不想做緩存可以配置成穿透的行為直接通路後端。

反向代理有兩個比較常用的軟體:

squid:将資料緩存到硬碟中

varnish:将資料緩存到記憶體中(這個比較流行)

高可用:沒有單點故障。就是某個伺服器出現了故障,網站還可以正常的運作,比如web伺服器有多個,壞了一個還可以正常的運作,但是入口伺服器(即負載均衡伺服器)隻有一個,壞了一個就不能正常運作了,是以還得需要備份一個伺服器才行。但是主資料庫伺服器也隻有一個,沒有關系,我們可以把一個從伺服器切換成主伺服器。

CDN:内容分發網絡,假如世界不同的地方使用者通路你的網站,他會從他最近的節點擷取資料,這個需要在世界各地搭建節點,維護成本比較高(這個環境就不要自己搭建了,建議使用第三方的)。