負載均衡Load Balance)是高可用網絡基礎架構的關鍵組件,通常用于將工作負載分布到多個服務器來提高網站、應用、數據庫或其他服務的性能和可靠性。負載均衡,其核心就是網絡流量分發,分很多維度。
負載均衡(Load Balance)通常是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。
負載均衡是建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
通過一個例子詳細介紹:
沒有負載均衡 web 架構

在這里用戶是直連到 web 服務器,如果這個服務器宕機了,那么用戶自然也就沒辦法訪問了。 另外,如果同時有很多用戶試圖訪問服務器,超過了其能處理的極限,就會出現加載速度緩慢或根本無法連接的情況。
而通過在后端引入一個負載均衡器和至少一個額外的 web 服務器,可以緩解這個故障。 通常情況下,所有的后端服務器會保證提供相同的內容,以便用戶無論哪個服務器響應,都能收到一致的內容。
有負載均衡 web 架構

用戶訪問負載均衡器,再由負載均衡器將請求轉發給后端服務器。在這種情況下,單點故障現在轉移到負載均衡器上了。 這里又可以通過引入第二個負載均衡器來緩解。
那么負載均衡器的工作方式是什么樣的呢,負載均衡器又可以處理什么樣的請求?
負載均衡器的管理員能主要為下面四種主要類型的請求設置轉發規則:
* HTTP (七層)
* HTTPS (七層)
* TCP (四層)
* UDP (四層)
負載均衡器如何選擇要轉發的后端服務器?
負載均衡器一般根據兩個因素來決定要將請求轉發到哪個服務器。首先,確保所選擇的服務器能夠對請求做出響應,然后根據預先配置的規則從健康服務器池(healthy pool)中進行選擇。
因為,負載均衡器應當只選擇能正常做出響應的后端服務器,因此就需要有一種判斷后端服務器是否健康的方法。為了監視后臺服務器的運行狀況,運行狀態檢查服務會定期嘗試使用轉發規則定義的協議和端口去連接后端服務器。 如果,服務器無法通過健康檢查,就會從池中剔除,保證流量不會被轉發到該服務器,直到其再次通過健康檢查為止。
負載均衡算法
負載均衡算法決定了后端的哪些健康服務器會被選中。 其中常用的算法包括:
* Round Robin(輪詢):為第一個請求選擇列表中的第一個服務器,然后按順序向下移動列表直到結尾,然后循環。
* Least Connections(最小連接):優先選擇連接數最少的服務器,在普遍會話較長的情況下推薦使用。
* Source:根據請求源的 IP 的散列(hash)來選擇要轉發的服務器。這種方式可以一定程度上保證特定用戶能連接到相同的服務器。
如果你的應用需要處理狀態而要求用戶能連接到和之前相同的服務器。可以通過 Source 算法基于客戶端的 IP 信息創建關聯,或者使用粘性會話(sticky sessions)。
除此之外,想要解決負載均衡器的單點故障問題,可以將第二個負載均衡器連接到第一個上,從而形成一個集群。
- 一、經典(一)
- 二、經典(二)
- 三、經典(三)
- 四、經典(四)
- 五、經典(五)
- 六、經典(六)
- 七、經典(七)
- 八、經典(八)
- 九、經典(九)
- 十、經典(十)
- 十一、經典(十一)
- 十二、經典(十二)
- 其他
- 1、知識點一
- 2、面試集
- 3、負載均衡原理
- 4、LVS相關了解
- 5、微服務架構
- 6、分布式鎖實現原理
- 7、Etcd怎么實現分布式鎖
- 8、Redis的數據結構有哪些,以及實現場景
- 9、Mysql高可用方案有哪些
- 10、Go語言的棧空間管理是怎么樣的
- 11、Goroutine和Channel的作用分別是什么
- 12、Go中的鎖有哪些?三種鎖,讀寫鎖,互斥鎖,還有map的安全的鎖?
- 13、怎么限制Goroutine的數量
- 14、Goroutine和線程的區別?
- 15、中間件原理