亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2EE應用程序的Web層狀態復制

2019-11-18 14:06:03
字體:
來源:轉載
供稿:網友

  大多數具有一定重要性的 Web 應用程序都要求維護某種會話狀態,如用戶購物車的內容。如何在群集服務器應用程序中治理和復制狀態對應用程序的可伸縮性有顯著影響。許多 J2SE 和 J2EE 應用程序將狀態存儲在由 Servlet API 提供的 Httpsession 中。本文作者分析了狀態復制的一些選項以及如何最有效地使用 HttpSession 以提供好的伸縮性和性能。

  不管正在構建的是 J2EE 還是 J2SE 服務器應用程序,都有可能以某種方式使用 java Servlet —— 可能是直接地通過像 jsp 技術、Velocity 或者 WebMacro 這樣的表示層,也可能通過一個基于 servlet 的 Web 服務實現,如 Axis 或者 Glue。Servlet API 提供的一個最重要的功能是會話治理 —— 通過 HttpSession 接口進行用戶狀態的認證、失效和維護。

  會話狀態

  幾乎每一個 Web 應用程序都有一些會話狀態,這些狀態有可能像記住您是否已登錄這么簡單,也可能是您的會話的更具體的歷史,如購物車的內容、以前查詢結果的緩存或者 20 頁動態問卷表的完整響應歷史。因為 HTTP 協議本身是無狀態的,所以需要將會話狀態存儲在某處并與瀏覽會話以某種方式相關聯,使得下次請求同一 Web 應用程序的頁面時可以輕易地獲取。幸運的是,J2EE 提供了幾種治理會話狀態的方法 —— 狀態可以存儲在數據層,用 Servlet API 的 HttpSession 接口存儲在 Web 層,用有狀態會話 bean 存儲在 EnterPRise JavaBeans(EJB)層,甚至用 cookie 或者隱藏表單字段將狀態存儲在客戶層。不幸的是,會話狀態治理不當會帶來嚴重的性能問題。

  假如應用程序能夠在 HttpSession 中存儲用戶狀態,這種方法通常比其他方法更好。在客戶端用 HTTP cookie 或者隱藏表單字段存儲會話狀態有很大的安全風險 —— 它將應用程序的一部分內部內容暴露給了非受信任的客戶層。(一個早期的電子商務網站將購物車內容(包括價格)存儲在隱藏表單字段中,從而可以很輕易被非法利用,讓任何了解 Html 和 HTTP 的用戶可以以 0.01 美元購買任何商品。噢)此外,使用 cookie 或者隱藏表單字段很混亂,輕易出錯,并且脆弱(假如用戶禁止在瀏覽器中使用 cookie,那么基于 cookie 的方法就完全不能工作)。

  在 J2EE 應用程序中存儲服務器端狀態的其他方法是使用有狀態會話 bean,或者在數據庫中存儲會話狀態。雖然有狀態會話 bean 在會話狀態治理方面有更大的靈活性,但是在可能的情況下,將會話狀態存儲在 Web 層仍然有好處。假如業務對象是無狀態的,那么通常可以僅僅添加更多 Web 服務器來擴展應用程序,而不用添加更多 Web 服務器和更多 EJB 容器, 這樣的成本一般要低一些并且輕易完成。使用 HttpSession 存儲會話狀態的另一個好處是 Servlet API 提供了一種會話失效時通知的輕易方法。在數據庫中存儲會話狀態的成本可能難以承受。

  servlet 規范沒有要求 servlet 容器進行某種類型的會話復制或者持久性,但是它建議將狀態復制作為 servlet 首要 存在理由(raison d'etre) 的重要部分,并且它對作為進行會話復制的容器提出了一些要求。會話復制可以提供大量好處 —— 負載平衡、伸縮性、容錯和高可用性。相應地,大多數 servlet 容器支持某種形式的 HttpSession 復制,但是復制的機制、配置和時間是由實現決定的。 HttpSession API

  簡單地說,HttpSession 接口支持幾種方法,servlet、JSP 頁或者其他表示層組件可以用這些方法來跨多個 HTTP 請求維護會話信息。會話綁定到特定的用戶,但是在 Web 應用程序的所有 servlet 中共享 —— 不特定于某一個 servlet。一種考慮會話的有用方法是,會話像一個在會話期間存儲對象的 Map —— 可以用 setAttribute 按名字存儲會話屬性,并用 getAttribute 提取它們。HttpSession 接口還包含會話生存周期方法,如 invalidate() (它通知容器應丟棄會話)。清單 1 顯示 HttpSession 接口最常用的元素:

  清單 1. HttpSession API

public interface HttpSession {
 Object getAttribute(String s);
 Enumeration getAttributeNames();
 void setAttribute(String s, Object o);
 void removeAttribute(String s);

 boolean isNew();
 void invalidate();
 void setMaxInactiveInterval(int i);
 int getMaxInactiveInterval();
 ...
}
  理論上,可以跨群集一致性地完全復制會話狀態,這樣群集中的所有節點都可以服務任何請求,一個簡單的負載平衡器可以以輪詢方式傳送請求,避開有故障的主機。不過,這種緊密的復制有很高的性能成本,并且難于實現,當群集接近某一規模時,還會有伸縮性的問題。

  一種更常用的方式是將負載平衡與會話相似性(affinity) 結合起來 —— 負載平衡器可以將會話與連接相關聯,并將會話中以后的請求發送給同一服務器。有很多硬件和軟件負載平衡器支持這個功能,并且這意味著只有主連接主機和會話需要故障轉移到另一臺服務器時才訪問復制的會話信息。

  復制方式

  復制提供了一些可能的好處,包括可用性、容錯和伸縮性。此外,有大量會話復制的方法可用:方法的選擇取決于應用程序群集的規模、復制的目標和 servlet 容器支持的復制設施。復制有性能成本,包括 CPU 周期(存儲在會話中的序列化對象)、網絡帶寬(廣播更新),以及基于磁盤的方案中寫入到磁盤或者數據庫的成本。

  幾乎所有 servlet 容器都通過存儲在 HttpSession 中的序列化對象進行 HttpSession 復制,所以假如是創建一個分布式應用程序,應當確保只將可序列化對象放到會話中。(一些容器對像 EJB 引用、事務上下文、還有其他非可序列化的 J2EE 對象類型有非凡的處理。)

  基于 JDBC 的復制

  一種會話復制的方法是序列化會話內容并將它寫入數據庫。這種方法相當直觀,其優點是不僅會話可以故障轉移到其他主機,而且即使整個群集失效,會話數據也可以保存下來?;跀祿斓膹椭频娜秉c是性能成本 —— 數據庫事務是昂貴的。雖然它可以在 Web 層很好地伸縮,但是它可能在數據層產生伸縮問題 —— 假如群集增長大到一定程度,擴展數據層以容納會話數據會很困難或者成本無法接受。

  基于文件的復制

  基于文件的復制類似于使用數據庫存儲序列化的會話,只不過是使用共享文件服務器而不是數據庫來存儲會話數據。這種方式的成本一般比使用數據庫的成本(硬件成本、軟件許可證和計算開銷)低,其代價則是可靠性(數據庫可提供比文件系統更強的持久化保證)。

  基于內存的復制

  另一種復制方式是與群集中的一個或者多個其他服務器共享序列化的會話數據副本。復制所有會話到所有主機中提供了最大的可用性,并且負載平衡最輕易,但是因為復制消息所消耗的每個節點的內存和網絡帶寬,最終會限制群集的規模。一些應用服務器支持與“伙伴(buddy)”節點的基于內存的復制,其中每一個會話存在于主服務器上和一臺(或更多)備份服務器上。這種方案比將所有會話復制到所有服務器的伸縮性更好,但是當需要將會話故障轉移到另一臺服務器上時會使負載平衡任務復雜化,因為它必須找出另外哪一臺(幾臺)服務器有這個會話。

  時間考慮

  除了決定如何存儲復制會話數據,還有什么時候復制數據的問題。最可靠但也最昂貴的方法是每次數據改變時復制它(如每次 servlet 調用結束)。不那么昂貴、但是在故障時會有丟失一些數據的風險的方法是在每超過 N 秒時復制數據。

  與時間問題有關的問題是,是復制整個會話還是只試嘗復制會話中改變了的屬性(它包含的數據會少得多)。這些都需要在可靠性和性能之間進行取舍。Servlet 開發人員應當熟悉到在故障轉移時,會話狀態可能變得“過時”(是幾次請求前的復制),并應當預備處理不是最新的會話內容。(例如,假如一個interview 的第 3 步產生一個會話屬性,而用戶在第 4 步時,請求被故障轉移到一個具有兩次請求之前的會話狀態復制的系統上,那么第 4 步的 servlet 代碼應預備在會話中找不到這個屬性,并采取相應的行動 —— 如重定向,而不是認定它會在那里、并在找不到它時拋出一個 NullPointerException。)

  容器支持

  Servlet 容器的 HttpSession 復制選項以及如何配置這些選項是各不相同的。IBM WebSphere? 提供的復制選項是最多的,它提供了在內存中復制或者基于數據庫的復制、在 servlet 末尾或者基于時間的復制時間、傳播全部會話快照(JBoss 3.2 或以后版本)或者只傳播改變了的屬性等選擇?;趦却娴膹椭苹?JMS 發布-訂閱,它可以復制到所有克隆、一個“伙伴”復制品或者一個專門的復制服務器。

  WebLogic 還提供了一組選擇,包括內存中(使用一個伙伴復制品)、基于文件的或者基于數據庫的。JBoss 與 Tomcat 或者 Jetty servlet 容器一同使用時,進行基于內存的復制,可以選擇 servlet 末尾或者基于時間的復制時間,而快照選項(在 JBoss 3.2 或以后版本)是只復制改變了的屬性。Tomcat 5.0 為所有群集節點提供了基于內存的復制。此外,通過像 WADI 這樣的項目,可以用 servlet 過濾機制將會話復制添加到像 Tomcat 或者 Jetty 這樣的 servlet 容器中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美老女人性视频| 国产主播欧美精品| 国产精品视频久久| xxxx欧美18另类的高清| 亚洲老板91色精品久久| 日韩亚洲国产中文字幕| 久久艹在线视频| 奇米成人av国产一区二区三区| 精品国产区一区二区三区在线观看| 欧美国产日韩在线| 91av在线视频观看| 久久久久国产视频| 在线亚洲欧美视频| 亚洲91精品在线观看| 国产亚洲精品日韩| 国产精品91在线观看| 亚洲一区国产精品| 日韩av影院在线观看| 日本久久精品视频| 欧美性一区二区三区| 欧美另类极品videosbestfree| 日韩精品在线免费| 97精品国产91久久久久久| 国产成人综合久久| 久久国产一区二区三区| 欧美性猛交xxxx乱大交极品| 在线视频中文亚洲| 亚洲国产精品字幕| 午夜欧美大片免费观看| 91国产视频在线播放| 国产手机视频精品| 久久精品成人一区二区三区| 美女av一区二区三区| 4p变态网欧美系列| 亚洲国产小视频在线观看| 亚洲欧洲成视频免费观看| 欧美性猛交xxxx富婆弯腰| 性欧美激情精品| 性色av香蕉一区二区| 日韩免费在线视频| 午夜剧场成人观在线视频免费观看| 亚洲电影第1页| 日韩在线激情视频| 国产精品久久久久久久久粉嫩av| 亚洲精品www| 亚洲精品成人久久久| 日韩经典中文字幕在线观看| 91精品在线国产| 日韩精品在线电影| 亚洲人成在线电影| 色噜噜国产精品视频一区二区| 精品国产电影一区| 亚洲xxxx3d| 欧美在线视频观看免费网站| 欧美精品999| 国产在线播放91| 亚洲第一区第二区| 亚洲xxxx视频| 久久久天堂国产精品女人| 亚洲最大福利视频网| 日韩欧美一区二区三区久久| 亚洲直播在线一区| 国产精品高清网站| 97超碰蝌蚪网人人做人人爽| 久久精品99无色码中文字幕| 欧美激情精品久久久久久变态| 91av视频在线播放| 亚洲黄色www网站| 亚洲成人在线网| 国产精品久久久久久亚洲影视| 亚洲iv一区二区三区| 日韩最新在线视频| 久久精品99久久久香蕉| 国产精品午夜视频| 成人午夜黄色影院| 欧美中文字幕视频| 亚洲欧美视频在线| 日韩视频免费中文字幕| 国产精品男女猛烈高潮激情| 亚洲成人激情在线| 中文字幕日韩视频| 亚洲小视频在线观看| 久久免费精品日本久久中文字幕| 青青草原一区二区| 欧美孕妇与黑人孕交| 国产香蕉精品视频一区二区三区| 亚洲一区二区中文| 色播久久人人爽人人爽人人片视av| 久久综合伊人77777尤物| 亚洲精品成人av| 欧美在线一级视频| 欧美在线一区二区三区四| 久久综合伊人77777尤物| 日韩小视频网址| 伊人av综合网| 日韩精品免费在线观看| 69av视频在线播放| 国产综合在线观看视频| 亚洲最大成人免费视频| 久久精品国产69国产精品亚洲| 精品国产网站地址| 久久国产精品网站| 国产欧美一区二区三区久久| 97视频在线看| 日韩成人在线播放| 国产精品极品尤物在线观看| 亚洲欧美国产日韩中文字幕| 欧美激情精品久久久久久| 日韩精品视频免费在线观看| 日韩一区视频在线| 最近2019免费中文字幕视频三| 国产国产精品人在线视| 国产第一区电影| 国产亚洲精品久久久优势| 日韩中文视频免费在线观看| 国产精品国产亚洲伊人久久| www.日韩欧美| 亚洲美女在线视频| 日韩欧美成人精品| 亚洲国产日韩欧美综合久久| 久久久久免费视频| 亚洲精品自产拍| 伊人一区二区三区久久精品| 亚洲www在线| 国产精品久久久久av免费| 精品国产鲁一鲁一区二区张丽| 1769国内精品视频在线播放| 国产精品成人一区二区三区吃奶| 国产日韩欧美另类| 亚洲国产精品人人爽夜夜爽| 久久久噜噜噜久久久| 欧美日韩精品中文字幕| 136fldh精品导航福利| 精品视频久久久| 国产精品亚洲аv天堂网| 久久理论片午夜琪琪电影网| 91免费在线视频| 欧美成人免费全部观看天天性色| 国产一区二区丝袜| 国产91热爆ts人妖在线| 精品亚洲一区二区三区| 国产成人综合久久| 欧美性猛交xxxx乱大交3| www.欧美三级电影.com| 91日韩在线视频| 日韩精品欧美国产精品忘忧草| 亚洲一区二区三区乱码aⅴ蜜桃女| 4k岛国日韩精品**专区| 亚洲午夜久久久久久久| 国产亚洲精品久久久久动| 亚洲欧美日韩精品| 高清日韩电视剧大全免费播放在线观看| 日韩精品久久久久久久玫瑰园| 91亚洲人电影| 欧美成人第一页| 亚洲а∨天堂久久精品9966| 综合国产在线观看| 国产91在线播放精品91| 欧美视频在线观看免费网址| 日本一区二三区好的精华液| 日韩亚洲欧美中文高清在线| 久久色在线播放| 国产精品电影一区| 国产suv精品一区二区三区88区|