互聯網架構中的負載均衡

互聯網架構中的負載均衡

來自專欄 Java之鏈

計算機的資源在分配和使用有兩大思維:效率和公平。比如負載均衡技術就體現了公平思維

負載均衡(Load Balance)是集群和分散式系統中必須考慮的關鍵因素,它通常是指把數據或請求均勻分攤到操作單元上,它的靈魂就是「均勻」

負載均衡主要分為硬體負載均衡和軟體負載均衡兩大類。我在某央企工作時,使用的F5就是硬體負載均衡(記得均衡策略是輪詢),本文主要談軟體負載均衡。

說到負載均衡,我第一反應是Nginx,其實互聯網架構中到處體現著負載均衡的設計。

三層架構

四層架構

上圖是常見的互聯網架構,它的最大特點就是分層,每層可以水平擴展在上層訪問下層的時候,就會用到用負載均衡技術

1. 客戶端層 -> 反向代理層

上網的第一步驟,就是解析域名,得到IP,這通過DNS實現。DNS-server對於一個域名,可能配置多個IP,此時的負載均衡是通過DNS輪詢實現的,會輪詢返回IP,保證每個IP訪問是均勻的。這些IP就是Nginx的外網IP

2.反向代理層 -> 站點層

這一步驟的負載均衡是通過Nginx實現的。通過修改nginx.conf可以配置多種負載均衡策略

常見的Nginx負載均衡策略有以下三種:

  • 輪詢(Round Robin,RR)
  • 隨機(Random)
  • 權重輪詢(Weighted Round Robin,WRR)
  • 最少連接(Least Connections):那個web-server連接少,就路由到哪個web-server
  • 源地址哈希(Source hashing):只要IP是均勻的,那麼請求理論上也是均衡的。

3.站點層 -> 服務層

這一步驟的負載均衡,是通過服務連接池實現的。上游連接池會與下游建立多個連接,每次請求會隨機選取一個連接。

4.服務層->數據層:

請求是否均衡取決於數據分布是否均衡

在數據量很大的時候,數據層(db和cache)會做水平切分。所以數據層的負載均衡,分為數據的均衡和請求的均衡。

數據的均衡是指,水平切分後的每個服務,數據量是差不多的

請求的均衡是指,水平切分後的每個服務,請求量是差不多的。

數據的均衡提現在水平切分的策略上,最常見的有兩種:

A)按照range水平切分

這種切分的優點:

  • 實現簡單
  • 數據均衡
  • 易於擴展

缺點:請求的負載不夠均衡。可能在某個range中服務請求壓力比較大。

B)根據id做哈希

這種切分的優點:

  • 實現簡單
  • 數據均衡
  • 請求均衡

缺點:不易擴展,增加或減少機器,需要rehash,伴隨數據遷移。可以利用一致性哈希來優化這種方案。

5.總結:

客戶端層->反向代理層:DNS輪詢

反向代理層->站點層:Nginx

站點層->服務層:服務連接池

服務層->數據層:請求是否均衡依據數據分布是否均衡,數據層的數據切分方式,常見的有按照範圍水平切分和hash水平切分。

Thanks a million:一分鐘了解負載均衡的一切


推薦閱讀:

負載均衡--一致性hash演算法
想玩集群?讀寫分離?你要先懂這個!
nginx負載均衡之旅

TAG:負載均衡 | 系統架構 |