分布式對(duì)話服務(wù)器的管理(1)
發(fā)表時(shí)間:2024-06-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]摘要: 通過使用JDK 1.3中引入的RMI和Proxy API,本篇文章討論了一種允許一臺(tái)或多臺(tái)servlet服務(wù)器在一臺(tái)或多臺(tái)對(duì)話服務(wù)器上維護(hù)對(duì)話信息的技術(shù),采用這種技術(shù)后,單一點(diǎn)故障就不會(huì)再出現(xiàn)了。 如果系統(tǒng)中有一臺(tái)或多臺(tái)servlet服務(wù)器,對(duì)話信息只存在于運(yùn)行著JVM的一臺(tái)serv...
摘要:
通過使用JDK 1.3中引入的RMI和Proxy API,本篇文章討論了一種允許一臺(tái)或多臺(tái)servlet服務(wù)器在一臺(tái)或多臺(tái)對(duì)話服務(wù)器上維護(hù)對(duì)話信息的技術(shù),采用這種技術(shù)后,單一點(diǎn)故障就不會(huì)再出現(xiàn)了。
如果系統(tǒng)中有一臺(tái)或多臺(tái)servlet服務(wù)器,對(duì)話信息只存在于運(yùn)行著JVM的一臺(tái)servlet服務(wù)器上,而不會(huì)被傳輸給其他servlet服務(wù)器。如果該servlet服務(wù)器當(dāng)機(jī)或因?yàn)榫S護(hù)而被關(guān)機(jī),任何保存在對(duì)話中的信息都會(huì)丟失。如果一個(gè)系統(tǒng)中有多臺(tái)servlet服務(wù)器,一個(gè)帶有對(duì)話的用戶需要訪問對(duì)話中的任何信息,都需要被重新定向到同一臺(tái)servlet服務(wù)器。曾經(jīng)有專家建議采用關(guān)系數(shù)據(jù)庫保存所有的對(duì)話信息,但這仍然存在單一點(diǎn)故障的危險(xiǎn),那就是運(yùn)行關(guān)系數(shù)據(jù)庫的服務(wù)器。而且如果數(shù)據(jù)庫出了故障,所有的servlet服務(wù)器就都不能再訪問對(duì)話信息了。另外,在數(shù)據(jù)庫中保存可串行化的對(duì)象在有些數(shù)據(jù)庫中是比較難以實(shí)現(xiàn)的。
多服務(wù)器對(duì)話管理的另一個(gè)可能的途徑是利用JavaSpaces API來維護(hù)對(duì)話對(duì)象中的記錄。當(dāng)然,如果運(yùn)行JavaSpaces的服務(wù)器由于維護(hù)或故障而被關(guān)機(jī),也會(huì)丟失所有的對(duì)話信息,我們?cè)僖淮斡龅搅藛我稽c(diǎn)故障的問題。
要實(shí)現(xiàn)帶有N個(gè)節(jié)點(diǎn)的分布式對(duì)話服務(wù)器,我們必須解決如下的三個(gè)問題:
━━如何建立一個(gè)庫來存貯對(duì)話信息。
━━如何對(duì)分布式對(duì)話信息存貯庫進(jìn)行同步。
━━在一個(gè)對(duì)話信息存貯庫脫離網(wǎng)絡(luò)后,如何使該服務(wù)器從下一個(gè)對(duì)話信息存貯庫中訪問對(duì)話信息。
Mnemosyne的簡(jiǎn)介
我們用來存貯對(duì)話信息的庫是Mnemosyne界面的執(zhí)行。執(zhí)行Mnemosyne的對(duì)象負(fù)責(zé)管理對(duì)話信息存貯庫中的所有對(duì)象,任何試圖寫、訪問或刪除庫中對(duì)象的對(duì)象都必須調(diào)用Mnemosyne的相應(yīng)的方法來實(shí)現(xiàn)相應(yīng)的操作。
一個(gè)對(duì)象要存貯在Mnemosyne,就必須執(zhí)行Memory界面,該界面定義了equalsMemory()操作來探測(cè)二個(gè)內(nèi)存對(duì)象是否相同,這就使 Mnemosyne判斷出應(yīng)當(dāng)把哪個(gè)對(duì)象返回給read要求或take要求。Memory界面也可以進(jìn)行串行化擴(kuò)充,以便我們可以用RMI在網(wǎng)絡(luò)上傳輸該對(duì)象。