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