<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的CRC卡片盒

    zhangwen's blog

    應用服務器集群、可用性與無session的企業應用(一)

    本文目的

    本文的主要目的是討論企業應用實現高可用性的方案。即如何在保證性能的同時,使得應用保持 24 小時的可用性。 為實現此目的,災難恢復和性能問題的解決是必不可少的。本文僅就程序和應用服務器兩方面進行討論,不討論數據庫等相關的問題。

    1. ?? 災難恢復

    所謂災難恢復(僅對 Web 應用而言),是指在某個應用失去響應能力后(比如重啟),客戶端能立即透明的切換到冗余應用。這一切換對客戶端來講應該是感覺不到的。從技術上來講,就是客戶端在與服務器端進行交互的過程中,客戶端在服務器端保存的狀態能立即切換到新的服務器上。在 web 應用中,這些狀態一般保存在 http session 里。所以所謂狀態復制,一般來講就是 http session 復制。

    目前能提供災難的方案之一是集群。對于 Weblogic ,集群的實現方式為 Paired servers replication


    cluster.JPG
    (圖片引自
    http://www.theserverside.com/articles/article.tss?l=J2EEClustering

    在這種實現方式里, session 只在相鄰的或者指定的兩個 server 之間進行復制,當某一個 server down 掉后,需要 servers 前端的 load balancer 知道哪一臺 server 是這個 Server1 paired backup server ,并將原來指向 Server1 的請求轉發給這臺 paired backup server 。應該說這種復制策略是相當高效的,但是對集群前端的路由要求比較高。

    2. ?? 性能

    企業應用一般會跑在多臺服務器上。就性能而言,我們的期望自然是:總體性能 = 單臺服務器性能 X 服務器臺數。不過從上邊的說明就能看出,集群中的每一臺 server 都會有一部分性能耗費在 session 復制上。耗費的性能取決于 session 的大小。如果應用中 session 保留了大量的數據,或者用戶數量很多,損耗的性能也將相當可觀。

    (有一種提升性能的方案是使用分布式的對象,例如 EJB ,根據對象耗費性能的不同對其所在服務器進行調整。不過這種方案早已充滿了極大的爭論。流行的觀點認為,對于業務邏輯不是很復雜的應用,使用分布式對象只會讓性能下降。因此下邊將不再討論。)

    3. ?? 維護

    從維護的角度上看,如果我們能不重啟應用就能給應用添加新的功能,或者修改已有的 bug ,那顯然相當 8 錯。

    分析

    根據上邊的說明,我們可以初步得出幾個結論:

    1、? 要使用Weblogic集群所帶來的災難恢復的好處,就必須忍受同時帶來的性能損失。

    2、? 在使用weblogic集群的同時,我們必須擁有高性能的 Server 路由設備。

    3、? 使用weblogic集群,在重新部署應用時,由于不能重新部署 (redeploy) 集群下單臺 server 的應用,導致幾臺 server 需要同時停掉應用。當所有的 server 全都陷入災難中,災難恢復也就失去了意義。

    ?

    那么,如何在實現災難恢復和高性能的同時,又能避免或者減少上邊列舉的損失呢?

    初步的思路可以有:

    ?

    1、? 如果我們能忍受某一臺 server down 機后客戶狀態丟失的后果,那么最簡單的方案就是停用集群,前端 load balancer 把相同 IP 的請求轉到相同的服務器。在重新部署應用時,分批重起不同 server 上的應用。

    2、? 全部采用無 session 策略。將客戶狀態保留在客戶端。這樣沒有Weblogic集群也就無所謂了。我們只需要一個普通的(分發器+失敗檢測)將請求均勻的分發到可用的服務器上。

    ?

    posted on 2006-06-14 12:55 不知道叫啥好 閱讀(1842) 評論(12)  編輯  收藏

    評論

    # re: 提高企業應用可用性的分析(一) 2006-06-14 13:50 charon

    災難回復可能有更復雜的含義。
    在災難恢復里面,應用服務器級別的容錯回復是最簡單的(在集群服務的情形下,崩掉一兩臺不是什么大事情),稍微復雜一點的是數據庫服務器級別的,再復雜一點,就是異地冗載了。
    如果要作數據庫級別的災難回復,可能必須要用到統一的中央存儲設備,如獨立的磁盤陣列之類的,而且必須實現同一陣列區域在不同服務器系統之間的切換(這個簡單一點)或者共享(沒試過)。HA的配置比應用服務器的集群配置要復雜很多,而且對系統的影響是深遠的。  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 13:54 不知道叫啥好

    @charon
    你說得對,不過這里只打算對應用和應用服務器的情況做討論。這片東東只寫了一晚上,遣詞造句也沒有深究就拿出來了,難免有些差錯。  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 14:11 狂人

    援引"Under the Hood of J2EE Clustering"的一句話:Failover can avoid errors completely. -- Negative.具體意思是:Remind that when I defined “failover”, I defined a condition for when the failover will happen: “between the method calls”. It means if you have two successive methods to a remote object, the failover will only happen after the first method call is finished successfully and before the second method request is sent out.
    So, what will happen if the remote server fails when the methods are in the middle of processing in the server? The answer is: the process will stop and the client will see error messages in most cases, unless the methods are idempotent (defined in the “basic terminology” section).Only if the methods are idempotent, some load balancers are smart enough to retry these methods and failover them to other instances.
    我很贊同他的觀點.
    另外,根據我的項目經歷,往往集群Appserver并不是真正瓶頸所在,真正瓶頸是在DBServer.  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 14:27 不知道叫啥好

    @狂人
    呵呵,這片文章本來是針對我們的項目寫的,大體改了改就拿出來了。我們項目的特點就是可用性要求高,但是數據庫操作卻很少。因此先假設數據庫這里不存在性能問題。實際上引起數據庫的原因很大程度是由蹩腳的sql,以及海量的數據,但就不在討論范圍之列了。

    關于冪等性等問題,會在本文的后續中提到~

      回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 14:54 langds

    如果撇開DB性能以及"冪等性"問題,那你的集群其實要考慮的東西就要會少了一大半.
    依我的經驗來看,最實用的做法就是直接在Appserver前加web server,該webServer起loadbanance和Httpserver的作用.他能自動將不同的客戶端分發請求到相應的Appserver上執行,并且服務器間無需同步session狀態,webserver能自動定位到該客戶端最近一次請求的響應AppServer,
    再者,對于你提供的同步部署問題,我認為,只要不新增EJB之類的組件就無需重新部署應用,直接替換相應的CLASS或JAR包即可.
    如果一定要重新部署,就拿WAS來說吧,它的所有集群成員都由ND?。觘rver管理,然么你只需要部署到ND后,由ND自動同步一把即可.
    事實上,在真正需要集群的高并發應用生產環境中是不可能常常重新部署整個應用的.而且對熱替換的需求也并不會很明顯,因為在這樣的環境里,要的就是穩定和速度.  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 15:06 不知道叫啥好

    @langds
    “依我的經驗來看,最實用的做法就是直接在Appserver前加web server,該webServer起loadbanance和Httpserver的作用.他能自動將不同的客戶端分發請求到相應的Appserver上執行,并且服務器間無需同步session狀態,webserver能自動定位到該客戶端最近一次請求的響應AppServer, ”

    這也我提的方案之一亞。~不過不同步session,如何失敗恢復?另外web server 能自動定位到該客戶端最近一次請求的響應AppServer? langds能否具體說以下?我只試過使用apache的mod_proxy,用robbin隨機分發。目前我們是使用硬件(四層交換機)做到的這一點。  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 15:08 不知道叫啥好

    @langds

    另外weblogic在生產模式下不支持class的熱部署~
    我們也很希望它能像websphere那樣熱部署亞~  回復  更多評論   

    # re: 提高企業應用可用性的分析(一) 2006-06-14 15:52 langds

    為什么一定要失敗恢復?如果真的是業務處理發生故障能做到真正恢復的可能性太小太?。谖业牡谝黄貜椭幸呀浺昧?quot;wangyu"所說的話來說明問題.

    另外:為什么要class熱部署?我們WAS在生產環境里都是將改功能禁止了的,還是那句話,要的是穩定,安全和速度.  回復  更多評論   

    # re: 應用服務器集群、可用性與無session的企業應用(一) 2006-06-14 16:02 不知道叫啥好

    @langds
    至少我要做到,從這個server跳到那個server,本來登陸的狀態不能變成注銷吧

    另外能否具體說下web server 如何自動定位到該客戶端最近一次請求的響應AppServer? 多謝!  回復  更多評論   

    # re: 應用服務器集群、可用性與無session的企業應用(一) 2006-06-14 16:24 langds

    我對weblogic不是很熟悉,就說我用的was吧,WAS自學的IBMHttpServer 可以根據客戶端的標識定位到最近一次請求響應的APPSERVER.,所以如果是在WAS環境里,你所考慮的SESSION問題有些多余.
    另外,WEBLOGIC好像也有自己的集群代理SERVER,不知道你自己有沒有親自實驗過,所有的HTTPSERVER集群控制器都擁有請求重定位功能.  回復  更多評論   

    # re: 應用服務器集群、可用性與無session的企業應用(一) 2006-06-14 16:33 不知道叫啥好

    @langds
    weblogic的集群代理server就是一個servlet,也能實現這個功能,但是性能太差,達不到生產級的要求~所以bea給人作方案時,都是推薦用F5來分發~

    想起來IBMHttpServer了……,跟was結合的很好,又是apache的底子,越發羨慕was了~  回復  更多評論   

    # re: 應用服務器集群、可用性與無session的企業應用(一) 2006-06-14 17:49 寒晴天

    開始行動  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案(3)

    文章分類

    Programmer

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线看片韩国免费人成视频| 国内精品免费在线观看| 成人免费毛片观看| 国产成人精品日本亚洲网址| 在线视频免费观看高清| 亚洲人成网网址在线看| 国产va精品免费观看| 67194在线午夜亚洲| 卡1卡2卡3卡4卡5免费视频| 国产精品无码亚洲一区二区三区| 超pen个人视频国产免费观看| 亚洲国产成人精品无码区二本| 日韩在线a视频免费播放| 农村寡妇一级毛片免费看视频| 亚洲国产精品毛片av不卡在线 | 亚洲一区中文字幕在线观看| 日韩欧毛片免费视频| 亚洲国产欧美国产综合一区 | 96免费精品视频在线观看| 亚洲午夜精品在线| 国产精品无码一区二区三区免费 | 亚洲六月丁香六月婷婷蜜芽| 日韩精品成人无码专区免费| 亚洲avav天堂av在线网毛片| 亚洲国产av无码精品| 国产精成人品日日拍夜夜免费| 亚洲国产福利精品一区二区| 热99re久久免费视精品频软件| 成年网在线观看免费观看网址| 亚洲精品亚洲人成在线观看| 亚洲三级高清免费| 特级毛片全部免费播放a一级| 亚洲国产成人一区二区精品区| 69天堂人成无码麻豆免费视频| 日韩色日韩视频亚洲网站| 人人狠狠综合久久亚洲婷婷| 成人男女网18免费视频| CAOPORN国产精品免费视频| 亚洲人成人77777网站不卡| 亚洲欧洲日产国码一级毛片| 30岁的女人韩剧免费观看|