負(fù)載均衡
nginx扮演了反向代理服務(wù)器的角色,它是以依據(jù)什么樣的規(guī)則進(jìn)行請求分發(fā)的呢?他有什么負(fù)載均衡調(diào)度算法?
這里提到的客戶端發(fā)送的、nginx反向代理服務(wù)器接收到的請求數(shù)量,就是我們說的負(fù)載量
請求數(shù)量按照一定的規(guī)則進(jìn)行分發(fā)到不同的服務(wù)器處理的規(guī)則,就是一種均衡規(guī)則
所以~將服務(wù)器接收到的請求按照規(guī)則分發(fā)的過程,稱為負(fù)載均衡。
負(fù)載均衡在實(shí)際項目操作過程中,有硬件負(fù)載均衡和軟件負(fù)載均衡兩種,硬件負(fù)載均衡也稱為硬負(fù)載,如F5負(fù)載均衡,相對造價昂貴成本較高,但是數(shù)據(jù)的穩(wěn)定性安全性等等有非常好的保障,如中國移動中國聯(lián)通這樣的公司才會選擇硬負(fù)載進(jìn)行操作;更多的公司考慮到成本原因,會選擇使用軟件負(fù)載均衡,軟件負(fù)載均衡是利用現(xiàn)有的技術(shù)結(jié)合主機(jī)硬件實(shí)現(xiàn)的一種消息隊列分發(fā)機(jī)制
Nginx支持的負(fù)載均衡調(diào)度算法方式如下:(重點(diǎn))
weight輪詢(默認(rèn)):
接收到的請求按照順序逐一分配到不同的后端服務(wù)器,即使在使用過程中,某一臺后端服務(wù)器宕機(jī),Nginx會自動將該服務(wù)器剔除出隊列,請求受理情況不會受到任何影響。 這種方式下,可以給不同的后端服務(wù)器設(shè)置一個權(quán)重值(weight),用于調(diào)整不同的服務(wù)器上請求的分配率;權(quán)重數(shù)據(jù)越大,被分配到請求的幾率越大;該權(quán)重值,主要是針對實(shí)際工作環(huán)境中不同的后端服務(wù)器硬件配置進(jìn)行調(diào)整的。
ip_hash:
每個請求按照發(fā)起客戶端的ip的hash結(jié)果進(jìn)行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個后端服務(wù)器,這也在一定程度上解決了集群部署環(huán)境下session共享的問題。
fair:
智能調(diào)整調(diào)度算法,動態(tài)的根據(jù)后端服務(wù)器的請求處理到響應(yīng)的時間進(jìn)行均衡分配,響應(yīng)時間短處理效率高的服務(wù)器分配到請求的概率高,響應(yīng)時間長處理效率低的服務(wù)器分配到的請求少;結(jié)合了前兩者的優(yōu)點(diǎn)的一種調(diào)度算法。但是需要注意的是Nginx默認(rèn)不支持fair算法,如果要使用這種調(diào)度算法,請安裝upstream_fair模塊。
url_hash:
按照訪問的url的hash結(jié)果分配請求,每個請求的url會指向后端固定的某個服務(wù)器,可以在Nginx作為靜態(tài)服務(wù)器的情況下提高緩存效率。同樣要注意Nginx默認(rèn)不支持這種調(diào)度算法,要使用的話需要安裝Nginx的hash軟件包。
更多Nginx相關(guān)技術(shù)文章,請訪問Nginx使用教程欄目進(jìn)行學(xué)習(xí)!