基于Nginx的軟件負(fù)載均衡實(shí)現(xiàn)解讀
2.5 TCP/UDP流量的負(fù)載均衡
通常,HTTP和HTTPS的負(fù)載均衡叫做七層負(fù)載均衡,而TCP和UDP協(xié)議的負(fù)載均衡叫做四層負(fù)載均衡。因?yàn)槠邔迂?fù)載均衡通常都是HTTP和HTTPS協(xié)議,所以這種負(fù)載均衡相當(dāng)于是四層負(fù)載均衡的特例化,均衡器可以根據(jù)HTTP/HTTPS協(xié)議的頭部(User-Agent、Language等)、響應(yīng)碼甚至是響應(yīng)內(nèi)容做額外的規(guī)則,達(dá)到特定條件特定目的的backend轉(zhuǎn)發(fā)的需求。
除了Nginx所專長的HTTP負(fù)載均衡,Nginx還支持TCP和UDP流量的負(fù)載均衡,適用于LDAP/MySQL/RTMP和DNS/syslog/RADIUS各種應(yīng)用場(chǎng)景。這類情況的負(fù)載均衡使用stream來配置,Nginx編譯的時(shí)候需要支持–with-stream選項(xiàng)。查看手冊(cè),其配置原理和參數(shù)和HTTP負(fù)載均衡差不多。
因?yàn)門CP、UDP的負(fù)載均衡都是針對(duì)通用程序的,所以之前HTTP協(xié)議支持的match條件(status、header、body)是沒法使用的。TCP和UDP的程序可以根據(jù)特定的程序,采用send、expect的方式來進(jìn)行動(dòng)態(tài)健康檢測(cè)。
2.6 其他特性
slow_start=30s:防止新添加/恢復(fù)的主機(jī)被突然增加的請(qǐng)求所壓垮,通過這個(gè)參數(shù)可以讓該主機(jī)的weight從0開始慢慢增加到設(shè)定值,讓其負(fù)載有一個(gè)緩慢增加的過程。
max_conns=30:可以設(shè)置backend的最大連接數(shù)目,當(dāng)超過這個(gè)數(shù)目的時(shí)候會(huì)被放到queue隊(duì)列中,同時(shí)隊(duì)列的大小和超時(shí)參數(shù)也可以設(shè)置,當(dāng)隊(duì)列中的請(qǐng)求數(shù)大于設(shè)定值,或者超過了timeout但是backend還不能處理請(qǐng)求,則客戶端將會(huì)收到一個(gè)錯(cuò)誤返回。通常來說這還是一個(gè)比較重要的參數(shù),因?yàn)镹ginx作為反向代理的時(shí)候,通常就是用于抗住并發(fā)量的,如果給backend過多的并發(fā)請(qǐng)求,很可能會(huì)占用后端過多的資源(比如線程、進(jìn)程非事件驅(qū)動(dòng)),最終反而會(huì)影響backend的處理能力。
