DNS、硬件、LVS、Nginx該如何搭配?
1、為什么要負載均衡?
系統(tǒng)的擴展可分為縱向(垂直)擴展和橫向(水平)擴展。縱向擴展,是從單機的角度通過增加硬件處理能力,比如CPU處理能力,內(nèi)存容量,磁盤等方面,實現(xiàn)服務(wù)器處理能力的提升,不能滿足大型分布式系統(tǒng)(網(wǎng)站),大流量,高并發(fā),海量數(shù)據(jù)的問題。因此需要采用橫向擴展的方式,通過添加機器來滿足大型網(wǎng)站服務(wù)的處理能力。比如:一臺機器不能滿足,則增加兩臺或者多臺機器,共同承擔(dān)訪問壓力。這就是典型的集群和負載均衡架構(gòu),如下圖:

應(yīng)用集群:將同一應(yīng)用部署到多臺機器上,組成處理集群,接收負載均衡設(shè)備分發(fā)的請求,進行處理,并返回相應(yīng)數(shù)據(jù)。
負載均衡設(shè)備:將用戶訪問的請求,根據(jù)負載均衡算法,分發(fā)到集群中的一臺處理服務(wù)器(一種把網(wǎng)絡(luò)請求分散到一個服務(wù)器集群中的可用服務(wù)器上去的設(shè)備)。
負載均衡的作用(解決的問題):
1、解決并發(fā)壓力,提高吞吐量。
2、提供故障轉(zhuǎn)移,檢測下游服務(wù)器狀態(tài),實現(xiàn)高可用。
3、利于橫向擴展服務(wù)器。
4、安全防護,負載均衡設(shè)備上做一些過濾,黑白名單等處理。
2、負載均衡種類
2.1 DNS負載均衡
最早的負載均衡技術(shù),利用域名解析實現(xiàn)負載均衡,在DNS服務(wù)器,配置多個A記錄,這些A記錄對應(yīng)的服務(wù)器構(gòu)成集群。大型網(wǎng)站總是部分使用DNS解析,作為第一級負載均衡。如下圖:

優(yōu)點
1、使用簡單:負載均衡工作,交給DNS服務(wù)器處理,省掉了負載均衡服務(wù)器維護的麻煩。
2、提高性能:可以支持基于地址的域名解析,解析成距離用戶最近的服務(wù)器地址,可以加快訪問速度,改善性能。
缺點
1、可用性差:DNS解析是多級解析,新增/修改DNS后,解析時間較長;解析過程中,用戶訪問網(wǎng)站將失敗。
2、擴展性低:DNS負載均衡的控制權(quán)在域名商那里,無法對其做更多的改善和擴展。
3、維護性差:也不能反映服務(wù)器的當前運行狀態(tài);支持的算法少;不能區(qū)分服務(wù)器的差異(不能根據(jù)系統(tǒng)與服務(wù)的狀態(tài)來判斷負載)。
4、更新不及時:DNS緩存可能會保留較長時間。
實踐建議
將DNS作為第一級負載均衡,A記錄對應(yīng)著內(nèi)部負載均衡的IP地址,通過內(nèi)部負載均衡將請求分發(fā)到真實的Web服務(wù)器上。
2.2 硬件負載均衡
硬件負載均衡通過單獨的硬件設(shè)備來實現(xiàn)負載均衡功能,這類設(shè)備和路由器、交換機類似。
目前業(yè)界典型的硬件負載均衡設(shè)備有兩款: F5 和 A10 。性能強勁、功能強大,但價格都很昂貴。
優(yōu)點
1、功能強大:全面支持各層級的負載均衡,支持全面的負載均衡算法,支持全局負載均衡。
2、性能強大:對比一下,軟件負載均衡支持到 10 萬級并發(fā)已經(jīng)很厲害了,硬件負載均衡可以支持 100 萬以上的并發(fā)。
3、穩(wěn)定性高:商用硬件負載均衡,經(jīng)過了良好的嚴格測試,經(jīng)過大規(guī)模使用,穩(wěn)定性高。
4、支持安全防護:硬件均衡設(shè)備除具備負載均衡功能外,還具備防火墻、防 DDoS 攻擊等安全功能。
缺點
1、價格昂貴:最普通的一臺 F5十多萬,好一點近百萬元。
2、擴展能力差:硬件設(shè)備,可以根據(jù)業(yè)務(wù)進行配置,但無法進行擴展和定制。
實踐建議
可以在DNS作地理級別負載均衡的情況下,在其下級使用F5或A10作為低級的負載均衡器,之后將流量轉(zhuǎn)發(fā)到下級集群,如下圖所示。
2.3 軟件負載均衡
軟件負載均衡,可以在普通的服務(wù)器上運行負載均衡軟件,實現(xiàn)負載均衡功能。目前常見的有 Nginx
、HAproxy
、LVS
,其中的區(qū)別:
Nginx
:七層(OSI網(wǎng)絡(luò)七層模型,第七層應(yīng)用層)負載均衡,支持 HTTP、E-mail 協(xié)議,同時也支持四層負載均衡;HAproxy
:支持七層規(guī)則的,性能也很不錯。OpenStack 默認使用的負載均衡軟件就是 HAproxy;LVS
:運行在內(nèi)核態(tài),性能是軟件負載均衡中最高的,嚴格來說工作在第三層網(wǎng)絡(luò)層,所以更通用一些,適用各種應(yīng)用服務(wù)。
優(yōu)點
1、易操作:無論是部署還是維護都相對比較簡單。
2、便宜:只需要服務(wù)器的成本,軟件是免費的
3、靈活:4 層和 7 層負載均衡可以根據(jù)業(yè)務(wù)特點進行選擇,方便進行擴展和定制功能。
與硬件負載均衡相比的缺點
1、性能一般,一個 Nginx 大約能支撐 5 萬并發(fā)。
2、功能沒有硬件負載均衡那么強大。
3、一般不具備防火墻和防 DDoS 攻擊等安全功能。
3、LVS:專注網(wǎng)絡(luò)更底層,性能更卓越
前面介紹了負載均衡的種類后,可以看到重點應(yīng)該在軟件負載均衡。Nginx大家都應(yīng)該有所耳聞,工作在應(yīng)用層,配置方便,所有的流量(相應(yīng)、請求報文)都會經(jīng)過代理服務(wù)器Nginx,但如果流量較大,勢必為成為系統(tǒng)的瓶頸,而工作在傳輸層和網(wǎng)絡(luò)層的LVS負載均衡器具有更強的負載均衡能力。概括的來說,它能在網(wǎng)絡(luò)層就實現(xiàn)路由重定向,之后響應(yīng)報文會直接通過真實服務(wù)器發(fā)送給原始的客戶端,不走LVS,大大降低了流量;但需要在代理服務(wù)器和真實服務(wù)器上進行復(fù)雜的配置,而且不會有錯誤檢測和重發(fā)。
4、DNS+硬件+LVS+Nginx多級負載均衡
前面咱們提到DNS負載均衡的時候就引出了多級負載均衡的概念,LVS像是在硬件負載均衡器和Nginx之間的一種折中的解決方案,由此可以形成一種 DNS —> F5/A10 —> LVS —> Nginx
的負載均衡架構(gòu)體系了(具體系統(tǒng)具體分析,可以取消任意一層),很像計算機網(wǎng)絡(luò)的網(wǎng)絡(luò)層+數(shù)據(jù)鏈路層多級架構(gòu)的模式。
LVS + 多Nginx 的使用中,既可以避免LVS故障檢測的短板,又能避免Nginx性能瓶頸問題。同時nginx 還可以作為一個中間環(huán)節(jié)來減小后端 tomcat 的服務(wù)壓力,以及做一些業(yè)務(wù)切換、分流、前置緩存的功能。
5、負載均衡器高可用集群
單點LVS或Nginx仍然可能存在單點故障(可能概率極小),可以根據(jù)業(yè)務(wù)的關(guān)鍵程度,構(gòu)建負載均衡器集群,LVS自身有雙機熱備機制(主備架構(gòu)),Nginx需要額外編寫軟件來實現(xiàn)主備或主從架構(gòu)。
6、到底要不要負載均衡?
前面談?wù)摿诉@么多的負載均衡方案,為什么又回到了第一個問題,做不做負載均衡?或者說,橫向擴展真的有必要么?這確實是一個相對的問題,如果只是常規(guī)的中小應(yīng)用,qps根本達不到單機Nginx的峰值5W (可以參考20W用戶的應(yīng)用qps只有十幾),即使是大型應(yīng)用,也得分應(yīng)用類型,并不是每個應(yīng)用都要設(shè)計成秒殺系統(tǒng),橫向擴展了之后意味著需要投入成倍的管理成本??傊梢韵葍?yōu)化算法,分析系統(tǒng)瓶頸,重構(gòu)單機應(yīng)用代碼,軟件實在無法擴展了之后再考慮擴展硬件,而且現(xiàn)在處于云計算時代,彈性云服務(wù)器是很方便進行硬件擴展的,最后的最后,再考慮集群架構(gòu)。切記,不要一味地為了高吞吐量而采用直接集群、分布式,技術(shù)架構(gòu)要跟著業(yè)務(wù)能力跑。如果只是個人博客網(wǎng)站,做負載均衡可能只是感動自己。
如若轉(zhuǎn)載,請注明出處:開源字節(jié) ? https://sourcebyte.vip/article/273.html