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

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

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

    Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

    優(yōu)秀學(xué)習(xí)網(wǎng)站

    友情連接

    閱讀排行榜

    評論排行榜

    Resin 跨服務(wù)器的session傳遞[zhuan]

    Resin 跨服務(wù)器的session傳遞

    --By oldjavaman

     http://blog.csdn.net/oldjavaman/archive/2009/07/10/4338315.aspx

    1.   基于文件的session持久化技術(shù)

    Seesion能夠被跨服務(wù)器持久化, 包含我們的web應(yīng)用的Class發(fā)生變化, 譬如在開發(fā)期間,使用基于文件的持久化Seesion技術(shù)是非常便捷的, 尤其是我們在開發(fā)時, 當(dāng)Servlet會發(fā)生經(jīng)常變化

    在resin.conf中配置如下

    <web-app xmlns="http://caucho.com/ns/resin">  <session-config>    <file-store>WEB-INF/sessions</file-store>  </session-config></web-app>

    這樣的配置是將Session寫在一個在<file-store>中定義的文件目錄中,當(dāng)Session發(fā)生變化時,將會把session寫入一個文件, 當(dāng)web應(yīng)用被加載時, resin會從文件里面加載session

    但是,基于文件的session技術(shù)在做跨服務(wù)器的session傳遞時是沒有作用的,有人提出使用NFS技術(shù), 在多個服務(wù)器之間共享這個session持久文件, 但是NFS往往會從本地調(diào)用緩存, 這樣一來, 實際存放session的文件發(fā)生變化時,不能及時在另一臺服務(wù)器上得到體現(xiàn)

    2.   分布式session
    分布式session比文件持久session復(fù)雜得多, 文件持久session是一個簡單的基于內(nèi)存的session管理, 但是分布式session必須事先在多臺服務(wù)器之間實現(xiàn)session變化的傳遞

    多臺機(jī)器的負(fù)載均衡, 使用的session技術(shù)不外乎sticky sessions (粘性session)或者symmetrical sessions(對稱session)。前者關(guān)注的是負(fù)載均衡技術(shù), 后者是關(guān)注JVM的技術(shù)。使用何種技術(shù)依賴于你有什么樣的硬件,多少臺機(jī)器,你要如何管理session.

    2.1.      對稱session
    對稱session技術(shù)多用于負(fù)載均衡,一個session可以從A機(jī)器中取出,存放在B機(jī)器里面,采用JDBC session技術(shù)的對稱session ,需要描述resin.conf中的“always-load-session”屬性。 每個請求都獲得最新狀態(tài)的session

    對于對稱的session來說, 一個完全一致的服務(wù)器環(huán)境是他可以工作的基礎(chǔ),所以較粘性session來說, 由于它每次web請求都需要更新session信息, 所以比較低效。

    2.2.      粘性session
    粘性的session依賴JVM來實現(xiàn), 只要session開始工作,那么負(fù)載均衡將永遠(yuǎn)把相同的session存放于同一個機(jī)器上, 舉個例子來說,有一個ID為aaaXXX的session永遠(yuǎn)放在A機(jī)器的JVM-A上, 而bbbXXX的session用于放在B機(jī)器的JVM-B上。

    使用這種技術(shù)的是比較可靠的, 如果A機(jī)器宕機(jī), 則可以從B機(jī)器上取得我們需要的session, 而使用者并無從查覺,另外使用粘性session是高效率的,只有session發(fā)生變更時才需要重寫到服務(wù)器。

    2.3.      always-load-session
    正如上文提及的對稱式的session技術(shù)需要使用<always-load-session>屬性來標(biāo)識是否每個請求都要從服務(wù)器更新session, 如果使用的是jdbc-session技術(shù), 那么這個標(biāo)識是一定要在配置文件中加上的, 但是如果是基于tcp-session技術(shù)的話, 可以不用標(biāo)識, 因為tcp-session的技術(shù)更為老練一些。

    always-save-session屬性強(qiáng)制了客戶的每次web請求需要從服務(wù)器的session存儲中獲得更新,默認(rèn)情況,用戶只有在創(chuàng)建session才從服務(wù)器持久層取得session,但是使用了多個服務(wù)器的話, 就需要標(biāo)識來強(qiáng)制每個請求都從服務(wù)器持久層取得session來保證每個服務(wù)器的session是一致的。

    2.4.      always-save-session
    默認(rèn)情況, 當(dāng)session發(fā)生變化時Resin會將session寫入到服務(wù)器, 如:你在程序中調(diào)用了setAttribute()方法,但是假設(shè)你僅僅是更新了session中的對象的一個屬性, 譬如存放的是一個用戶對象, 你改變了這個用戶對象的年紀(jì), 這個時候resin并不能偵測到session的變化,也不會保存這個變化。

    使用<always-save-session >屬性, 可以確保在客戶么個請求結(jié)束后, 都會在服務(wù)器保存session的變化, 盡管低效, 但是非常可靠。

     

    3.   基于數(shù)據(jù)庫的session同步技術(shù)
    基于數(shù)據(jù)庫的session技術(shù)非常容易理解, resin把session寫入到數(shù)據(jù)庫中, 每次請求session從數(shù)據(jù)庫中來獲得。

    為了效率的考慮, jvm所在機(jī)器必須保存session的緩存,只有當(dāng)session發(fā)生變化時,這個機(jī)器才會向數(shù)據(jù)庫重新查詢,如果另一個jvm里面的代碼改變了session,將會通知這個機(jī)器向數(shù)據(jù)庫請求獲得更新。

    這樣的數(shù)據(jù)庫同步技術(shù)會導(dǎo)致向一個已經(jīng)存在session的機(jī)器分發(fā)變更了的session數(shù)據(jù),這樣數(shù)據(jù)庫可能會成為瓶頸, 為了解決這樣的問題, 采用便捷輕巧的mysql來存儲session,使用Oracle來存放業(yè)務(wù)數(shù)據(jù)是一個不錯的主意。

    使用數(shù)據(jù)庫技術(shù)<database>屬性是必須的, 加上這個屬性,resin會自動在制定數(shù)據(jù)庫上創(chuàng)建session存儲的表

    <resin xmlns="http://caucho.com/ns/resin"><server>  <http id='a' port='80'/>  <http id='b' port='80'/>   <database jndi-name="jdbc/session">    ...  </database>   <cluster>    <srun id='a' host='host-a' port='6802'/>    <srun id='b' host='host-b' port='6802'/>  </cluster>   <persistent-store type="jdbc">    <init>      <data-source>jdbc/session<data-source>    </init>  </persistent-store>  ...   <web-app-default>    <session-config>      <use-persistent-store/>    </session-config>  </web-app-default>
     

    持久化的session必須在上文的<sever>中使用<persistent-store>來定義。而每一個web-app應(yīng)用必須使用<use-persistent-store/>來表示需要分布式session技術(shù)

    ata-source
     數(shù)據(jù)源
     
    table-name
     存放session數(shù)據(jù)的表名
     
    blob-type
      Blob類型
     
    max-idle-time
      釋放時間
     

     

     

    CREATE TABLE persistent_session (

      id VARCHAR(64) NOT NULL,

      data BLOB,

      access_time int(11),

      expire_interval int(11),

      PRIMARY KEY(id)

    )
     

    下面是一個使用持久層session的web-app定義示例:

    <web-app xmlns="http://caucho.com/ns/resin">  <session-config>    <use-persistent-store/>    <always-save-session/>  </session-config></web-app>

    4.   基于集群session技術(shù)
    基于集群的session技術(shù)應(yīng)用在服務(wù)器集群領(lǐng)域, 在一些案例中采用數(shù)據(jù)庫的session分布技術(shù)是高效的, 有些場合,采用集群的session是高效的。

    在集群的session每一個服務(wù)器擁有一個jvm和一個備份jvm, session同時保存在自己的jvm和備份jvm里面。

    同樣地, 你必須修改<sever>中的<cluster>下面的<srun>屬性來達(dá)到集群session的效果, 在web-app中使用<use-persistent-store>屬性來標(biāo)識這個應(yīng)用采用session持久化技術(shù)

    配置如下:

    <resin xmlns="http://caucho.com/ns/resin">

      ...

     

    <server>

      <cluster>

        <srun id="a" host="192.168.0.1" port="6802" index="1"/>

        <srun id="b" host="192.168.0.2" port="6802" index="2"/>

      </cluster>

     

      <persistent-store type="cluster">

        <init path="cluster"/>

      </persistent-store>

      ...
     

     

    <web-app xmlns="http://caucho.com/ns/resin">  <session-config>    <use-persistent-store="true"/>  </session-config></web-app>
     

    <srun>和<srun-backup>都被視為一個集群服務(wù)器, 當(dāng)一個服務(wù)器上的session發(fā)生變化時, 它會自動尋找其他的備份服務(wù)器, 并把備份服務(wù)器上的session更新, 當(dāng)這個服務(wù)器重新啟動時, 他會向備份服務(wù)器請求session,并獲得備份。

    <resin xmlns="http://caucho.com/ns/resin"><server>  <http id='a' port='80'/>  <http id='b' port='80'/>   <cluster>    <srun id='a' host='host-a' port='6802'/>    <srun id='b' host='host-b' port='6802'/>  </cluster>   <persistent-store type="cluster">    <init path="cluster"/>  </persistent-store>   <host id=''>  <web-app id=''>   <session-config>    <use-persistent-store="true"/>  </session-config>   </web-app>  </host></server></resin>
     

     

     

     

     

     
     
    5. 關(guān)于作者
    OldJavaMan,長期致力于Java相關(guān)領(lǐng)域的技術(shù)工作, 主要參與J2EE相關(guān)程序的設(shè)計, 目前在南京的一家軟件企業(yè)就職,他希望和廣大的Java愛好者結(jié)交朋友。大家可以通過 mail 聯(lián)系他 。

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/oldjavaman/archive/2009/07/10/4338315.aspx

    posted on 2009-08-02 21:50 都市淘沙者 閱讀(928) 評論(0)  編輯  收藏 所屬分類: Tomcat/Weblogic/Resin/Jboss

    主站蜘蛛池模板: 精品免费视在线观看| 皇色在线视频免费网站| 亚洲高清中文字幕| 啦啦啦在线免费视频| 国产又黄又爽胸又大免费视频| 精品亚洲成a人片在线观看少妇| 毛片a级毛片免费播放100| 国产无遮挡色视频免费观看性色| 亚洲制服中文字幕第一区| 日本不卡高清中文字幕免费| 三年片在线观看免费| 亚洲国产91在线| 亚洲宅男天堂在线观看无病毒| 免费下载成人电影| 巨胸喷奶水www永久免费| 亚洲乱码一二三四区乱码| 中文字幕亚洲激情| 四虎影视免费在线| 色片在线免费观看| 无码亚洲成a人在线观看| 久久精品国产亚洲AV麻豆王友容| 成人五级毛片免费播放| 波多野结衣免费一区视频| WWW国产亚洲精品久久麻豆| 久久亚洲精品成人AV| 久久久久亚洲AV综合波多野结衣| 又粗又大又黑又长的免费视频 | 亚洲成人午夜电影| 亚洲精品国自产拍在线观看| 福利免费观看午夜体检区| 国产一级一毛免费黄片| 水蜜桃视频在线观看免费| 亚洲AV综合色区无码二区爱AV| 亚洲日韩精品射精日| 免费欧洲美女牲交视频| 麻豆一区二区免费播放网站| 久久免费视频观看| 久久久免费观成人影院| 国产精品成人亚洲| 亚洲综合色丁香婷婷六月图片| 亚洲天堂中文字幕|