負(fù)載均衡技術(shù)建設(shè)高負(fù)載的網(wǎng)絡(luò)站點 |
發(fā)布時間: 2012/8/11 11:15:20 |
Internet的快速增長使多媒體網(wǎng)絡(luò)服務(wù)器,特別是Web服務(wù)器,面對的訪問者數(shù)量快速增加,網(wǎng)絡(luò)服務(wù)器需要具備提供大量并發(fā)訪問服務(wù)的能力。例如Yahoo每天會收到數(shù)百萬次的訪問請求,因此對于提供大負(fù)載Web服務(wù)的服務(wù)器來講,CPU、I/O處理能力很快會成為瓶頸。 簡單的提高硬件性能并不能真正解決這個問題,因為單臺服務(wù)器的性能總是有限的,一般來講,一臺PC服務(wù)器所能提供的并發(fā)訪問處理能力大約為1000個,更為高檔的專用服務(wù)器能夠支持3000-5000個并發(fā)訪問,這樣的能力還是無法滿足負(fù)載較大的網(wǎng)站的要求。尤其是網(wǎng)絡(luò)請求具有突發(fā)性,當(dāng)某些重大事件發(fā)生時,網(wǎng)絡(luò)訪問就會急劇上升,從而造成網(wǎng)絡(luò)瓶頸,例如在網(wǎng)上發(fā)布的克林頓彈劾書就是很明顯的例子。必須采用多臺服務(wù)器提供網(wǎng)絡(luò)服務(wù),并將網(wǎng)絡(luò)請求分配給這些服務(wù)器分擔(dān),才能提供處理大量并發(fā)服務(wù)的能力。 當(dāng)使用多臺服務(wù)器來分擔(dān)負(fù)載的時候,最簡單的辦法是將不同的服務(wù)器用在不同的方面。按提供的內(nèi)容進(jìn)行分割時,可以將一臺服務(wù)器用于提供新聞頁面,而另一臺用于提供游戲頁面;或者可以按服務(wù)器的功能進(jìn)行分割,將一臺服務(wù)器用于提供靜態(tài)頁面訪問,而另一些用于提供CGI等需要大量消耗資源的動態(tài)頁面訪問。然而由于網(wǎng)絡(luò)訪問的突發(fā)性,使得很難確定那些頁面造成的負(fù)載太大,如果將服務(wù)的頁面分割的過細(xì)就會造成很大浪費(fèi)。事實上造成負(fù)載過大的頁面常常是在變化中的,如果要經(jīng)常按照負(fù)載變化來調(diào)整頁面所在的服務(wù)器,那么勢必對管理和維護(hù)造成極大的問題。因此這種分割方法只能是大方向的調(diào)整,對于大負(fù)載的網(wǎng)站,根本的解決辦法還需要應(yīng)用負(fù)載均衡技術(shù)。 負(fù)載均衡的思路下多臺服務(wù)器為對稱方式,每臺服務(wù)器都具備等價的地位,都可以單獨(dú)對外提供服務(wù)而無須其他服務(wù)器的輔助。然后通過某種負(fù)載分擔(dān)技術(shù),將外部發(fā)送來的請求均勻分配到對稱結(jié)構(gòu)中的某一臺服務(wù)器上,而接收到請求的服務(wù)器都獨(dú)立回應(yīng)客戶機(jī)的請求。由于建立內(nèi)容完全一致的Web服務(wù)器并不復(fù)雜,可以使用服務(wù)器同步更新或者共享存儲空間等方法來完成,因此負(fù)載均衡技術(shù)就成為建立一個高負(fù)載Web站點的關(guān)鍵性技術(shù)。 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)頁,而是送回一個Locaction指令,讓瀏覽器去服務(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ù)載均衡(多機(jī)單域名負(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ù)載均衡的目的。 例如如果希望使用三個Web服務(wù)器來回應(yīng)對www.exampleorg.org.cn的HTTP請求,就可以設(shè)置該域的DNS服務(wù)器中關(guān)于該域的數(shù)據(jù)包括有與下面例子類似的結(jié)果: www1INA192.168.1.1 www2INA192.168.1.2 www3INA192.168.1.3 wwwINCNAMEwww1 wwwINCNAMEwww2 wwwINCNAMEwww3 此后外部的客戶機(jī)就可能隨機(jī)的得到對應(yīng)www的不同地址,那么隨后的HTTP請求也就發(fā)送給不同地址了。 DNS負(fù)載均衡的優(yōu)點是簡單、易行,并且服務(wù)器可以位于互聯(lián)網(wǎng)的任意位置上,當(dāng)前使用在包括Yahoo在內(nèi)的Web站點上。然而它也存在不少缺點,一個缺點是為了保證DNS數(shù)據(jù)及時更新,一般都要將DNS的刷新時間設(shè)置的較小,但太小就會造成太大的額外網(wǎng)絡(luò)流量,并且更改了DNS數(shù)據(jù)之后也不能立即生效;第二點是DNS負(fù)載均衡無法得知服務(wù)器之間的差異,它不能做到為性能較好的服務(wù)器多分配請求,也不能了解到服務(wù)器的當(dāng)前狀態(tài),甚至?xí)霈F(xiàn)客戶請求集中在某一臺服務(wù)器上的偶然情況。 3.反向代理負(fù)載均衡(緩沖池) 使用代理服務(wù)器可以將請求轉(zhuǎn)發(fā)給內(nèi)部的Web服務(wù)器,使用這種加速模式顯然可以提升靜態(tài)網(wǎng)頁的訪問速度。因此也可以考慮使用這種技術(shù),讓代理服務(wù)器將請求均勻轉(zhuǎn)發(fā)給多臺內(nèi)部Web服務(wù)器之一上,從而達(dá)到負(fù)載均衡的目的。這種代理方式與普通的代理方式有所不同,標(biāo)準(zhǔn)代理方式是客戶使用代理訪問多個外部Web服務(wù)器,而這種代理方式是多個客戶使用它訪問內(nèi)部Web服務(wù)器,因此也被稱為反向代理模式。 實現(xiàn)這個反向代理能力并不能算是一個特別復(fù)雜的任務(wù),但是在負(fù)載均衡中要求特別高的效率,這樣實現(xiàn)起來就不是十分簡單的了。每針對一次代理,代理服務(wù)器就必須打開兩個連接,一個為對外的連接,一個為對內(nèi)的連接,因此對于連接請求數(shù)量非常大的時候,代理服務(wù)器的負(fù)載也就非常之大了,在最后反向代理服務(wù)器會成為服務(wù)的瓶頸。例如,使用Apache的mod_rproxy模塊來實現(xiàn)負(fù)載均衡功能時,提供的并發(fā)連接數(shù)量受Apache本身的并發(fā)連接數(shù)量的限制。一般來講,可以使用它來對連接數(shù)量不是特別大,但每次連接都需要消耗大量處理資源的站點進(jìn)行負(fù)載均衡,例如搜尋。 使用反向代理的好處是,可以將負(fù)載均衡和代理服務(wù)器的高速緩存技術(shù)結(jié)合在一起,提供有益的性能,具備額外的安全性,外部客戶不能直接訪問真實的服務(wù)器。并且實現(xiàn)起來可以實現(xiàn)較好的負(fù)載均衡策略,將負(fù)載可以非常均衡的分給內(nèi)部服務(wù)器,不會出現(xiàn)負(fù)載集中到某個服務(wù)器的偶然現(xiàn)象。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |