concurrency - Paxos 是强一致性的吗?

标签 concurrency distributed-computing distributed-system consensus paxos

考虑一个具有 3 个节点的分布式系统——n1、n2、n3。节点之间有一个共享数据 x。 Paxos 在节点上运行。一开始,x等于4。

客户端向n1发送更新请求,将x的值改为5,n1和n2通过运行Paxos对新值达成共识,但是n3出现了一些链路故障,所以n3没有最新的x值.

我们知道Paxos提供强一致性。另一方面,如果客户端向 n1 发送一个读取请求,同时向 n3 发送另一个读取请求,则返回值不相同(其中一个是 5,另一个是 4)。所以运行Paxos后,系统并不是强一致性的。

My question is: How we can resolve this contradiction? Did I misunderstand something?

最佳答案

在 multi-paxos 中,对等点可能会像您注意到的那样落后。如果您从法定人数中读取值,尽管您一定会看到最新的值,但诀窍在于找出最新的值。并非所有应用程序都需要这个,但如果您的应用程序需要,一个非常简单的扩充就足够了。只需使用元组而不是原始值,其中第一项是更新计数器,第二项是原始值。每次对等点尝试更新值时,它也会更新计数器。因此,当您从法定人数中读取时,具有最高更新计数器的元组保证是最新值。

关于concurrency - Paxos 是强一致性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508674/

相关文章:

kubernetes - 有没有办法将两个具有相同应用程序的容器连接到Kubernetes上的同一数据库?

java - 防止并发方法执行

c++ - 并发 vector 的安全性

java - 如何进行CRC64分布式计算(利用其线性特性)?

distributed-computing - 什么时候使用Paxos这样的共识算法而不是Vector Clock?

message-queue - 消息队列系统如何工作?

java - 增量操作的原子性

java - 在 Java 中阻塞并同时释放可变数量的线程

.net - 分布式计算框架(.NET)-专门用于CPU密集型操作

java - 跨 JVM 分配订阅者