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