2010-04-28 20 views
6

我剛讀完High-Latency, Low-Bandwidth Windowing in the Jupiter Collaboration System,我大部分時間都是在第6部分:全局一致性。本部分描述了本文描述的系統如何擴展以適應連接到服務器的多個客戶端。然而,解釋非常短暫,基本上說,如果中央服務器僅將客戶端消息轉發給所有其他客戶端,則系統將工作。我真的不明白這是如何工作的。在發送給所有其他客戶端的消息中將發送什麼狀態向量?服務器是否爲每個客戶端維護獨立的狀態向量?是否爲每個客戶本地維護一個單獨的小部件副本?如何在一個使用中央服務器進行操作轉換的系統中與多個客戶端進行實時協作?

我能想到的簡單例子就是這種設置:想象客戶端A,服務器和客戶端B的客戶端A和客戶端B都連接到服務器。首先,所有三個都有狀態對象「ABCD」。然後,客戶端A發送消息「在位置0插入字符F」,同時客戶端B向服務器發送消息「在位置0插入字符G」。它似乎只是簡單地將客戶端A的消息轉發給客戶端B,反之亦然實際上並不處理這種情況。那麼服務器到底做了什麼?

回答

5

我真的想出了這將如何工作。在我的例子中,服務器爲客戶端A和客戶端B保留一個狀態空間。在服務器首先獲得客戶端A的消息的情況下,服務器獲取具有狀態向量(0,0)的消息,插入F,然後更新其狀態向量分別爲A和B的(1,0)和(0,1)(其中第一個數字是來自客戶端的已處理消息的數量,第二個數字是來自服務器的消息的數量)處理)。然後服務器發送「在位置0插入F」和狀態向量(0,0)(因爲這是服務器收到消息時服務器在B的狀態空間中的狀態),並獲得「在位置0插入G」從B發送狀態(0,0)。由於服務器在B的狀態空間中處於狀態(0,1),所以它首先轉換消息(並且類似地,因爲當B接收到服務器的消息時它在(1,0)中),它也將它從服務器)。因爲必須設置轉換,以便如果xform(c,s)=(c',s'),則應用於s的c'應用於c,B並且服務器最終處於相同狀態。服務器從B接收到的消息也會發生同樣的情況,然後發送給A.

+0

對於後代,如果不清楚:服務器充當「A」和「B」之間的「代理客戶端」,需要翻譯從'A'('a')到'a''的操作,以及*將'a''轉發到'B'(好像服務器本身產生了操作)。然後,服務器擁有「A」和「B」操作隊列的副本,而「A」和「B」只有服務器操作隊列的副本。有關進一步閱讀,請參閱羣件系統*中的併發控制*和*分佈式操作變換的反例以及點對點通信的校正算法*。 – mzhang 2015-11-12 06:55:47

相關問題