軟體開發中的負載均衡
阿新 • • 發佈:2020-07-27
目錄
叢集初探
- nginx:keepalived,入口唯一
- tomcat:負載均衡叢集,session共享,使用redis
- mysql:mysql proxy中間層,master可讀寫,以寫為主,slave只讀
- oracle:rac,外層看起來多個例項,底層是共享一個儲存系統
叢集與分散式
- 叢集是軟體的橫向擴充套件,找幫手
- 分散式是軟體的縱向擴充套件,分階段
- 實際場景是:分散式+叢集
叢集的分類
叢集可以實現高可用、負載均衡、提升單臺計算機的CPU計算能力
- 高可用叢集:叢集中節點失效,熱切換到可用節點
- 高CPU消耗叢集:叢集中節點並行消耗cpu資源,最終彙總各節點計算結果,同大資料處理思路
- 負載均衡叢集:叢集中按需分配各節點的訪問頻率
負載均衡器的功能
- 使用負載均衡演算法保證機器的負載合理
- 健康檢查:檢查下游服務是否可用以及服務健康情況(Ping
三層
,TCP/UDP四層
,HTTP七層
,FTP,DNS等),剔除不健康服務的祖籍 - 會話保持:保證會話的原子性,一般使用會話共享(基於檔案cookie、基於記憶體cookie、cookie禁用時隱藏域放置session-id)
- 快取靜態資源,減少後臺資源消耗
負載演算法
- 輪詢、權重、優先權、最少連線數、最快響應、數學運算(餘數、模、hash等)、基於資料包內容
- 優先權的方式是將服務分組,優先權是針對組的,組內仍使用負載演算法。當整個組達到訪問閾值時,切換到另一分組。多活
負載均衡實現
- 通過DNS域名解析進行負載均衡(非真正意義的負載),一個域名對應多個IP(尋找最近的IP),可以把域名解析到不同IP的機器,可使用dig檢視域名解析結果
- 通過鏈路層(二層)解析進行負載均衡,後臺服務設定相同的虛擬IP,通過指定MAC的方式訪問後臺服務
- 通過傳輸層(四層)TCP/UDP進行負載均衡,通過指定IP的方式訪問後臺服務,HAProxy、IPVS、F5等
- 通過應用層(七層)http/https/ws,三次握手後,通過解析應用層內容資料資訊進行負載, nginx、HAProxy等
如果服務不是基於應用層,那麼只能用四層以下的負載均衡方法
七層的方式使用起來最靈活、安全性也高、