顺序一致性和线性一致性
发布网友
发布时间:2024-03-27 00:28
我来回答
共1个回答
热心网友
时间:2024-04-07 23:30
顺序一致性指的是,同一个处理器上的不同操作(operation),是按程序顺序(program order)来进行的。但是对于不同处理器上的操作,是没有保证的。
假设CPU1上有一系列操作,p1, p2, p3...
CPU2上也有一系列操作,k1, k2, k3...
如果最后的结果是X,并且我们总能找到一个执行顺序使得最后的结果也是X,我们就说这个模型是顺序一致性的。
比如cpu1: write a=5, read b, write b=4
cpu2:read a, write b= 3, read a
假设实际发生的顺序是这样的:
cpu1:write a=5, cpu2:read a(得到5), cpu2 write b=3, cpu1 read b(得到3), cpu1 write b=4, cpu2 read a(得到5)
那么这个结果就是满足顺序一致性的。
也就是说无论cpu1和cpu2上的操作如何来组合,只要满足某个cpu上的各种操作是按顺序执行的(p1发生在p2之前,p2发生在p3之前),那么得到的结果,就是满足顺序一致性的。
线性一致性指的是,对于不同处理器上的任意操作A、B。如果A的完成时间小于B的开始时间,那么B一定可以看到A的结果。
共识算法,比如raft。有3种方案:
当ZooKeeper只有写操作的时候,ZooKeeper满足线性一致性。
当ZooKeeper有读写操作的时候,ZooKeeper满足顺序一致性。比如说对于同一个客户端发起的各种读写请求,客户端可以认为是按发起顺序来完成的(中间不可以有失败重连)。
线性一致性vs顺序一致性
线性一致性和 Raft