首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Paxos家族与数据一致性的关系

Paxos家族与数据一致性的关系
EN

Stack Overflow用户
提问于 2022-11-27 08:28:47
回答 1查看 25关注 0票数 1

Paxos算法是一种一致性算法,在分布式数据库系统中起着至关重要的作用。它可以用来使分布式系统选择相同的方案。数据一致性是数据库系统中的一个大问题。其他人认为在许多分布式系统中使用Paxos或raft来确保数据的一致性。我不同意他们的看法。

我的第一个问题是日志追加是否只是一个Paxos实现。我们使用相同的日志来确保一致性。日志复制或数据复制是保持数据一致性的最简单方法吗?网络传播是两者之间的显著差异吗?

我们能把Paxos家族看作一个一致性算法吗?如果没有,我们如何确保分布式系统中的数据一致性?(在我看来,Paxos只是一种一致的算法,而不是一致的算法)

在分布式系统中,我们何时以及为什么要使用Paxos?我们是否使用Paxos来实现高系统可用性。

我非常感谢你能给我的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 19:01:55

协商一致的algs (paxos、raft等)允许一组节点就某件事达成一致;例如,节点可能就一系列日志事件达成一致。如果有一个事件序列e1,e2,.,en -那么集群中运行协商一致算法的所有节点最终都会得到相同的序列。我们称这个序列为“日志”。

在协商一致运行的集群中的节点中,日志是最终一致的数据结构。最终的一致性来源于这样一个事实:任何特定的节点都可以从集群中分离出来--当该节点返回时,该节点最终将接收日志的所有事件(按相同的顺序)。

我们可以将日志作为数据库系统的一部分--每一次数据突变(插入、更新、删除)都将首先写入日志,然后应用到一些本地数据副本中进行优化。因此,如果客户端将在其中一个节点上查询数据库,则操作最终仍然是一致的--与前一段中的情况相同。

让我们来定义什么是强一致性。有几个定义,我选择使用这个定义:在完成更新之后,下面的每一个读取都会看到更新后的数据。

运行协商一致协议的集群可以用作强一致的系统。为了实现这一点,这些系统使用“可线性读取”。用一个例子更容易解释它是如何工作的:

  1. 假设我们有一个由三个节点组成的集群运行raft,节点A是领头羊,C是追随者
  2. ,更新到A:“将变量x设置为1"
  3. A将使用协商一致协议在客户端要读取x的值时获得多数同意x=1
  4. ;他们将不得不使用可线性读取(而不是直接到任何节点并请求值)
  5. 客户端将发送到A“读取值x”
  6. ,A将此事件发送到B,C;目标是达成一个共识,即在事件被大多数人接受后,可以将该读取事件写入日志
  7. ,A可以得出结论,它们拥有数据的最新视图--A确信在事件"x=1“和”读取x的值“之间没有其他影响x的事件;因此,x的值是已知的,
  8. A将把x=1返回给客户端

上面的例子是非常一致的--在整个系统接受x=1之后,每次下一次读取都会得到这个值。这种方法有助于实现高度一致的高可用性系统。

回到你的具体问题:

我的第一个问题是日志追加是否只是一个Paxos实现。我们使用相同的日志来确保一致性。日志复制或数据复制是保持数据一致性的最简单方法吗?网络传播是两者之间的显著差异吗?

如前所述,Paxos/raft/etc只是允许节点在某些方面达成一致的协议。我们可以使用该日志构建一个具有强一致性的数据存储,使用可线性读取。

我们能把Paxos家族看作一个一致性算法吗?如果没有,我们如何确保分布式系统中的数据一致性?(在我看来,Paxos只是一种一致的算法,而不是一致的算法)

是的,帕克斯是一种一致的算法。它可用于建立一个具有所期望的一致性水平的系统。但这并不是唯一的应用。典型的例子是领导人选举--节点必须就谁是领导人达成一致(建立共识)。

在分布式系统中,我们什么时候和为什么要使用Paxos?我们是否使用Paxos来实现高系统可用性。

有几个流行的algs:筏子,zab。例如,ZooKeeper正在使用ZAB。他们将其用于高可用性和共识。但是通常,当一个系统有几个节点时,这些algs就会被使用,而这些节点需要在某些方面达成一致。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74588559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档