Paxos算法是一种一致性算法,在分布式数据库系统中起着至关重要的作用。它可以用来使分布式系统选择相同的方案。数据一致性是数据库系统中的一个大问题。其他人认为在许多分布式系统中使用Paxos或raft来确保数据的一致性。我不同意他们的看法。
我的第一个问题是日志追加是否只是一个Paxos实现。我们使用相同的日志来确保一致性。日志复制或数据复制是保持数据一致性的最简单方法吗?网络传播是两者之间的显著差异吗?
我们能把Paxos家族看作一个一致性算法吗?如果没有,我们如何确保分布式系统中的数据一致性?(在我看来,Paxos只是一种一致的算法,而不是一致的算法)
在分布式系统中,我们何时以及为什么要使用Paxos?我们是否使用Paxos来实现高系统可用性。
我非常感谢你能给我的任何帮助。
发布于 2022-11-27 19:01:55
协商一致的algs (paxos、raft等)允许一组节点就某件事达成一致;例如,节点可能就一系列日志事件达成一致。如果有一个事件序列e1,e2,.,en -那么集群中运行协商一致算法的所有节点最终都会得到相同的序列。我们称这个序列为“日志”。
在协商一致运行的集群中的节点中,日志是最终一致的数据结构。最终的一致性来源于这样一个事实:任何特定的节点都可以从集群中分离出来--当该节点返回时,该节点最终将接收日志的所有事件(按相同的顺序)。
我们可以将日志作为数据库系统的一部分--每一次数据突变(插入、更新、删除)都将首先写入日志,然后应用到一些本地数据副本中进行优化。因此,如果客户端将在其中一个节点上查询数据库,则操作最终仍然是一致的--与前一段中的情况相同。
让我们来定义什么是强一致性。有几个定义,我选择使用这个定义:在完成更新之后,下面的每一个读取都会看到更新后的数据。
运行协商一致协议的集群可以用作强一致的系统。为了实现这一点,这些系统使用“可线性读取”。用一个例子更容易解释它是如何工作的:
上面的例子是非常一致的--在整个系统接受x=1之后,每次下一次读取都会得到这个值。这种方法有助于实现高度一致的高可用性系统。
回到你的具体问题:
我的第一个问题是日志追加是否只是一个Paxos实现。我们使用相同的日志来确保一致性。日志复制或数据复制是保持数据一致性的最简单方法吗?网络传播是两者之间的显著差异吗?
如前所述,Paxos/raft/etc只是允许节点在某些方面达成一致的协议。我们可以使用该日志构建一个具有强一致性的数据存储,使用可线性读取。
我们能把Paxos家族看作一个一致性算法吗?如果没有,我们如何确保分布式系统中的数据一致性?(在我看来,Paxos只是一种一致的算法,而不是一致的算法)
是的,帕克斯是一种一致的算法。它可用于建立一个具有所期望的一致性水平的系统。但这并不是唯一的应用。典型的例子是领导人选举--节点必须就谁是领导人达成一致(建立共识)。
在分布式系统中,我们什么时候和为什么要使用Paxos?我们是否使用Paxos来实现高系统可用性。
有几个流行的algs:筏子,zab。例如,ZooKeeper正在使用ZAB。他们将其用于高可用性和共识。但是通常,当一个系统有几个节点时,这些algs就会被使用,而这些节点需要在某些方面达成一致。
https://stackoverflow.com/questions/74588559
复制相似问题