27

有人能给我一份 Paxos 的真实用例列表吗?这是真正的问题,需要将共识作为更大问题的一部分。

以下是 Paxos 的用例吗?

假设有两个客户端在扑克服务器上互相玩扑克。扑克服务器被复制。我对 Paxos 的理解是,它可以用来保持代表当前扑克牌的内存数据结构的一致性。也就是说,确保所有副本都具有完全相同的内存状态。

但是为什么需要 Paxos?假设需要发一张新牌。如果一切正常,运行相同代码的每个副本都会生成相同的卡。为什么客户端不能只从所有复制的服务器请求最新状态并选择出现最多的卡。因此,如果一台服务器出现错误,客户端仍然可以通过选择大多数来获得正确的状态。

4

5 回答 5

15

您假设所有服务器彼此同步(即具有相同的状态),因此当服务器需要选择下一张卡时,每个服务器将选择完全相同的卡(假设您的代码是确定性的)。

但是,您的服务器状态也取决于用户的操作。例如,如果用户决定提高 50 美元 - 您的服务器需要将该信息存储在某处。现在,假设您的服务器向网络客户端回复“ok”(我假设是基于网络的扑克游戏),然后服务器崩溃了。您的其他服务器可能没有关于 50 美元加注的信息,并且您的系统将不一致(从某种意义上说,客户端认为 50 美元加注已经完成,而幸存的服务器却没有注意到它)。

请注意,大多数在这里没有帮助,因为数据丢失了。此外,假设不是主服务器崩溃,而是主服务器加上另一台服务器获得了 50 美元的加薪数据。在这种情况下,使用多数可能会更糟:如果你从两台服务器得到数据的响应,你会认为 50 美元的加薪已经执行。但是如果其中一个失败了,那么你就不会拥有多数,你会认为加注没有被执行。

一般来说,Paxos 可用于以容错的方式复制状态机。“状态机”可以被认为是一种具有一些初始状态的算法,它根据从外部(即网络客户端)接收到的消息确定性地推进状态。

更准确地说,Paxos 应该被视为分布式日志,您可以在此处阅读更多信息:了解 Paxos – 第 1 部分

于 2013-09-22T13:08:00.653 回答
6

2018 年更新:

Mysql High Availability使用paxos: https ://mysqlhighavailability.com/the-king-is-dead-long-live-the-king-our-homegrown-paxos-based-consensus/

现实世界的例子:

Cassandra 使用 Paxos来确保连接到不同集群节点的客户端可以通过在写入操作中添加“IF NOT EXISTS”来安全地执行写入操作。Cassandra 没有主节点,因此可以在多个节点上同时发出两个冲突的操作。当使用 if-not-exists 语法时,使用 paxos 算法对机器之间的操作进行排序,以确保只有一个成功。然后,客户端可以使用它来存储具有到期租约的权威数据。只要大多数 Cassandra 节点启动,它就会工作。因此,如果您将密钥空间的复制因子定义为 3,则 1 个节点可能会失败,如果是 5,则 2 个节点可能会失败,依此类推。

对于正常写入,Caassandra 允许不同节点接受多个冲突的写入,这些节点可能暂时无法通信。在这种情况下,不使用 Paxos,因此当同一键同时发生两次写入时,可能会丢失数据。Cassandra 内置了特殊的数据结构,不会丢失仅插入的数据。

扑克和 Paxos:

正如其他答案所指出的,扑克是回合制的并且有规则。如果您允许一个主服务器和多个副本,那么主服务器仲裁下一个操作。假设用户首先单击“检查”按钮,然后改变主意并单击“折叠”。这些是相互冲突的命令,只有第一个应该被接受。浏览器不应该让他们按下第二个按钮,当他们按下第一个按钮时它将禁用它。由于涉及金钱,主服务器也应该执行规则,并且每回合只允许每位玩家执行一项操作。当主人在游戏中崩溃时,问题就来了。哪个副本可以成为主副本,您如何强制只有一个副本成为主副本?

处理选择新主服务器的一种方法是使用外部强一致性服务。我们可以使用 Cassandra为主节点创建租约。副本可以在主服务器上超时并尝试获取租约。由于 Cassandra 使用 Paxos,因此它具有容错性;即使 Cassandra 节点崩溃,您仍然可以读取或更新租约。

在上面的例子中,扑克大师和副本最终是一致的。主服务器可以发送心跳,以便副本知道它们仍然连接到主服务器。这是快的,因为消息在一个方向流动。当主服务器崩溃时,副本中可能会出现争用条件,试图成为主服务器。在那个时候使用 Paxos 可以让您始终如一地确定哪个节点现在是主节点的结果。这需要节点之间的额外消息来确保单个主节点的共识结果。

于 2015-07-27T21:37:31.050 回答
5

现实生活中的用例:

  1. 用于松散耦合分布式系统的 Chubby 锁服务

  2. 阿帕奇动物园管理员

于 2011-06-03T11:11:20.527 回答
3

Paxos 被我工作的公司 (WANdisco plc.) 用于 Subversion 存储库的基于 WAN 的复制和 Hadoop NameNode 的高可用性。

于 2013-05-08T01:06:53.100 回答
0

在您描述的情况下,您是对的,Paxos 并不是真正必要的:单个中央机构可以为套牌生成一个排列,并在牌局开始时将其分发给每个人。事实上,对于一般的扑克游戏,在扑克游戏中,有严格的转牌顺序和单个活跃玩家,我看不出你可能需要使用 Paxos 的合理情况,除非可能选举中央权威洗牌。

一个更好的例子可能是同时移动的游戏,例如 Jeopardy。在这种情况下,Paxos 将允许所有服务器一起决定一系列紧密计时的事件(例如蜂鸣器按下)发生的顺序,以便所有服务器得出相同的结论。

于 2011-06-03T07:10:09.927 回答