何时使用Paxos(实际使用案例)?

时间:2011-06-03 05:37:05

标签: algorithm distributed paxos consensus

有人可以给我一份Paxos真实用例列表。这是一个真正的问题,需要达成共识才能成为更大问题的一部分。

以下是Paxos的用例吗?

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

但为什么Paxos必要?假设需要处理新卡。如果一切正常,运行相同代码的每个副本将生成相同的卡。为什么客户端不能从所有复制的服务器请求最新状态,并选择最多出现的卡。因此,如果一个服务器出现错误,客户端仍然会从选择多数位置获得正确的状态。

5 个答案:

答案 0 :(得分:12)

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

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

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

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

更准确地说,Paxos应被视为分布式日志,您可以在此处阅读更多相关信息:Understanding Paxos – Part 1

答案 1 :(得分:5)

答案 2 :(得分:3)

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

答案 3 :(得分:2)

更新2018年:Mysql高可用性使用paxos:https://mysqlhighavailability.com/the-king-is-dead-long-live-the-king-our-homegrown-paxos-based-consensus/

真实世界的例子:

Cassandra uses Paxos以确保连接到不同群集节点的客户端可以通过添加" IF NOT EXISTS"来安全地执行写操作。写作业。 Cassandra没有主节点,因此可以在多个节点上同时发布两个冲突的操作。当使用if-not-exists语法时,paxos算法用于机器之间的命令操作,以确保只有一个成功。然后,客户可以将其用于store authoritative data with an expiration lease。只要大多数Cassandra节点启动它就可以工作。因此,如果您将键空间的复制因子定义为3,那么1个节点可能会失败,5个则会失败,等等。

对于正常写入,Caassandra允许不同节点接受多个冲突写入,这些节点可能暂时无法通信。在这种情况下,当同一个键同时出现两个Writer时,不要使用Paxos can loose data。 Cassandra内置了一些特殊的数据结构,它们不会丢失仅限插入的数据。

扑克和Paxos:

正如其他答案所指出的,扑克是基于转变的并且有规则。如果您允许一个主副本和多个副本,则主服务器会仲裁下一个操作。我们假设用户首先点击"检查"按钮然后改变主意并点击"折叠"。这些是冲突的命令,只有第一个应该被接受。浏览器不应让他们按下第二个按钮,按下第一个按钮时它将禁用它。由于涉及金钱,主服务器还应该执行规则,并且每个玩家每回合只允许一个动作。当主人在比赛期间崩溃时出现问题。哪个副本可以成为主副本,如何强制只有一个副本成为主副本?

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

在上面的例子中,扑克大师和副本最终是一致的。主设备可以发送心跳,以便副本知道它们仍然连接到主设备。当消息在一个方向上流动时,这很快。当主人崩溃时,试图成为主人的副本中可能存在竞争条件。在这一点上使用Paxos可以使您对哪个节点现在成为主节点的结果保持一致。这需要节点之间的附加消息以确保单个主机的共识结果。

答案 4 :(得分:0)

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

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