我剛讀完High-Latency, Low-Bandwidth Windowing in the Jupiter Collaboration System,我大部分時間都是在第6部分:全局一致性。本部分描述了本文描述的系統如何擴展以適應連接到服務器的多個客戶端。然而,解釋非常短暫,基本上說,如果中央服務器僅將客戶端消息轉發給所有其他客戶端,則系統將工作。我真的不明白這是如何工作的。在發送給所有其他客戶端的消息中將發送什麼狀態向量?服務器是否爲每個客戶端維護獨立的狀態向量?是否爲每個客戶本地維護一個單獨的小部件副本?如何在一個使用中央服務器進行操作轉換的系統中與多個客戶端進行實時協作?
我能想到的簡單例子就是這種設置:想象客戶端A,服務器和客戶端B的客戶端A和客戶端B都連接到服務器。首先,所有三個都有狀態對象「ABCD」。然後,客戶端A發送消息「在位置0插入字符F」,同時客戶端B向服務器發送消息「在位置0插入字符G」。它似乎只是簡單地將客戶端A的消息轉發給客戶端B,反之亦然實際上並不處理這種情況。那麼服務器到底做了什麼?
對於後代,如果不清楚:服務器充當「A」和「B」之間的「代理客戶端」,需要翻譯從'A'('a')到'a''的操作,以及*將'a''轉發到'B'(好像服務器本身產生了操作)。然後,服務器擁有「A」和「B」操作隊列的副本,而「A」和「B」只有服務器操作隊列的副本。有關進一步閱讀,請參閱羣件系統*中的併發控制*和*分佈式操作變換的反例以及點對點通信的校正算法*。 – mzhang 2015-11-12 06:55:47