我拥有哪个一致性模型?

问题描述 投票:0回答:1

我已经在Redis上实现了复制的键/值存储。我有被动复制,其中所有写和读请求都转发给领导者,领导者总是返回为密钥编写的最后一个值。系统使用仲裁。因此,即使有故障的节点或具有网络分区的节点也可以使用。在这种情况下,这些节点中的值不一致。但这并不能防止系统返回最新的值。我有最终的一致性模型还是严格的模型?谢谢

replication distributed-computing distributed
1个回答
0
投票

您提到过,这是一个基于仲裁的系统,其中一个节点为领导者。读写请求始终转发给领导者。

为了简单起见,我们假设系统中有5个节点,其中一个是领导者。其他4个节点是辅助节点。

通常基于仲裁的系统在共识协议上工作。因此,在5个节点中,如果3个节点具有最新值,则始终返回最新值就足够了。

这是应该如何工作的方式

  1. 领导者首先更新其数据库中的键/值
  2. 将请求转发到其余4个节点,这些节点是辅助节点
  3. 领导者至少等待2个辅助节点来确认他们已经更新了数据库中的最新键/值。这意味着在5个节点中,至少3个节点具有最新的更新值。
  4. 如果领导者在指定时间段内未从至少两个辅助节点获得响应(请求超时),那么领导者将失败返回给客户端,并且客户端需要重试。

因此,仅当5个节点中的3个具有最新值时,写入请求才会成功。在任何时候,其中两个节点可能具有最新值,也可能没有,并可能随后出现。

对于读取,领导者(具有最新的键/值)始终返回响应。

当引导机器由于某些问题而无响应时会发生什么? (例如对于网络错误)

  1. [通常,当当前领导者由于某些错误而无法处理请求时,这些系统将具有领导者选举协议。
  2. 将从具有最新更新的中学中选出一位新的负责人。因此,新当选的领导者应具有最新的更新状态,并应开始为阅读请求提供最新的一组值。

您的系统严格一致。

© www.soinside.com 2019 - 2024. All rights reserved.