分布式、一致的键值存储系统在处理并发请求时如何返回最新键的基础知识?

Posted

技术标签:

【中文标题】分布式、一致的键值存储系统在处理并发请求时如何返回最新键的基础知识?【英文标题】:Basics to how a distributed, consistent key-value storage system return the latest key when dealing with concurrent requests? 【发布时间】:2022-01-13 17:34:49 【问题描述】:

我正在快速了解分布式系统(为即将到来的面试而学习),特别是分布式系统如何为内存中管理的分布式、一致的键值存储系统工作的基础知识。

如果没有问题的话,我很想回答我的具体问题:

#1 假设我们有 5 台服务器负责充当读者,而我有一名作家。当我将值“foo”写入键“k1”时,我知道它必须传播到所有这些服务器,以便它们都为键 k1 存储值“foo”。这是正确的,还是作者只写信给大多数人(法定人数)才能使它起作用?

#2 在上面的 #1 发生之后,假设同时对 k1 进行读取,并且写入以将 'foo' 替换为 'bar',但并非所有服务器都更新为 'bar.这意味着有些是“foo”,有些是“bar”。如果我有很多并发读取,可以想象有些会返回 'foo' 和一些 'bar',因为它还没有在所有地方更新。

当我们谈论最终一致性时,这是意料之中的,但是如果我们谈论强一致性,你如何避免上面的#2?我不断看到有关法定人数和时间戳的内容,但在高层次上,是否有某种中介可以找出正确的值是什么?只是想先了解一个基本概念,然后再深入了解。

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

在做更多的研究中,我发现Paxos或Raft等“共识算法”是这里正确的解决方案。这个想法是你的节点需要就价值达成共识。如果你阅读 Paxos 或 Raft,你会学到所有你需要的东西——在这里解释起来很复杂,但是那里有视频/资源可以很好地涵盖这一点。

我发现有帮助的另一件事是了解有关 Dynamo 和 DynamoDB 的更多信息。他们也处理主题,虽然不是高度一致/分布。

希望这对某人有所帮助,如果您想了解更多详细信息,请给我发消息!

【讨论】:

【参考方案2】:

阅读CAP theorem 将帮助您解决问题。你在这个问题中寻找一致性和网络分区,所以你必须牺牲可用性。系统需要阻塞并等待,直到所有节点完成写入。换句话说,在所有节点都更新之前无法读取更改。

在理论计算机科学中,CAP 定理,也称为布鲁尔定理 计算机科学家 Eric Brewer 提出的定理指出,任何 分布式数据存储只能提供以下三种中的两种 保证:

    一致性每次读取都会收到最近的写入或错误。 可用性 每个请求都会收到一个(非错误)响应,没有 保证它包含最近的写入。 分区容差系统继续运行,尽管有任意数量 节点之间的网络丢弃(或延迟)的消息数量。

【讨论】:

以上是关于分布式、一致的键值存储系统在处理并发请求时如何返回最新键的基础知识?的主要内容,如果未能解决你的问题,请参考以下文章

etcd

服务发现系统etcd之安装和使用

etcd是啥东西?它和ZooKeeper有啥区别

分布式缓存主要用在高并发环境下的作用?

ETCD服务

etcd使用