當前位置:編程學習大全網 - 行動軟體 - nginx負載均衡原理

nginx負載均衡原理

負載均衡(Load Balance),它在網絡現有結構之上可以提供壹種廉價、有效、透明的方法來擴展 網絡設備 和 服務器的帶寬 ,並可以在壹定程度上 增加吞吐量 、 加強網絡數據處理能力 、提高 網絡的靈活性 和 可用性 等。用官網的話說,它充當著網絡流中“交通指揮官”的角色,“站在”服務器前 處理所有服務器端和客戶端之間的請求 ,從而最大程度地 提高響應速率和容量利用率 ,同時 確保任何服務器都沒有超負荷工作 。如果單個服務器出現故障, 負載均衡的方法會將流量重定向到其余的集群服務器,以保證服務的穩定性 。當新的服務器添加到服務器組後,也可通過負載均衡的方法使其開始自動處理客戶端發來的請求。

負載均衡涉及到以下的基礎知識。

a. Round Robin: 對所有的backend輪訓發送請求,算是最簡單的方式了,也是默認的分配方式;

b. Least Connections(least_conn): 跟蹤和backend當前的活躍連接數目,最少的連接數目說明這個backend負載最輕,將請求分配給他,這種方式會考慮到配置中給每個upstream分配的weight權重信息;

c. Least Time(least_time): 請求會分配給響應最快和活躍連接數最少的backend;

d. IP Hash(ip_hash): 對請求來源IP地址計算hash值,IPv4會考慮前3個octet,IPv6會考慮所有的地址位,然後根據得到的hash值通過某種映射分配到backend;

e. Generic Hash(hash): 以用戶自定義資源(比如URL)的方式計算hash值完成分配,其可選consistent關鍵字支持壹致性hash特性;

用戶(瀏覽器)在和服務端交互的時候,通常會在本地保存壹些信息,而整個過程叫做壹個會話(Session)並用唯壹的Session ID進行標識。會話的概念不僅用於購物車這種常見情況,因為HTTP協議是無狀態的,所以任何需要邏輯上下文的情形都必須使用會話機制,此外HTTP客戶端也會額外緩存壹些數據在本地,這樣就可以減少請求提高性能了。如果負載均衡可能將這個會話的請求分配到不同的後臺服務端上,這肯定是不合適的,必須通過多個backend***享這些數據,效率肯定會很低下,最簡單的情況是保證會話壹致性——相同的會話每次請求都會被分配到同壹個backend上去。

出問題的backend要能被及時探測並剔除出分配群,而當業務增長的時候可以靈活的添加backend數目。此外當前風靡的Elastic Compute雲計算服務,服務商也應當根據當前負載自動添加和減少backend主機。

通常現代的網絡服務者壹個域名會關連到多個主機,在進行DNS查詢的時候,默認情況下DNS服務器會以round-robin形式以不同的順序返回IP地址列表,因此天然將客戶請求分配到不同的主機上去。不過這種方式含有固有的缺陷:DNS不會檢查主機和IP地址的可訪問性,所以分配給客戶端的IP不確保是可用的(Google 404);DNS的解析結果會在客戶端、多個中間DNS服務器不斷的緩存,所以backend的分配不會那麽的理想。

轉自 /weixin_43694144/java/article/details/84098906

  • 上一篇:MOTO A780手機怎麽樣?
  • 下一篇:金山毒霸獵豹和悟空有什麽區別?
  • copyright 2024編程學習大全網