淺談接入網(wǎng)負(fù)載均衡問(wèn)題
接入網(wǎng)負(fù)載均衡問(wèn)題一直是我們關(guān)注的話題,可能好多人還不了解如何解決負(fù)載均衡問(wèn)題,沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。大部分的個(gè)人網(wǎng)站在一開(kāi)始或許只是跟幾十人上百人共享的一個(gè)虛擬主機(jī)空間,然后隨著內(nèi)容的增加和訪問(wèn)量的增長(zhǎng),虛擬主機(jī)的帶寬、空間已經(jīng)不能滿足需求,站長(zhǎng)就得開(kāi)始考慮為網(wǎng)站購(gòu)置一臺(tái)獨(dú)立的服務(wù)器,使用100M共享甚至是10M獨(dú)享帶寬;而當(dāng)網(wǎng)站繼續(xù)發(fā)展,訪問(wèn)的用戶也已經(jīng)遍布大江南北,站長(zhǎng)又得考慮電信網(wǎng)通的互通問(wèn)題。
在南方和北方各放置一臺(tái)服務(wù)器作為鏡像站點(diǎn),或是采用雙線接入;當(dāng)這個(gè)網(wǎng)站訪問(wèn)量更大時(shí),一味的增加帶寬和設(shè)置鏡像站點(diǎn)無(wú)疑會(huì)使網(wǎng)站運(yùn)營(yíng)成本劇增,加上單個(gè)服務(wù)器本身也有性能和線程的瓶頸,在并發(fā)訪問(wèn)量較大并且集中在一臺(tái)服務(wù)器的時(shí)候,“Server too busy”就出現(xiàn)了,而這時(shí)站長(zhǎng)應(yīng)該采用什么方式使得網(wǎng)站在高訪問(wèn)量的時(shí)候仍然擁有較好的訪問(wèn)效果呢?這就牽涉到負(fù)載均衡的話題。我們之前討論過(guò)CDN,其實(shí)CDN除了加速之外,也具有分流的效果,因此在負(fù)載均衡領(lǐng)域也有不少應(yīng)用,其實(shí)基本上緩存(Cache)+鏡像技術(shù)都有分流作用,但是如何分流還是需要一個(gè)負(fù)載均衡設(shè)備進(jìn)行引導(dǎo),所以,我們今天專(zhuān)門(mén)討論負(fù)載均衡技術(shù)。
關(guān)于負(fù)載均衡服務(wù)
負(fù)載均衡服務(wù)能夠平衡服務(wù)器群中的所有的服務(wù)器和應(yīng)用之間的通信負(fù)載,根據(jù)實(shí)時(shí)響應(yīng)時(shí)間進(jìn)行判斷,將任務(wù)交由負(fù)載最輕的服務(wù)器來(lái)處理,以實(shí)現(xiàn)真正的智能通信管理和最佳的服務(wù)器群性能。負(fù)載均衡技術(shù)控制第四層到第七層的應(yīng)用/內(nèi)容,從而對(duì)不同類(lèi)型的客戶和應(yīng)用實(shí)現(xiàn)了優(yōu)先級(jí)劃分和差別服務(wù),使用第七層智能會(huì)話恢復(fù)技術(shù),同時(shí)可以檢測(cè)出HTTP 400,500和600系列的錯(cuò)誤。它透明地將交易重新定向到另一臺(tái)服務(wù)器,從而使系統(tǒng)能夠完成該交易。服務(wù)器故障切換和多重冗余特性可以讓通信繞過(guò)故障點(diǎn),從而使網(wǎng)站始終保持運(yùn)行和可訪問(wèn)性。關(guān)于實(shí)現(xiàn)負(fù)載均衡的方法,網(wǎng)上也有不少相關(guān)討論,以下做一些引用:
1、基于特定服務(wù)器軟件的負(fù)載均衡
很多網(wǎng)絡(luò)協(xié)議都支持“重定向”功能,例如在HTTP協(xié)議中支持Location指令,接收到這個(gè)指令的瀏覽器將自動(dòng)重定向到Location指明的另一個(gè)URL上。由于發(fā)送Location指令比起執(zhí)行服務(wù)請(qǐng)求,對(duì)Web服務(wù)器的負(fù)載要小的多,因此可以根據(jù)這個(gè)功能來(lái)設(shè)計(jì)一種負(fù)載均衡的服務(wù)器。
任何時(shí)候Web服務(wù)器認(rèn)為自己負(fù)載較大的時(shí)候,它就不再直接發(fā)送回瀏覽器請(qǐng)求的網(wǎng)頁(yè),而是送回一個(gè)Location指令,讓瀏覽器去服務(wù)器集群中的其他服務(wù)器上獲得所需要的網(wǎng)頁(yè)。在這種方式下,服務(wù)器本身必須支持這種功能,然而具體實(shí)現(xiàn)起來(lái)卻有很多困難,例如一臺(tái)服務(wù)器如何能保證它重定向過(guò)的服務(wù)器是比較空閑的,并且不會(huì)再次發(fā)送Location指令,Location指令和瀏覽器都沒(méi)有這方面的支持能力,這樣很容易在瀏覽器上形成一種死循環(huán)。
因此這種方式實(shí)際應(yīng)用當(dāng)中并不多見(jiàn),使用這種方式實(shí)現(xiàn)的服務(wù)器集群軟件也較少。有些特定情況下可以使用CGI(包括使用FastCGI或mod_perl擴(kuò)展來(lái)改善性能)來(lái)模擬這種方式去分擔(dān)負(fù)載,而Web服務(wù)器仍然保持簡(jiǎn)潔、高效的特性,此時(shí)避免Location循環(huán)的任務(wù)將由用戶的CGI程序來(lái)承擔(dān)。
2、基于DNS的負(fù)載均衡
由于基于服務(wù)器軟件的負(fù)載均衡需要改動(dòng)軟件,因此常常是得不償失,負(fù)載均衡最好是在服務(wù)器軟件之外來(lái)完成,這樣才能利用現(xiàn)有服務(wù)器軟件的種種優(yōu)勢(shì)。最早的負(fù)載均衡技術(shù)是通過(guò)DNS服務(wù)中的隨機(jī)名字解析來(lái)實(shí)現(xiàn)的,在DNS服務(wù)器中,可以為多個(gè)不同的地址配置同一個(gè)名字,而最終查詢這個(gè)名字的客戶機(jī)將在解析這個(gè)名字時(shí)得到其中的一個(gè)地址。因此,對(duì)于同一個(gè)名字,不同的客戶機(jī)會(huì)得到不同的地址,他們也就訪問(wèn)不同地址上的Web服務(wù)器,從而達(dá)到負(fù)載均衡的目的。