类似于Dynamo的数据库(例如Cassandra)可以通过仲裁来强制执行一致性,即,应以W + R> N的方式选择多个同步写入的副本(W)和多个要读取的副本(R)。 N是复制因子。另一方面,诸如Zookeeper之类的基于PAXOS的系统也用作一致的容错存储。
这两种方法有什么区别? PAXOS是否提供W + R> N模式未提供的保证?
最佳答案
Paxos的实现并非易事,而且价格昂贵,以至于使用它的许多系统也都使用提示,或者仅将其用于领导者选举等。但是,在存在故障的情况下,它的确提供了保证的一致性-当然要受其特定故障模型的限制。
我看到的第一个基于仲裁的系统采用了某种领导者或事务基础结构,可以确保足够的一致性,使您可以相信仲裁机制可以正常工作。这种基础结构很可能是基于Paxos的。
查看诸如https://cloudant.com/blog/dynamo-and-couchdb-clusters/之类的描述,似乎Dynamo并非基于保证其仲裁系统一致的基础结构-那么它是不是非常聪明或捷径?根据http://muratbuffalo.blogspot.co.uk/2010/11/dynamo-amazons-highly-available-key.html的说法,“Dynamo系统强调可用性的程度要达到牺牲一致性的目的。摘要为“在某些故障情况下Dynamo牺牲了一致性”。实际上,后来很明显,即使没有故障,Dynamo也会牺牲一致性:Dynamo可能会成为在存在多个并发写入请求时不一致,因为副本可能由于多个协调器而发生差异。” (结束报价)
因此,对于Dynamo中实现的法定人数,Paxos似乎提供了更强的可靠性保证。