nginx做爲方向代理時,能夠爲後端服務器提供負載均衡的功能,其中加權輪詢策略使是其默認的負載均衡策略。權值大的服務器處理的請求也應該多。nginx採用加權輪詢策略時選取後端服務器的核心代碼是ngx_http_upstream_get_peer函數(位於ngx_http_upstream_round_robin.c中)。
代碼說明
(1) peer[n].weight:後端服務器初始權重。
(2) peer[n].current_weight:後端服務器當前權重,初始情況等於peer[n].weight。
(3) peers->number:後端服務器的個數
(4) peers->peer[0]:一個數組的第一個元素,這個數組的每個元素對應一個後端服務器。
(5) 一旦某個後端服務器n被選中後,會在其他處理函數中執行peer[n].current_weight–。
(6) 代碼18行乘以1000是爲了避免浮點處理,所以直接報被除數放大1000倍,也就是間接把精度提升到小數點後三位,注意這裏是權值的比較,因此把兩邊權值都放大1000倍並不會影響最終的比較結果。
參考鏈接:
http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539620&idx=1&sn=2758397d2e406c47c63153f978ec0473&scene=23&srcid=0916i7QNDKwXZ60KwIbvczSC#rd