国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Resin 跨服務(wù)器的session傳遞

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ā)生變化, 譬如在開(kāi)發(fā)期間,使用基于文件的持久化Seesion技術(shù)是非常便捷的, 尤其是我們?cè)陂_(kāi)發(fā)時(shí), 當(dāng)Servlet會(huì)發(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寫(xiě)在一個(gè)在<file-store>中定義的文件目錄中,當(dāng)Session發(fā)生變化時(shí),將會(huì)把session寫(xiě)入一個(gè)文件, 當(dāng)web應(yīng)用被加載時(shí), resin會(huì)從文件里面加載session

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

<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>來(lái)定義。而每一個(gè)web-app應(yīng)用必須使用<use-persistent-store/>來(lái)表示需要分布式session技術(shù)

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

 

 

CREATE TABLE persistent_session (

  id VARCHAR(64) NOT NULL,

  data BLOB,

  access_time int(11),

  expire_interval int(11),

  PRIMARY KEY(id)

)
 

下面是一個(gè)使用持久層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ù)庫(kù)的session分布技術(shù)是高效的, 有些場(chǎng)合,采用集群的session是高效的。

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

同樣地, 你必須修改<sever>中的<cluster>下面的<srun>屬性來(lái)達(dá)到集群session的效果, 在web-app中使用<use-persistent-store>屬性來(lái)標(biāo)識(shí)這個(gè)應(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>都被視為一個(gè)集群服務(wù)器, 當(dāng)一個(gè)服務(wù)器上的session發(fā)生變化時(shí), 它會(huì)自動(dòng)尋找其他的備份服務(wù)器, 并把備份服務(wù)器上的session更新, 當(dāng)這個(gè)服務(wù)器重新啟動(dòng)時(shí), 他會(huì)向備份服務(wù)器請(qǐng)求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>

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Resin介紹及其使用配置
Apache + Tomcat集群配置詳解
Resin服務(wù)器的使用(一篇不錯(cuò)的文章,如果想使用resin做服務(wù)器建議看看)-JSP編程-華夏名網(wǎng)資訊中心 虛擬主機(jī),域名注冊(cè),雙線虛擬主機(jī),服務(wù)器租賃,為7萬(wàn)用戶提供服務(wù)
JProfiler 5.1.4的使用方法
webpy使用筆記(二) session/sessionid的使用
第 88 天:OAuth2.0 客戶端實(shí)戰(zhàn)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服