增量會(huì)話對(duì)象——DeltaSession -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【clearvueentertainment.com - 電腦資料】

    在集群環(huán)境中為了使集群中各個(gè)節(jié)點(diǎn)的會(huì)話狀態(tài)都同步,同步操作是集群重點(diǎn)解決的問(wèn)題,一般來(lái)說(shuō)有兩種同步策略,其一是每次同步都把整個(gè)會(huì)話對(duì)象傳給集群中其他節(jié)點(diǎn),其他節(jié)點(diǎn)更新整個(gè)會(huì)話對(duì)象;其二是對(duì)會(huì)話中增量修改的屬性進(jìn)行同步,

增量會(huì)話對(duì)象——DeltaSession

。這兩種同步方案各有優(yōu)缺點(diǎn),整個(gè)會(huì)話對(duì)象同步策略實(shí)現(xiàn)過(guò)程比較簡(jiǎn)單方便,但會(huì)造成大量無(wú)效信息的傳輸。增量同步方式則不會(huì)傳遞無(wú)效的信息,但在實(shí)現(xiàn)上會(huì)比較復(fù)雜因?yàn)樯婕暗綄?duì)會(huì)話屬性操作過(guò)程的管理。

    這節(jié)討論的正是增量同步方式中涉及的會(huì)話對(duì)象DeltaSession,這個(gè)對(duì)象其實(shí)是對(duì)標(biāo)準(zhǔn)會(huì)話對(duì)象的擴(kuò)展使之具備在整個(gè)請(qǐng)求過(guò)程記錄會(huì)話所有的增量更改。DeltaSession的類圖如下,除了繼承StandardSession類外還實(shí)現(xiàn)了Externalizable、ClusterSession、ReplicatedMapEntry三個(gè)接口,Externalizable接口主要提供對(duì)外部的對(duì)象讀寫操作,ClusterSession接口主要提供判斷集群會(huì)話是否為原始的會(huì)話操作,只有原始會(huì)話才有資格使會(huì)話過(guò)期,ReplicatedMapEntry接口提供差異復(fù)制的操作。對(duì)于DeltaSession其實(shí)就是除了繼承StandardSession特性外還要額外實(shí)現(xiàn)這三個(gè)接口。

   

    當(dāng)客戶端發(fā)起一個(gè)請(qǐng)求時(shí),服務(wù)端對(duì)請(qǐng)求的處理可能涉及會(huì)話相關(guān)的操作,例如獲取客戶端某些屬性再根據(jù)屬性值進(jìn)行邏輯處理,而且在整個(gè)請(qǐng)求過(guò)程中可能涉及多次的會(huì)話操作,為了將這些改變能同步到集群的其他節(jié)點(diǎn)上,必須要有一個(gè)機(jī)制來(lái)實(shí)現(xiàn),實(shí)際上同步的顆粒度大小是很重要,顆粒度太大會(huì)導(dǎo)致同步不及時(shí),而顆粒度太小則可能導(dǎo)致傳輸及性能問(wèn)題,考慮到性能及可行性,tomcat同步的顆粒度是以一個(gè)完整的請(qǐng)求為單位的,即從客戶端發(fā)起請(qǐng)求到服務(wù)器完成邏輯處理返回結(jié)果之前這段時(shí)間為同步顆粒度,

電腦資料

增量會(huì)話對(duì)象——DeltaSession》(http://clearvueentertainment.com)。這個(gè)過(guò)程中對(duì)某會(huì)話的所有操作(對(duì)同一個(gè)屬性的操作只記錄最新的操作)都會(huì)被記錄下來(lái),如下圖,綠色箭頭表示一個(gè)完整的請(qǐng)求過(guò)程,期間包括了四個(gè)修改屬性操作,分別修改了屬性a、b、c、d,這四個(gè)操作會(huì)被抽象成四個(gè)動(dòng)作放進(jìn)一個(gè)列表中,集群其他節(jié)點(diǎn)獲取列表后根據(jù)這些動(dòng)作就可以對(duì)自己本地對(duì)應(yīng)的會(huì)話進(jìn)行同步。

   

    集群成員接收到某節(jié)點(diǎn)發(fā)送過(guò)來(lái)的同步消息后,將會(huì)逐一執(zhí)行動(dòng)作集里面的每個(gè)動(dòng)作,下圖大箭頭表示同步的整個(gè)過(guò)程,最下面的為動(dòng)作集列表,一共有4個(gè)動(dòng)作,按順序首先取出第一個(gè)update1動(dòng)作,動(dòng)作對(duì)象里面包含了指定修改哪個(gè)會(huì)話的會(huì)話id,根據(jù)此id去修改會(huì)話集對(duì)應(yīng)的會(huì)話的屬性。接著把剩下的其余3個(gè)動(dòng)作執(zhí)行完畢,于是完成了會(huì)話同步。

   

    在tomcat中會(huì)話增量的具體由DeltaSession類實(shí)現(xiàn),DeltaSession繼承了StandardSession標(biāo)準(zhǔn)會(huì)話的所有特性且增加了會(huì)話增量記錄的功能,增量記錄功能即通過(guò)動(dòng)作集實(shí)現(xiàn),動(dòng)作集被封裝在DeltaRequest類,所以DeltaSession主要通過(guò)DeltaRequest實(shí)現(xiàn)動(dòng)作集的管理,動(dòng)作集由一個(gè)LinkedList結(jié)構(gòu)保存,AttributeInfo描述了動(dòng)作的一些消息,所以一個(gè)動(dòng)作就被抽象成了一個(gè)AttributeInfo對(duì)象,它主要包含四個(gè)屬性 name(String)、value(Object)、action(int)、type(int),name表示會(huì)話的屬性名,即哪個(gè)屬性被改;value表示會(huì)話屬性名對(duì)應(yīng)的值;action表示動(dòng)作類型,可能是設(shè)置屬性也可能是刪除屬性;type表示會(huì)話哪種類別的屬性將被修改。

   

    整個(gè)增量會(huì)話的實(shí)現(xiàn)機(jī)制就是上面所說(shuō)的,會(huì)話的增量拷貝比起全量拷貝有很多好處,即使實(shí)現(xiàn)相對(duì)比較復(fù)雜。

最新文章