WEB服務(wù)器流量超負(fù)載:如何分散解決?
Web應(yīng)用服務(wù)器集群系統(tǒng),是由一群同時(shí)運(yùn)行同一個(gè)web應(yīng)用的服務(wù)器組成的集群系統(tǒng),在外界看來(lái),就像是一個(gè)服務(wù)器一樣。為了均衡集群服務(wù)器的負(fù)載,達(dá)到優(yōu)化系統(tǒng)性能的目的,集群服務(wù)器將眾多的訪問(wèn)請(qǐng)求,分散到系統(tǒng)中的不同節(jié)點(diǎn)進(jìn)行處理。從而實(shí)現(xiàn)了更高的有效性和穩(wěn)定性,而這也正是基于Web的企業(yè)應(yīng)用所必須具備的特性。
一、計(jì)算WEB服務(wù)器負(fù)載量的兩種方法 字串7
web應(yīng)用服務(wù)器集群系統(tǒng),是由一群同時(shí)運(yùn)行同一個(gè)web應(yīng)用的服務(wù)器組成的集群系統(tǒng),在外界看來(lái),就像是一個(gè)服務(wù)器一樣。為了均衡集群服務(wù)器的負(fù)載,達(dá)到優(yōu)化系統(tǒng)性能的目的,集群服務(wù)器將眾多的訪問(wèn)請(qǐng)求,分散到系統(tǒng)中的不同節(jié)點(diǎn)進(jìn)行處理。從而實(shí)現(xiàn)了更高的有效性和穩(wěn)定性,而這也正是基于Web的企業(yè)應(yīng)用所必須具備的特性。
高可靠性可以看作為系統(tǒng)的一種冗余設(shè)定。對(duì)于一個(gè)特定的請(qǐng)求,如果所申請(qǐng)的服務(wù)器不能進(jìn)行處理的話,那么其他的服務(wù)器能不能對(duì)之進(jìn)行有效的處理呢?對(duì)于一個(gè)高效的系統(tǒng),如果一個(gè)Web服務(wù)器失敗的話,其他的服務(wù)器可以馬上取代它的位置,對(duì)所申請(qǐng)的請(qǐng)求進(jìn)行處理,而且這一過(guò)程對(duì)用戶來(lái)說(shuō),要盡可能的透明,使用戶察覺(jué)不到!
穩(wěn)定性決定了應(yīng)用程序能否支持不斷增長(zhǎng)的用戶請(qǐng)求數(shù)量,它是應(yīng)用程序自身的一種能力。穩(wěn)定性是影響系統(tǒng)性能的眾多因素的一種有效的測(cè)量手段,包括機(jī)群系統(tǒng)所能支持的同時(shí)訪問(wèn)系統(tǒng)的最大用戶數(shù)目以及處理一個(gè)請(qǐng)求所需要的時(shí)間。
在現(xiàn)有眾多的均衡服務(wù)器負(fù)載的方法中,廣泛研究并使用的是以下兩個(gè)方法: 字串1
DNS負(fù)載平衡的方法RR-DNS(Round-Robin Domain Name System)
負(fù)載均衡器
以下,我們將就這兩種方法進(jìn)行討論。
二、DNS輪流排程的優(yōu)勢(shì)及缺點(diǎn) 字串4
域名服務(wù)器(Domain Name Server)中的數(shù)據(jù)文件將主機(jī)名字映射到其IP地址。當(dāng)你在瀏覽器中鍵入一個(gè)URL時(shí)(例如:www.loadbalancedsite.com),瀏覽器則將請(qǐng)求發(fā)送到DNS,要求其返回相應(yīng)站點(diǎn)的IP地址,這被稱為DNS查詢。當(dāng)瀏覽器獲得該站點(diǎn)的IP地址后,便通過(guò)該IP地址連接到所要訪問(wèn)的站點(diǎn),將頁(yè)面展現(xiàn)在用戶面前。
域名服務(wù)器(DNS)通常包含一個(gè)單一的IP地址與該IP地址所映射的站點(diǎn)的名稱的列表。在我們上面所假象的例子中,www.loadbalancedsite.com 這個(gè)站點(diǎn)的映射IP地址為203.24.23.3。
為了利用DNS均衡服務(wù)器的負(fù)載,對(duì)于同一個(gè)站點(diǎn)來(lái)講,在DNS服務(wù)器中同時(shí)擁有幾個(gè)不同的IP地址。這幾個(gè)IP地址代表集群中不同的機(jī)器,并在邏輯上映射到同一個(gè)站點(diǎn)名。通過(guò)我們的例子可以更好的理解這一點(diǎn),www.loadbalancedsite.com將通過(guò)下面的三個(gè)IP地址發(fā)布到一個(gè)集群中的三臺(tái)機(jī)器上: 字串1
203.34.23.3
203.34.23.4
203.34.23.5
在本例中,DNS服務(wù)器中包含下面的映射表:
www.loadbalancedsite.com 203.34.23.3
www.loadbalancedsite.com 203.34.23.4 字串2
www.loadbalancedsite.com 203.34.23.5 字串7
當(dāng)?shù)谝粋€(gè)請(qǐng)求到達(dá)DNS服務(wù)器時(shí),返回的是第一臺(tái)機(jī)器的IP地址203.34.23.3;當(dāng)?shù)诙€(gè)請(qǐng)求到達(dá)時(shí),返回的是第二臺(tái)機(jī)器的IP地址203.34.23.4,以此類推。當(dāng)?shù)谒膫€(gè)請(qǐng)求到達(dá)時(shí),第一臺(tái)機(jī)器的IP地址將被再次返回,循環(huán)調(diào)用。
利用上述的DNS Round Robin技術(shù),對(duì)于某一個(gè)站點(diǎn)的所有請(qǐng)求將被平均的分配到及群中的機(jī)器上。因此,在這種技術(shù)中,集群中的所有的節(jié)點(diǎn)對(duì)于網(wǎng)絡(luò)來(lái)說(shuō)都是可見(jiàn)的。 字串4
DNS 輪流排程的優(yōu)勢(shì)
DNS Round Robin的最大的優(yōu)點(diǎn)就是易于實(shí)現(xiàn)和代價(jià)低廉:
代價(jià)低,易于建立。 為了支持輪流排程,系統(tǒng)管理員只需要在DNS服務(wù)器上作一些改動(dòng),而且在許多比較新的版本的DNS服務(wù)器上已經(jīng)增加了這種功能。對(duì)于Web應(yīng)用來(lái)說(shuō),不需要對(duì)代碼作任何的修改;事實(shí)上,Web應(yīng)用本身并不會(huì)意識(shí)到負(fù)載均衡配置,即使在它面前。 #p#page_title#e#
簡(jiǎn)單. 不需要網(wǎng)絡(luò)專家來(lái)對(duì)之進(jìn)行設(shè)定,或在出現(xiàn)問(wèn)題時(shí)對(duì)之進(jìn)行維護(hù)。
DNS 輪流排程的缺點(diǎn)
這種基于軟件的負(fù)載均衡方法主要存在兩處不足,一是不實(shí)時(shí)支持服務(wù)期間的關(guān)聯(lián),一是不具有高可靠性。
不支持服務(wù)器間的一致性。服務(wù)器一致性是負(fù)載均衡系統(tǒng)所應(yīng)具備的一種能力,通過(guò)它,系統(tǒng)可以根據(jù)會(huì)話信息是屬于服務(wù)器端的,還是底層數(shù)據(jù)庫(kù)級(jí)別的,繼而將用戶的請(qǐng)求導(dǎo)向相應(yīng)的服務(wù)器。而DNS輪流排程則不具備這種智能化的特性。它是通過(guò)cookie、隱藏域、重寫(xiě)URL三種方法中的一種來(lái)進(jìn)行相似的判斷的。當(dāng)用戶通過(guò)上述基于文本標(biāo)志的方法與服務(wù)器建立連接之后,其所有的后續(xù)訪問(wèn)均是連接到同一個(gè)服務(wù)器上。問(wèn)題是,服務(wù)器的IP是被瀏覽器暫時(shí)存放在緩存中,一旦記錄過(guò)期,則需要重新建立連接,那么同一個(gè)用戶的請(qǐng)求很可能被不同的服務(wù)器進(jìn)行處理,則先前的所有會(huì)話信息便會(huì)丟失。
不支持高可靠性。設(shè)想一個(gè)具有N個(gè)節(jié)點(diǎn)的集群。如果其中的一個(gè)節(jié)點(diǎn)毀壞,那么所有的訪問(wèn)該節(jié)點(diǎn)的請(qǐng)求將不會(huì)有所回應(yīng),這是任何人都不愿意看到的。比較先進(jìn)的路由器可以通過(guò)每隔一定的時(shí)間間隔,對(duì)節(jié)點(diǎn)檢查,如果有毀壞的節(jié)點(diǎn),則將之從列表中去除的方法,解決這個(gè)問(wèn)題。但是,由于在Internet上,ISPs將眾多的DNS存放在緩存中,以節(jié)省訪問(wèn)時(shí)間,因此,DNS的更新就會(huì)變得非常緩慢,以至于有的用戶可能會(huì)訪問(wèn)一些已經(jīng)不存在的站點(diǎn),或者一些新的站點(diǎn)得不到訪問(wèn)。所以,盡管DNS輪流排程在一定程度上解決了負(fù)載均衡問(wèn)題,但這種狀況的改變并不是十分樂(lè)觀和有效的。
除了上面介紹的輪流排程方法外,還有三種DNS負(fù)載均衡處理分配方法,將這四種方法列出如下:
Round robin (RRS): 將工作平均的分配到服務(wù)器 (用于實(shí)際服務(wù)主機(jī)性能一致)
Least-connections (LCS): 向較少連接的服務(wù)器分配較多的工作(IPVS 表存儲(chǔ)了所有的活動(dòng)的連接。用于實(shí)際服務(wù)主機(jī)性能一致。) 字串3
Weighted round robin (WRRS): 向較大容量的服務(wù)器分配較多的工作??梢愿鶕?jù)負(fù)載信息動(dòng)態(tài)的向上或向下調(diào)整。 (用于實(shí)際服務(wù)主機(jī)性能不一致時(shí))
Weighted least-connections (WLC): 考慮它們的容量向較少連接的服務(wù)器分配較多的工作。容量通過(guò)用戶指定的砝碼來(lái)說(shuō)明,可以根據(jù)裝載信息動(dòng)態(tài)的向上或向下調(diào)整。(用于實(shí)際服務(wù)主機(jī)性能不一致時(shí))
三:傳統(tǒng)負(fù)載均衡器的優(yōu)勢(shì)及缺點(diǎn)
負(fù)載均衡器通過(guò)虛擬IP地址方法,解決了輪流排程所面臨的許多問(wèn)題。使用了負(fù)載均衡器集群系統(tǒng),在外部看來(lái),像是具有一個(gè)IP地址的單一服務(wù)器一樣,當(dāng)然,這個(gè)IP地址是虛擬的,它映射了集群中的每一臺(tái)機(jī)器的地址。所以,在某種程度上,負(fù)載均衡器是將整個(gè)集群的IP地址報(bào)漏給外部網(wǎng)絡(luò)。
當(dāng)請(qǐng)求到達(dá)負(fù)載均衡器時(shí),它會(huì)重寫(xiě)該請(qǐng)求的頭文件,并將之指定到集群中的機(jī)器上。如果某臺(tái)機(jī)器被從集群中移除了,請(qǐng)求不會(huì)別發(fā)往已經(jīng)不存在的服務(wù)器上,因?yàn)樗械臋C(jī)器表面上都具有同一個(gè)IP地址,即使集群中的某個(gè)節(jié)點(diǎn)被移除了,該地址也不會(huì)發(fā)生變化。而且,internet上緩存的DNS條目也不再是問(wèn)題了。當(dāng)返回一個(gè)應(yīng)答時(shí),客戶端看到的只是從負(fù)載均衡器上所返回的結(jié)果。也就是說(shuō),客戶端操作的對(duì)象是負(fù)載均衡器,對(duì)于其更后端的操作,對(duì)客戶端來(lái)講,是完全透明的。 字串6
傳統(tǒng)負(fù)載均衡器的優(yōu)點(diǎn)
服務(wù)器一致性. 負(fù)載均衡器讀取客戶端發(fā)出的每一個(gè)請(qǐng)求中所包含的cookies或url解釋?;谒x出的這些信息,負(fù)載均衡器就可以重寫(xiě)報(bào)頭并將請(qǐng)求發(fā)往集群中合適的節(jié)點(diǎn)上,該節(jié)點(diǎn)維護(hù)著相應(yīng)客戶端請(qǐng)求的會(huì)話信息。在HTTP通信中,負(fù)載均衡器可以提供服務(wù)器一致性,但并不是通過(guò)一個(gè)安全的途徑(例如:HTTPS)來(lái)提供這種服務(wù)。當(dāng)消息被加密后(SSL),負(fù)載均衡器就不能讀出隱藏在其中的會(huì)話信息。
通過(guò)故障恢復(fù)機(jī)制獲得高可靠性 #p#page_title#e#. 故障恢復(fù)發(fā)生在當(dāng)集群中某個(gè)節(jié)點(diǎn)不能處理請(qǐng)求,需將請(qǐng)求重新導(dǎo)向到其他節(jié)點(diǎn)時(shí)。主要有兩種故障恢復(fù):
請(qǐng)求級(jí)故障恢復(fù)。當(dāng)集群中的一個(gè)節(jié)點(diǎn)不能處理請(qǐng)求時(shí)(通常是由于down機(jī)),請(qǐng)求被發(fā)送到其他節(jié)點(diǎn)。當(dāng)然,在導(dǎo)向到其他節(jié)點(diǎn)的同時(shí),保存在原節(jié)點(diǎn)上的會(huì)話信息將會(huì)丟失。
透明會(huì)話故障恢復(fù)。當(dāng)一個(gè)引用失敗后,負(fù)載均衡器會(huì)將之發(fā)送到集群中其他的節(jié)點(diǎn)上,以完成操作,這一點(diǎn)對(duì)用戶來(lái)說(shuō)是透明的。由于透明會(huì)話故障恢復(fù)需要節(jié)點(diǎn)具備相應(yīng)的操作信息,因此為了實(shí)現(xiàn)該功能,集群中的所有節(jié)點(diǎn)必須具有公共存儲(chǔ)區(qū)域或通用數(shù)據(jù)庫(kù),存儲(chǔ)會(huì)話信息數(shù)據(jù),以提供每個(gè)節(jié)點(diǎn)在進(jìn)行單獨(dú)進(jìn)程會(huì)話故障恢復(fù)時(shí)所需要的操作信息。
統(tǒng)計(jì)計(jì)量。既然所有的Web應(yīng)用請(qǐng)求都必須經(jīng)過(guò)負(fù)載均衡系統(tǒng),那么系統(tǒng)就可以確定活動(dòng)會(huì)話的數(shù)量,在任何實(shí)例訪問(wèn)中的活動(dòng)會(huì)話的數(shù)目,應(yīng)答的次數(shù),高峰負(fù)載次數(shù),以及在高峰期和低谷期的會(huì)話的數(shù)目,還有其他更多的。所有的這些統(tǒng)計(jì)信息都可以被很好的用來(lái)調(diào)整整個(gè)系統(tǒng)的性能。 字串3
傳統(tǒng)負(fù)載均衡器的缺點(diǎn)
硬件路由的缺點(diǎn)在于費(fèi)用、復(fù)雜性以及單點(diǎn)失敗的。由于所有的請(qǐng)求均是通過(guò)一個(gè)單一的硬件負(fù)載均衡器來(lái)傳遞,因此,負(fù)載均衡器上的任何故障都將導(dǎo)致整個(gè)站點(diǎn)的崩潰。
HTTPS請(qǐng)求的負(fù)載均衡
正如上面所提到的,很難在那些來(lái)自HTTPS的請(qǐng)求上進(jìn)行負(fù)載均衡和會(huì)話信息維護(hù)處理。因?yàn)椋@些請(qǐng)求中的信息已經(jīng)被加密了。負(fù)載均衡器沒(méi)有能力處理這類請(qǐng)求。不過(guò),這里有兩種方法可以解決這一問(wèn)題:
代理網(wǎng)絡(luò)服務(wù)器
硬件SSL解碼器
代理服務(wù)器位于服務(wù)器集群之前,首先由它接受所有的請(qǐng)求并對(duì)之進(jìn)行解密,然后將這些處理后的請(qǐng)求根據(jù)頭信息重新發(fā)往相應(yīng)的節(jié)點(diǎn)上,這種方式不需要硬件上的支持,但會(huì)增加代理服務(wù)器的額外的負(fù)擔(dān)。
硬件SSL解碼器,則是在請(qǐng)求到達(dá)負(fù)載均衡器之前,先經(jīng)由它進(jìn)行解密處理。這種方式比代理服務(wù)器的處理速度要快捷一些。但代價(jià)也高,而且實(shí)現(xiàn)比較復(fù)雜