【发布时间】:2014-10-17 04:10:09
【问题描述】:
我对使用 Paxos 算法感到困惑。 似乎 Paxos 可以用于这样的场景:多个服务器(一个集群,我假设每个服务器都有 3 个角色,proposer、acceptor、leaner)需要保持相同的命令序列以实现一致性和备份。我假设有一些客户端向该服务器发送命令(客户端可能并行发送)。每次命令由一个 Paxos 实例分派到多个服务器时。
- 不同的客户端可以向不同的提议者发送不同的命令,对吧?
如果是这样,来自某个客户端的一个命令将引发一个 Paxos 实例。所以,
- 多个 Paxos 实例可以同时运行?
如果是这样,client-A 向proposer-A 发送“A += 1”命令,client-B 几乎同时向proposer-B 发送“B += 2”命令,我想看到每个服务器已收到 2 个命令,“A += 1”和“B += 2”。
然而,
给定 5 个服务器,比如 S1-S5,S1 发送命令“A += 1”和 S5 发送命令“B += 1”,S2 承诺 S1 而 S3,S4 承诺 S5,所以最后是 S3,S4 ,S5 得到 "B += 1" 但 S1,S2 什么也没得到,因为承诺的数量不是多数。似乎 Paxos 根本没有帮助。我们在所有 5 台服务器上都没有得到预期的“A += 1”和“B += 2”?
所以我猜在Paxos的实际应用中,不允许并行Paxos实例?如果是这样,如何避免并行Paxos实例,如果我们允许多个客户端和多个提议者,我们似乎仍然需要一个中心化服务器来标记是否有Paxos在运行。
另外,我对提议者编号有疑问。我在互联网上搜索并声称以下内容
是一个解决方案: 5 个服务器,给定相应的索引 k(0-4),每个服务器使用数字 5*i + k 来表示该服务器的第“i”个提案。
对我来说,这似乎完全不符合要求,因为server-1的第一个proposal编号总是1,server-4的第一个proposal编号总是4,但是server-4可能比server-1更早提出proposal,但是它的提案数量更大。
【问题讨论】:
标签: distributed race-condition paxos