我刚刚读完《Jupiter协作系统中的高延迟,低带宽窗口化》,直到第六部分全局一致性,我大部分都理解了。这部分描述了如何将论文中描述的系统扩展以适应连接到服务器的多个客户端。然而,解释非常简短,基本上说系统只要将客户端消息转发给所有其他客户端就可以工作。但是,我不太明白这是如何工作的。发送到所有其他客户端的消息中会发送哪些状态向量?服务器是否为每个客户端维护单独的状态向量?它是否为每个客户端在本地维护小部件的单独副本?
我能想到的一个简单例子是这样的设置: 想象客户端A、服务器和客户端B,客户端A和客户端B都连接到服务器。一开始,三个都有状态对象"ABCD"。然后,客户端A同时向服务器发送消息"在位置0插入字符F",而客户端B发送消息"在位置0插入字符G"。似乎简单地转发客户端A的消息给客户端B,反之亦然,并不能真正处理这种情况。那么服务器究竟做了什么?
我能想到的一个简单例子是这样的设置: 想象客户端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