我正在尝试使用 Paxos 在大小约为 50MB 的文件上保持节点之间的共识,并在各个节点上不断进行修改。我遇到了实用性问题。要求:
- 跨数百个节点同步一个 50MB 以上的文件
- 对此文件进行更改,可以从任何节点进行,并且不太可能直接相互竞争,最多在几秒钟内通过网络传播
- 加入网络的新节点可以在几分钟(<1 小时)内按照 Paxos 消息构建整个文件
我面临的问题是似乎没有办法同时实现目标 2 和 3。
以下是我目前考虑过的选项:
- 每轮同步整个文件——完全不切实际,Paxos 轮次需要几分钟
- 仅同步对文件的更改——对于目标 1 和 2 来说是合理的,但会破坏目标 3,因为新节点只能在每个状态单元更改后才能同步整个文件
- 每轮同步更改和文件的随机部分——我不确定 Paxos 是否允许这样做。节点将能够根据自己的更改验证更改(允许新更改),并且能够根据其版本的所述部分验证文件的随机部分,但这实用吗?
我认为第三种选择是最好的,但我不确定 Paxos 是否允许这样做。想法是将每轮交换的数据限制为 1500 字节,并主要用对文件的更改来填充这 1500 字节。大多数轮次,文件将保持不变,而发生变化的轮次很可能少于 100 字节的更改状态,因此其他 1400 字节可以用文件的某些部分填充,这将允许构建新节点随着时间的推移整理整个文件。这实用吗?这个问题已经解决了吗?