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