負載均衡模組決定哪個後端伺服器可以分到特定的請求;現有的實現有通過輪轉法或者對請求的某些部分進行雜湊處理。 這一節將會介紹HTTP://www.aliyun.com/zixun/aggregation/13996.html">負載均衡模組的註冊和調用,並以upstream_hash模組為例子( 原始程式碼 )。 Upstream_hash模組對在 nginx.conf中確定的某個變數進行雜湊。
一個負載均衡模組有以下六個方面:
1. 啟動配置指令需要調用一個註冊函數registration function(比如:hash)
2. 註冊函式定義合法的伺服器選項(比如:weight=),同時註冊上游主機初始化函數upstream initialization function
3. 上游主機初始化函數在配置確認好以後被調用:
a) 解析伺服器名稱,指向特定的IP位址
b) 為每個socket分配空間
c) 設定同伴初始化函數peer initialization function的回檔入口
4. 同伴初始化函數在每個請求來臨的時候調用一次,設置一個負載均衡函數可以進入和操作的資料結構體。
5. 負載均衡函數load-balancing function決定這個請求的去向;在用戶端請求 來時至少被調用一次(如果後端伺服器回復失敗,可能要更多次數)。 這裡 發生的東西很有趣。
6. 最後,在和特定的後端伺服器結束通信的時候,同伴釋放函數peer release function會更新統計(通信是否成功或失敗)。
有很多內容,我將會一點點得展開。
5.1.啟動指令
指令聲明,既確定了他們的有效存在位置,也給出會調用哪個函數。 對於負載均衡的模組應該有的標識NGX_HTTP_UPS_CONF,以便Nginx知道這個指令只在upstream配置部分有效。 它應該提供一個指向註冊函數的指標。 下面是upstream_hash模組的指令聲明:
{ ngx_string("hash"),
NGX_HTTP_UPS_CONF| NGX_CONF_NOARGS,
ngx_HTTP_upstream_hash,
0,
0,
Null },
其他沒什麼了。