DNS負(fù)載均衡最早的負(fù)載均衡技術(shù),利用域名解析實現(xiàn)負(fù)載均衡,在DNS服務(wù)器,配置多個A記錄,這些A記錄對應(yīng)的服務(wù)器構(gòu)成集群。大型網(wǎng)站總是部分使用DNS解析,作為第一級負(fù)載均衡。如下圖: 優(yōu)點
缺點
實踐建議 將DNS作為第一級負(fù)載均衡,A記錄對應(yīng)著內(nèi)部負(fù)載均衡的IP地址,通過內(nèi)部負(fù)載均衡將請求分發(fā)到真實的Web服務(wù)器上。一般用于互聯(lián)網(wǎng)公司,復(fù)雜的業(yè)務(wù)系統(tǒng)不合適使用。如下圖: HTTP負(fù)載均衡Nginx是一個高性能的HTTP和反向代理服務(wù)器, 通過其本身的Upstream模塊,我們可以將其作為7層負(fù)載均衡服務(wù)器使用,其支持的負(fù)載均衡策略如下: 1,輪詢:將請求依次輪詢發(fā)給每個服務(wù)器 2,最少鏈接:將請求發(fā)送給持有最少活動鏈接的服務(wù)器 3,IP哈希:通過哈希函數(shù)決定請求發(fā)送給哪個服務(wù)器 4,權(quán)重:服務(wù)器的權(quán)重越高,處理請求的概率越大 系統(tǒng)整體結(jié)構(gòu)如下:
一. Nginx/ Haproxy比較 早期版本Nginx只能在HTTP層負(fù)載,不支持TCP,經(jīng)過1.9和1.11兩個大版本的大躍進(jìn)般開發(fā),目前在功能和特性上,已經(jīng)大幅超越haproxy ,當(dāng)然haproxy也有自己的長處。 比如: stream module:同時支持TCP和UDP,也支持haproxy的proxy protocol。 stream module的TLS卸載:可以把TLS在nginx卸載掉,后端只需要跑http或者明文tcp流。得益于nginx的多進(jìn)程和對TLS硬件加速卡的支持,對于大流量網(wǎng)站這是非常重要的功能。 SNI Preread:基于SNI協(xié)議的host頭做負(fù)載均衡。在一些特殊場合很有用處,比如嚴(yán)格管理私鑰的場景,也可以在不改動現(xiàn)有架構(gòu)的場景下,由nginx統(tǒng)一調(diào)度流量。 IP Transparency:對這個功能沒實際測試過??垂俜轿臋n應(yīng)該類似SNAT和DNAT的功能。相比Linux的NAT功能,nginx能做的更多,比如負(fù)載均衡、url路由等等。 TLS:雙證書、HTTP/2、TLS v1.3(1.13版) 緩存模塊的切片模塊 而且,nginx還有幾個大殺器:map模塊、lua、js和shared memory。 1)HAProxy對于后端服務(wù)器一直在做健康檢測(就算請求沒過來的時候也會做健康檢查): 一. Nginx / LVS 轉(zhuǎn)發(fā)策略 LVS采用的是同步請求轉(zhuǎn)發(fā)的策略。同步轉(zhuǎn)發(fā)是在lvs服務(wù)器接收到請求之后,立即redirect到一個后端服務(wù)器,由客戶端直接和后端服務(wù)器建立連接。 Nginx采用的是同步請求轉(zhuǎn)發(fā)的策略。異步轉(zhuǎn)發(fā)是nginx在保持客戶端連接的同時,發(fā)起一個相同內(nèi)容的新請求到后端,等后端返回結(jié)果后,由nginx返回給客戶端。 在其它的均衡器(lvs/haproxy/apache等)里,每個請求都是只有一次機會的,假如用 戶發(fā)起一個請求,結(jié)果該請求到達(dá)后臺服務(wù)器后,后臺服務(wù)器剛好掛掉了,那么這個請求就失敗了;而nginx因為是異步的,所以這個請求可以重新發(fā)往下一個后臺,下一個 后臺返回了正常的數(shù)據(jù),于是這個請求就能成功了。 |
|