負載均衡最全詳解(看這篇就夠了)
來源:mikechen的網際網路架構
負載均衡無處不在,無路是分散式,還是中介軟體,還是微服務,都需要涉及到負載均衡,本篇就接著分享負載均衡
分享大綱:
為什麼需要負載均衡
負載均衡原理
負載均衡作用
負載均衡實現
負載均衡分類
負載均衡應用場景
為什麼需要負載均衡
當系統面臨大量使用者訪問,負載過高的時候,通常會使用增加伺服器數量來進行橫向擴充套件,使用叢集和負載均衡提高整個系統的處理能力。
從單機網站到分散式網站,很重要的區別是業務拆分和分散式部署,將應用拆分後,部署到不同的機器上,實現大規模分散式系統。分散式和業務拆分解決了,從集中到分佈的問題,但是每個部署的獨立業務還存在單點的問題和訪問統一入口問題,為解決單點故障,我們可以採取冗餘的方式。將相同的應用部署到多臺機器上。解決訪問統一入口問題,我們可以在叢集前面增加負載均衡裝置,實現流量分發。
負載均衡的原理
系統的擴充套件可分為縱向(垂直)擴充套件和橫向(水平)擴充套件。
縱向擴充套件,是從單機的角度透過增加硬體處理能力,比如CPU處理能力,記憶體容量,磁碟等方面,實現伺服器處理能力的提升,不能滿足大型分散式系統(網站),大流量,高併發,海量資料的問題。
因此需要採用橫向擴充套件的方式,透過新增機器來滿足大型網站服務的處理能力。比如:一臺機器不能滿足,則增加兩臺或者多臺機器,共同承擔訪問壓力。這就是典型的叢集和負載均衡架構:如下圖:
應用叢集:將同一應用部署到多臺機器上,組成處理叢集,接收負載均衡裝置分發的請求,進行處理,並返回相應資料。
負載均衡裝置:將使用者訪問的請求,根據負載均衡演算法,分發到叢集中的一臺處理伺服器。(一種把網路請求分散到一個伺服器叢集中的可用伺服器上去的裝置)
負載均衡的作用
1.解決併發壓力,提高應用處理效能(增加吞吐量,加強網路處理能力);
2.提供故障轉移,實現高可用;
3.透過新增或減少伺服器數量,提供網站伸縮性(擴充套件性);
4.安全防護;(負載均衡裝置上做一些過濾,黑白名單等處理)
負載均衡的分類
1)二層負載均衡(mac)
根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應)
2)三層負載均衡(ip)
一般採用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP地址響應)
3)四層負載均衡(tcp)
在三次負載均衡的基礎上,用ip+port接收請求,再轉發到對應的機器。
4)七層負載均衡(http)
根據虛擬的url或IP,主機名接收請求,再轉向相應的處理伺服器。
最常見的四層和七層負載均衡
1)四層的負載均衡就是基於IP+埠的負載均衡:在三層負載均衡的基礎上,透過釋出三層的IP地址(VIP),然後加四層的埠號,來決定哪些流量需要做負載均衡。
對應的負載均衡器稱為四層交換機(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載均衡。此種負載均衡器不理解應用協議(如HTTP/FTP/MySQL等等)。
實現四層負載均衡的軟體有:
F5:硬體負載均衡器,功能很好,但是成本很高。
lvs:重量級的四層負載軟體
nginx:輕量級的四層負載軟體,帶快取功能,正規表示式較靈活
haproxy:模擬四層轉發,較靈活
2)七層的負載均衡就是基於虛擬的URL或主機IP的負載均衡
對應的負載均衡器稱為七層交換機(L7 switch),除了支援四層負載均衡以外,還有分析應用層的資訊,如HTTP協議URI或Cookie資訊,實現七層負載均衡。此種負載均衡器能理解應用協議。
實現七層負載均衡的軟體有:
haproxy:天生負載均衡技能,全面支援七層代理,會話保持,標記,路徑轉移;
nginx:只在http協議和mail協議上功能比較好,效能與haproxy差不多;
apache:功能較差
Mysql proxy:功能尚可。
總的來說,一般是lvs做4層負載;nginx做7層負載;haproxy比較靈活,4層和7層負載均衡都能做。
負載均衡應用場景
場景一:應用於高訪問量的業務
如果您的應用訪問量很高,您可以透過配置監聽規則將流量分發到不同的伺服器上。
場景二:橫向擴張系統
您可以根據業務發展的需要,透過隨時新增和移除伺服器,來擴充套件應用系統的服務能力,適用於各種Web伺服器和App伺服器。
場景三:消除單點故障
當其中一部分伺服器發生故障後,負載均衡會自動遮蔽故障的伺服器,將請求分發給正常執行的伺服器,保證應用系統仍能正常工作。
場景四:同城容災 (多可用區容災)
為了提供更加穩定可靠的負載均衡服務,當主可用區出現機房故障或不可用時,負載均衡仍然有能力在非常短的時間內切換到另外一個備可用區恢復服務能力;當主可用區恢復時,負載均衡同樣會自動切換到主可用區提供服務,保證服務依然正常執行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2952997/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java NIO全面詳解(看這篇就夠了)Java
- kafka3.x原理詳解看這篇就夠了Kafka
- mongoDB看這篇就夠了MongoDB
- Oracle索引,看這篇就夠了Oracle索引
- 瞭解 MongoDB 看這一篇就夠了MongoDB
- 前端er瞭解GraphQL,看這篇就夠了前端
- iOS 動畫詳解(學習動畫看這一篇就夠了)iOS動畫
- 入門Webpack,看這篇就夠了Web
- Android Fragment看這篇就夠了AndroidFragment
- OAuth授權|看這篇就夠了OAuth
- Zookeeper入門看這篇就夠了
- Git 看這一篇就夠了Git
- React入門看這篇就夠了React
- JavaScript正則,看這篇就夠了JavaScript
- 小程式分享,看這篇就夠了
- 【詳細圖解】學習佇列,看這一篇就夠了!圖解佇列
- Java多執行緒超級詳解(只看這篇就夠了)Java執行緒
- Flutter DataTable 看這一篇就夠了Flutter
- 小程式入門看這篇就夠了
- Java 動態代理,看這篇就夠了Java
- vue 元件通訊看這篇就夠了Vue元件
- java序列化,看這篇就夠了Java
- 代理模式看這一篇就夠了模式
- EFCore 6.0入門看這篇就夠了
- ZooKeeper分散式配置——看這篇就夠了分散式
- Java 集合看這一篇就夠了Java
- 學習Less-看這篇就夠了
- [收藏]學習sed,看這篇就夠了
- 瞭解SSL證書,看這一篇就夠了!!
- 【K8S】Service服務詳解,看這一篇就夠了!!K8S
- 負載均衡最全詳解(圖文全面總結)負載
- 關於SwiftUI,看這一篇就夠了SwiftUI
- 入門Hbase,看這一篇就夠了
- macOS 安裝 Nebula Graph 看這篇就夠了Mac
- HashMap的實現原理(看這篇就夠了)HashMap
- jQuery入門看這一篇就夠了jQuery
- Elasticsearch入門,看這一篇就夠了Elasticsearch
- ActiveMq 之JMS 看這一篇就夠了MQ