类似Dynamo的数据库(例如Cassandra)可以通过仲裁来强制执行一致性,即一些同步写入的副本(W)和一些要读取的副本(R)应该以W + R>的方式选择; N其中N是复制因子。另一方面,像Zookeeper这样的基于PAXOS的系统也被用作一致的容错存储。
这两种方法有什么区别? PAXOS是否提供W + R> N架构未提供的保证?
答案 0 :(得分:18)
是的,Paxos提供类似Dynamo的系统及其读写仲裁不提供的保证。不同之处在于如何处理故障以及在写入期间发生的情况。写入成功后,两种系统的行为都相似。数据将被保存并随后可供阅读(直到被覆盖或删除)等等。
在写入和失败后出现差异。直到您在向最终一致的系统写入内容时从W节点获得成功答案,然后数据可能已写入某些节点而不是其他节点,并且无法保证整个系统同意当前值。如果此时尝试读回数据,则某些客户端可能会返回新数据并返回一些旧数据。换句话说,系统不是立即一致的。这是因为这些系统中的节点之间的写入不是原子的。通常存在“治愈”这种不一致的机制,并且“最终”系统将再次变得一致(即,读取将再次总是返回相同的值,直到写入新内容为止)。这就是为什么它们通常被称为“最终一致”的原因。可以(并且将会)出现不一致的情况,但最终会一直处理和协调它们。
使用Paxos,可以跨节点使写入成为原子,因此可以避免节点之间的不一致。 Paxos算法可以保证非故障节点在任何时间点都不会对写入结果产生不同意见。无论是在任何地方还是在任何地方都能成功。在任何时候都不会有任何不一致的读取(如果它被正确实现并且当然所有假设都成立)。然而,这需要付出代价。主要是,当例如太多节点(或它们之间的通信)不起作用时,系统可能需要延迟一些请求并且不可用。这是确保没有给出不一致的答复所必需的。
总结一下:主要区别在于类似Dynamo的系统可能会在写入期间或失败后一段时间内返回不一致的结果(但最终会从中恢复),而基于Paxos的系统可以保证不存在任何此类不一致通过有时不可用并延迟请求。
答案 1 :(得分:12)
Paxos和W + R> N法定人数尝试解决稍微不同的问题。 Paxos通常被描述为复制状态机的一种方式,但实际上它更像是一个分布式日志:写入日志的每个项都获得一个索引,不同的服务器最终拥有相同的日志项+它们的索引。 (可以通过将状态机的输入写入日志来实现复制状态机,并且每个服务器根据其索引在约定的输入上重放状态机)。您可以在我撰写here的博文中了解有关Paxos的更多信息。
W + R> N仲裁解决了在多个服务器之间共享单个值的问题。在学术界,它被称为“共享寄存器”。共享寄存器有两个操作:读取和写入,我们希望读取返回上一次写入的值。
因此,Paxos和W + R> N法定人数存在于不同的域中,并且具有不同的属性(例如,Paxos保存有序的项目列表)。但是,Paxos可用于实现共享寄存器,并且W + R> N仲裁可用于实现分布式日志(尽管效率非常低)。
综合以上所述,有时W + R> N的法定人数没有以“完全健壮”的方式实施,因为它需要不止一次通信。因此,在想要低延迟的系统中,它们的W + R> N仲裁的实现可能提供较弱的属性(例如,可以存在冲突的值)。
总而言之,理论上,Paxos和W + R> N可以实现相同的目标。实际上,这将是非常低效的,并且每个对于稍微不同的东西更好。甚至更实际地,W + R> N并不总是完全实现,因此为速度划分了一些一致性属性。
更新:Paxos支持非常一般的故障模型:可以删除消息,节点可能崩溃并重新启动。 W + R> N仲裁方案具有不同的实现,其中许多假设较少的一般失败。因此,两者之间的差异还取决于对可能出现的故障的假设。
答案 2 :(得分:9)
Paxos的实施非常简单,而且使用它的许多系统也使用了提示,或仅用于领导者选举等等。但是,它确实在出现故障时保证了一致性 - 当然要受其特定故障模型的限制。
我看到的第一个基于仲裁的系统假设某种领导者或事务基础结构可确保足够的一致性,您可以信任仲裁机制的工作原理。这个基础设施很可能是基于Paxos的。
查看https://cloudant.com/blog/dynamo-and-couchdb-clusters/等说明,似乎Dynamo 不基于保证其仲裁系统一致性的基础设施 - 那么它是非常聪明还是偷工减料?根据{{3}},“Dynamo系统强调可用性以牺牲一致性。摘要读取”Dynamo牺牲了某些故障情况下的一致性。“实际上,后来很明显Dynamo即使在没有故障的情况下也会牺牲一致性:Dynamo可能在存在多个并发写入请求时变得不一致,因为副本可能由于多个协调器而分歧。“ (结束语)
因此,对于在Dynamo中实施的仲裁,Paxos似乎提供了更强的可靠性保证。
答案 3 :(得分:1)
没有区别。法定人数的定义表明任何两个法定人数'十字路口不是空的。简单多数仲裁是一个例子而不是定义。看看Lamport博士后来的论文" Vertical Paxos",他在那里提供了一些其他可能的法定人数配置。
多法令paxos协议(AKA Multi-Paxos),在稳定状态下,它只是两阶段提交。只有在领导失败时才需要改变选票号码。
Zookeeper的复制协议(ZAB)和RAFT都基于Paxos。在领导者失败后,差异在于故障检测和转换。