基礎(chǔ)教學(xué) | 什么是負(fù)載均衡?

簡評:不想看文字的話,文章里的圖片還是挺清晰易懂的。

負(fù)載均衡是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負(fù)載分布到多個服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性。

一個沒有負(fù)載均衡的 web 架構(gòu)類似下面這樣:


在這里用戶是直連到 web 服務(wù)器,如果這個服務(wù)器宕機(jī)了,那么用戶自然也就沒辦法訪問了。另外,如果同時有很多用戶試圖訪問服務(wù)器,超過了其能處理的極限,就會出現(xiàn)加載速度緩慢或根本無法連接的情況。

而通過在后端引入一個負(fù)載均衡器和至少一個額外的 web 服務(wù)器,可以緩解這個故障。通常情況下,所有的后端服務(wù)器會保證提供相同的內(nèi)容,以便用戶無論哪個服務(wù)器響應(yīng),都能收到一致的內(nèi)容。

從圖里可以看到,用戶訪問負(fù)載均衡器,再由負(fù)載均衡器將請求轉(zhuǎn)發(fā)給后端服務(wù)器。在這種情況下,單點故障現(xiàn)在轉(zhuǎn)移到負(fù)載均衡器上了。這里又可以通過引入第二個負(fù)載均衡器來緩解,但在討論之前,我們先探討下負(fù)載均衡器的工作方式。

負(fù)載均衡器可以處理什么樣的請求?

負(fù)載均衡器的管理員能主要為下面四種主要類型的請求設(shè)置轉(zhuǎn)發(fā)規(guī)則:

  • HTTP
  • HTTPS
  • TCP
  • UDP

負(fù)載均衡器如何選擇要轉(zhuǎn)發(fā)的后端服務(wù)器?

負(fù)載均衡器一般根據(jù)兩個因素來決定要將請求轉(zhuǎn)發(fā)到哪個服務(wù)器。首先,確保所選擇的服務(wù)器能夠?qū)φ埱笞龀鲰憫?yīng),然后根據(jù)預(yù)先配置的規(guī)則從健康服務(wù)器池(healthy pool)中進(jìn)行選擇。

因為,負(fù)載均衡器應(yīng)當(dāng)只選擇能正常做出響應(yīng)的后端服務(wù)器,因此就需要有一種判斷后端服務(wù)器是否「健康」的方法。為了監(jiān)視后臺服務(wù)器的運行狀況,運行狀態(tài)檢查服務(wù)會定期嘗試使用轉(zhuǎn)發(fā)規(guī)則定義的協(xié)議和端口去連接后端服務(wù)器。如果,服務(wù)器無法通過健康檢查,就會從池中剔除,保證流量不會被轉(zhuǎn)發(fā)到該服務(wù)器,直到其再次通過健康檢查為止。

負(fù)載均衡算法

負(fù)載均衡算法決定了后端的哪些健康服務(wù)器會被選中。幾個常用的算法:

  • Round Robin(輪詢):為第一個請求選擇列表中的第一個服務(wù)器,然后按順序向下移動列表直到結(jié)尾,然后循環(huán)。
  • Least Connections(最小連接):優(yōu)先選擇連接數(shù)最少的服務(wù)器,在普遍會話較長的情況下推薦使用。
  • Source:根據(jù)請求源的 IP 的散列(hash)來選擇要轉(zhuǎn)發(fā)的服務(wù)器。這種方式可以一定程度上保證特定用戶能連接到相同的服務(wù)器。

如果你的應(yīng)用需要處理狀態(tài)而要求用戶能連接到和之前相同的服務(wù)器??梢酝ㄟ^ Source 算法基于客戶端的 IP 信息創(chuàng)建關(guān)聯(lián),或者使用粘性會話(sticky sessions)。

最后,想要解決負(fù)載均衡器的單點故障問題,可以將第二個負(fù)載均衡器連接到第一個上,從而形成一個集群。

當(dāng)主負(fù)載均衡器發(fā)生了故障,就需要將用戶請求轉(zhuǎn)到第二個負(fù)載均衡器。因為 DNS 更改通常會較長的時間才能生效,因此需要能靈活解決 IP 地址重新映射的方法,比如浮動 IP(floating IP)。這樣域名可以保持和相同的 IP 相關(guān)聯(lián),而 IP 本身則能在服務(wù)器之間移動。

一個使用浮動 IP 的負(fù)載均衡架構(gòu)示意圖:

以上,大致就是負(fù)載均衡的工作原理。更多關(guān)于負(fù)載均衡技術(shù)的信息,可以參閱下面內(nèi)容:

HAProxy

Nginx

英文原文:What is Load Balancing?
推薦閱讀:API 是如何工作的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ** 內(nèi)容安排: ** 簡介 區(qū)別 Nginx、LVS及HAProxy負(fù)載均衡軟件的優(yōu)缺點 一、簡介 ** 所謂四...
    薛晨閱讀 67,911評論 12 159
  • 一、什么是負(fù)載均衡 首先我們先介紹一下什么是負(fù)載均衡:負(fù)載平衡(Load balancing)是一種計算機(jī)網(wǎng)絡(luò)技術(shù)...
    小流江海閱讀 1,085評論 0 2
  • 《老男孩Linux運維》Nginx Documentation 集群簡介 集群就是指一組(若干)相互獨立的計算機(jī),...
    Zhang21閱讀 3,516評論 0 51
  • 【摘要】 面對大量用戶訪問、高并發(fā)請求,海量數(shù)據(jù),可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫,存儲設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,826評論 0 24
  • 以前,最近,總是想起以前。是不是人在某個階段,都會想起從前,回憶一些片段?或是和小朋友呆一起久了,總是被問及:你那...
    孔律閱讀 329評論 0 1

友情鏈接更多精彩內(nèi)容