一種分布式會(huì)話管理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種分布式會(huì)話管理方法及系統(tǒng)。
【背景技術(shù)】
[0002]在計(jì)算機(jī)專業(yè)術(shù)語(yǔ)中,會(huì)話(sess1n)是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通信期間的狀態(tài)信息通常指從注冊(cè)進(jìn)入系統(tǒng)到注銷退出系統(tǒng)之間的狀態(tài)信息。同時(shí)由于網(wǎng)頁(yè)是一種無(wú)狀態(tài)的連接程序,應(yīng)用服務(wù)器需要通過(guò)sess1n得知用戶的瀏覽狀態(tài),所以一些用戶相關(guān)的信息也是保存到sess1n當(dāng)中的。
[0003]當(dāng)今社會(huì)的信息產(chǎn)業(yè)飛速發(fā)展,許多企業(yè)級(jí)應(yīng)用都面臨著大量的并發(fā)訪問(wèn),同時(shí)也需要更強(qiáng)的穩(wěn)定性,一臺(tái)應(yīng)用服務(wù)器已經(jīng)不能滿足應(yīng)用的需要,而需要增加更多的服務(wù)器。這時(shí)就需要部署使用兩臺(tái)以上的應(yīng)用服務(wù)器,作為一個(gè)集群對(duì)外提供服務(wù)。使用應(yīng)用服務(wù)器集群,則一般都會(huì)用到負(fù)載均衡,而且很多企業(yè)會(huì)把負(fù)載均衡的配置設(shè)定為非親和模式,即sess1n非粘滯(Non_sticky Sess1n)模式,這種模式的作用是能夠把請(qǐng)求均勻的分散到應(yīng)用服務(wù)器集群的每個(gè)節(jié)點(diǎn)上。
[0004]在Java EE應(yīng)用服務(wù)器集群中,sess1n的管理會(huì)比較復(fù)雜,因?yàn)橐WC集群中某一個(gè)節(jié)點(diǎn)失效后,其sess1n數(shù)據(jù)能由其他節(jié)點(diǎn)獲取以便其他節(jié)點(diǎn)接替失效節(jié)點(diǎn),實(shí)現(xiàn)集群的容錯(cuò)。過(guò)去的技術(shù)有的是使用內(nèi)存復(fù)制機(jī)制,這種方式在用戶數(shù)量和集群數(shù)量達(dá)到一定規(guī)模后,服務(wù)器性能就會(huì)大幅下降,不可取。還有一種方式是采用sess1n共享機(jī)制,SP把sess1n數(shù)據(jù)同步備份到緩存服務(wù)器,以提高sess1n的可用性,但是現(xiàn)有技術(shù)無(wú)論是開源還是非開源的實(shí)現(xiàn)方式都無(wú)法保證非親和模式下的數(shù)據(jù)一致性。尤其是當(dāng)用戶終端同時(shí)向兩個(gè)Java EE應(yīng)用服務(wù)器發(fā)起對(duì)同一 sess1n的請(qǐng)求時(shí),sess1n數(shù)據(jù)就會(huì)出現(xiàn)不一致。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題是如何在非親和的模式下保證用戶會(huì)話數(shù)據(jù)一致性,并且提高會(huì)話數(shù)據(jù)可用性。
[0006]為解決上述技術(shù)問(wèn)題,本發(fā)明提出了一種分布式會(huì)話管理方法,包括以下步驟:
[0007]判斷終端訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)是否需要備份;
[0008]如果需要備份,則向會(huì)話備份服務(wù)器集群內(nèi)與所述終端對(duì)應(yīng)的會(huì)話備份服務(wù)器請(qǐng)求分布式鎖;
[0009]獲取分布式鎖以后,使用所述當(dāng)前會(huì)話數(shù)據(jù)更新所述會(huì)話備份服務(wù)器存儲(chǔ)的所述終端的會(huì)話數(shù)據(jù);
[0010]將更新后的會(huì)話數(shù)據(jù)備份到會(huì)話備份服務(wù)器集群中的其他會(huì)話備份服務(wù)器。
[0011]此外,本發(fā)明提出了另一種分布式會(huì)話管理方法,包括以下步驟:
[0012]接收終端訪問(wèn)請(qǐng)求;
[0013]向會(huì)話備份服務(wù)器集群內(nèi)與所述終端對(duì)應(yīng)的會(huì)話備份服務(wù)器請(qǐng)求分布式鎖;
[0014]當(dāng)完成本次會(huì)話請(qǐng)求時(shí),判斷終端訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)是否需要備份;
[0015]如需要備份,則使用所述當(dāng)前會(huì)話數(shù)據(jù)更新所述會(huì)話備份服務(wù)器存儲(chǔ)的所述終端的會(huì)話數(shù)據(jù);
[0016]將更新后的會(huì)話數(shù)據(jù)備份到會(huì)話備份服務(wù)器集群中的其他會(huì)話備份服務(wù)器。
[0017]進(jìn)一步,所述判斷終端訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)是否需要備份,具體包括:
[0018]判斷所述當(dāng)前會(huì)話數(shù)據(jù)是否是新產(chǎn)生的會(huì)話數(shù)據(jù):
[0019]如果是,則所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份;如果不是,則進(jìn)一步判斷所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)與在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)是否不同,如果不同則所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份;
[0020]當(dāng)終端訪問(wèn)請(qǐng)求為注銷會(huì)話請(qǐng)求時(shí),則所述請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份;
[0021]當(dāng)在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)過(guò)期時(shí),則所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份。
[0022]進(jìn)一步,其特征在于,所述向會(huì)話備份服務(wù)器集群內(nèi)與所述終端對(duì)應(yīng)的會(huì)話備份服務(wù)器請(qǐng)求分布式鎖,具體包括:
[0023]在所述會(huì)話備份服務(wù)器集群內(nèi)查找與所述終端對(duì)應(yīng)的會(huì)話備份服務(wù)器;
[0024]向所述會(huì)話備份服務(wù)器發(fā)送分布式鎖請(qǐng)求消息。
[0025]進(jìn)一步,所述使用所述當(dāng)前會(huì)話數(shù)據(jù)更新所述會(huì)話備份服務(wù)器存儲(chǔ)的所述終端的會(huì)話數(shù)據(jù),具體包括:
[0026]獲取所述會(huì)話備份服務(wù)器中存儲(chǔ)的所述終端在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù);
[0027]比較所述當(dāng)前會(huì)話數(shù)據(jù)與所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)的一致性;
[0028]若一致,則將所述當(dāng)前會(huì)話數(shù)據(jù)寫入會(huì)話備份服務(wù)器;
[0029]若不一致,則合并所述當(dāng)前會(huì)話數(shù)據(jù)和所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù),將合并后的會(huì)話數(shù)據(jù)寫入會(huì)話備份服務(wù)器。
[0030]進(jìn)一步,在所述獲取所述會(huì)話備份服務(wù)器中存儲(chǔ)的所述終端在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)之后,還包括:
[0031]對(duì)所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)進(jìn)行反序列化解壓。
[0032]進(jìn)一步,在將所述當(dāng)前訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)寫入會(huì)話備份服務(wù)器之前,還包括:
[0033]對(duì)所述當(dāng)前訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)進(jìn)行序列化壓縮。
[0034]此外,本發(fā)明還提供了一種分布式會(huì)話管理系統(tǒng),包括:判斷模塊、請(qǐng)求模塊、更新模塊和備份模塊;
[0035]判斷模塊,用于判斷終端訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)是否需要備份;
[0036]請(qǐng)求模塊,用于當(dāng)所述判斷模塊的判斷結(jié)果為需要備份時(shí),向會(huì)話備份服務(wù)器集群內(nèi)與所述終端對(duì)應(yīng)的會(huì)話備份服務(wù)器請(qǐng)求分布式鎖;
[0037]更新模塊,用于獲取到分布式鎖以后,使用所述當(dāng)前會(huì)話數(shù)據(jù)更新所述會(huì)話備份服務(wù)器存儲(chǔ)的所述終端的會(huì)話數(shù)據(jù);
[0038]備份模塊,用于將更新后的會(huì)話數(shù)據(jù)備份到會(huì)話備份服務(wù)器集群中的其他會(huì)話備份服務(wù)器。
[0039]進(jìn)一步,所述判斷模塊包括:第一判斷子模塊、第二判斷子模塊和第三判斷子模塊,
[0040]第一判斷子模塊,用于判斷終端訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)是否為新產(chǎn)生的會(huì)話數(shù)據(jù),如果是,則所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份;如果不是,則進(jìn)一步判斷所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)與在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)是否不同,如果不同,則所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份。
[0041]第二判斷子模塊,用于判斷終端訪問(wèn)請(qǐng)求是否為注銷會(huì)話請(qǐng)求,當(dāng)終端訪問(wèn)請(qǐng)求為注銷會(huì)話請(qǐng)求時(shí),所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份;
[0042]第三判斷子模塊,用于判斷所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)是否過(guò)期,當(dāng)所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)過(guò)期時(shí),所述訪問(wèn)請(qǐng)求的當(dāng)前會(huì)話數(shù)據(jù)需要備份。
[0043]進(jìn)一步,所述更新模塊包括:獲取子模塊、比較子模塊、第一寫入子模塊和第二寫入子模塊,
[0044]獲取子模塊,用于獲取所述會(huì)話備份服務(wù)器中存儲(chǔ)的所述終端在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù);還用于根據(jù)分布式鎖響應(yīng)消息,獲取分布式鎖;
[0045]比較子模塊,用于比較所述當(dāng)前會(huì)話數(shù)據(jù)與所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)的一致性;
[0046]第一寫入子模塊,用于當(dāng)所述比較子模塊的比較結(jié)果一致時(shí),將本次訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù)寫入會(huì)話備份服務(wù)器;
[0047]第二寫入子模塊,用于當(dāng)所述比較子模塊的比較結(jié)果不一致時(shí),合并所述當(dāng)前會(huì)話數(shù)據(jù)和所述在先訪問(wèn)請(qǐng)求的會(huì)話數(shù)據(jù),將合并后的會(huì)話數(shù)據(jù)寫入會(huì)話備份服務(wù)器。
[0048]通過(guò)采用本發(fā)明所公開的一種分布式會(huì)話管理方法及系統(tǒng),使得應(yīng)用服務(wù)器在非親和的模式下既能保證會(huì)話數(shù)據(jù)一致性,又能提高會(huì)話數(shù)據(jù)可用性。
【附圖說(shuō)明】
[0049]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0050]圖1:是本發(fā)明實(shí)施例一中一種分布式會(huì)話管理方法的流程圖;
[0051]圖2:是本發(fā)明實(shí)施例二中一種分布式會(huì)話管理方法的流程圖;
[0052]圖3:是本發(fā)明實(shí)施例三中一種分布式會(huì)話管理系統(tǒng)的模塊圖。
【具體實(shí)施方式】
[0053]下面將結(jié)合本發(fā)明的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0054]本發(fā)明中,當(dāng)用戶終端發(fā)起訪問(wèn)請(qǐng)求時(shí),應(yīng)用服務(wù)器內(nèi)的會(huì)話內(nèi)存管理程序讀取預(yù)設(shè)配置項(xiàng),配置項(xiàng)內(nèi)容為單項(xiàng)選擇使用悲觀鎖會(huì)話管理方法或者樂(lè)觀鎖會(huì)話管理方法。
[0055]本發(fā)明實(shí)施例一中提出了一種分布式會(huì)話管理方法,如圖1所示,包括以下步驟:
[0056]步驟