應(yīng)用服務(wù)器集群、可用性與無(wú)session的企業(yè)應(yīng)用(一)
本文目的
本文的主要目的是討論企業(yè)應(yīng)用實(shí)現(xiàn)高可用性的方案。即如何在保證性能的同時(shí),使得應(yīng)用保持 24 小時(shí)的可用性。 為實(shí)現(xiàn)此目的,災(zāi)難恢復(fù)和性能問題的解決是必不可少的。本文僅就程序和應(yīng)用服務(wù)器兩方面進(jìn)行討論,不討論數(shù)據(jù)庫(kù)等相關(guān)的問題。
1. ?? 災(zāi)難恢復(fù)
所謂災(zāi)難恢復(fù)(僅對(duì) Web 應(yīng)用而言),是指在某個(gè)應(yīng)用失去響應(yīng)能力后(比如重啟),客戶端能立即透明的切換到冗余應(yīng)用。這一切換對(duì)客戶端來(lái)講應(yīng)該是感覺不到的。從技術(shù)上來(lái)講,就是客戶端在與服務(wù)器端進(jìn)行交互的過(guò)程中,客戶端在服務(wù)器端保存的狀態(tài)能立即切換到新的服務(wù)器上。在 web 應(yīng)用中,這些狀態(tài)一般保存在 http session 里。所以所謂狀態(tài)復(fù)制,一般來(lái)講就是 http session 復(fù)制。
目前能提供災(zāi)難的方案之一是集群。對(duì)于 Weblogic ,集群的實(shí)現(xiàn)方式為 Paired servers replication :
(圖片引自
http://www.theserverside.com/articles/article.tss?l=J2EEClustering
)
在這種實(shí)現(xiàn)方式里, session 只在相鄰的或者指定的兩個(gè) server 之間進(jìn)行復(fù)制,當(dāng)某一個(gè) server down 掉后,需要 servers 前端的 load balancer 知道哪一臺(tái) server 是這個(gè) Server1 的 paired backup server ,并將原來(lái)指向 Server1 的請(qǐng)求轉(zhuǎn)發(fā)給這臺(tái) paired backup server 。應(yīng)該說(shuō)這種復(fù)制策略是相當(dāng)高效的,但是對(duì)集群前端的路由要求比較高。
2. ?? 性能
企業(yè)應(yīng)用一般會(huì)跑在多臺(tái)服務(wù)器上。就性能而言,我們的期望自然是:總體性能 = 單臺(tái)服務(wù)器性能 X 服務(wù)器臺(tái)數(shù)。不過(guò)從上邊的說(shuō)明就能看出,集群中的每一臺(tái) server 都會(huì)有一部分性能耗費(fèi)在 session 復(fù)制上。耗費(fèi)的性能取決于 session 的大小。如果應(yīng)用中 session 保留了大量的數(shù)據(jù),或者用戶數(shù)量很多,損耗的性能也將相當(dāng)可觀。
(有一種提升性能的方案是使用分布式的對(duì)象,例如 EJB ,根據(jù)對(duì)象耗費(fèi)性能的不同對(duì)其所在服務(wù)器進(jìn)行調(diào)整。不過(guò)這種方案早已充滿了極大的爭(zhēng)論。流行的觀點(diǎn)認(rèn)為,對(duì)于業(yè)務(wù)邏輯不是很復(fù)雜的應(yīng)用,使用分布式對(duì)象只會(huì)讓性能下降。因此下邊將不再討論。)
3. ?? 維護(hù)
從維護(hù)的角度上看,如果我們能不重啟應(yīng)用就能給應(yīng)用添加新的功能,或者修改已有的 bug ,那顯然相當(dāng) 8 錯(cuò)。
分析
根據(jù)上邊的說(shuō)明,我們可以初步得出幾個(gè)結(jié)論:
1、? 要使用Weblogic集群所帶來(lái)的災(zāi)難恢復(fù)的好處,就必須忍受同時(shí)帶來(lái)的性能損失。
2、? 在使用weblogic集群的同時(shí),我們必須擁有高性能的 Server 路由設(shè)備。
3、?
使用weblogic集群,在重新部署應(yīng)用時(shí),由于不能重新部署
(redeploy)
集群下單臺(tái)
server
的應(yīng)用,導(dǎo)致幾臺(tái)
server
需要同時(shí)停掉應(yīng)用。當(dāng)所有的
server
全都陷入災(zāi)難中,災(zāi)難恢復(fù)也就失去了意義。
那么,如何在實(shí)現(xiàn)災(zāi)難恢復(fù)和高性能的同時(shí),又能避免或者減少上邊列舉的損失呢?
初步的思路可以有:
1、? 如果我們能忍受某一臺(tái) server down 機(jī)后客戶狀態(tài)丟失的后果,那么最簡(jiǎn)單的方案就是停用集群,前端 load balancer 把相同 IP 的請(qǐng)求轉(zhuǎn)到相同的服務(wù)器。在重新部署應(yīng)用時(shí),分批重起不同 server 上的應(yīng)用。
2、? 全部采用無(wú) session 策略。將客戶狀態(tài)保留在客戶端。這樣沒有Weblogic集群也就無(wú)所謂了。我們只需要一個(gè)普通的(分發(fā)器+失敗檢測(cè))將請(qǐng)求均勻的分發(fā)到可用的服務(wù)器上。
?
posted on 2006-06-14 12:55 不知道叫啥好 閱讀(1843) 評(píng)論(12) 編輯 收藏