【问题标题】:S3 vs EFS propagation delay for distributed file system?分布式文件系统的 S3 与 EFS 传播延迟?
【发布时间】:2018-07-11 02:16:12
【问题描述】:

我正在开发一个使用多个 docker 容器的项目 所有这些都需要访问相同的文件以进行比较。重要的是,如果一个文件对一个容器可见,那么在它对其他容器可见之间的时间最短。

作为一个例子,我试图避免的情况是: 假设我们有两个文件 A 和 B,以及两个容器 1 和 2。文件 A 都上传到文件系统并大致同时提交以进行比较。紧接着,同样的情况发生在文件 B 上。文件 A 对容器 1 可见且文件 B 对容器 2 可见之后不久。由于文件在分布式文件系统上传播的方式,文件 B 对容器 1 不可见,并且文件 A 对容器 2 不可见。容器 1 现在被告知将文件 A 与所有其他文件进行比较,容器 2 被告知将 B 与所有其他文件进行比较。由于传播延迟,A 和 B 从未相互比较。

我正在尝试在 EFS 和 S3 之间做出决定,以用作存储所有这些文件的地方。我想知道哪个更适合我的需求(或者是否有我不知道的第三种选择)。

文件/容器的特点是: - 所有文件都是平均大小为 2kb 的小文本文件(尽管很少有可能是 10kb) - 目前总共有 20mb 的文件,但我预计到今年年底会有 1gb - 这些容器不是成群结队的 - 每个比较的输出已经上传到 S3 - 确保每个文件都与其他文件进行比较非常重要,因此传播延迟绝对是最重要的因素

(最后一点:如果我最终使用 S3,我可能会使用同步来下拉所有放入存储桶的新文件)

编辑:为了回答 Kannaiyan 的问题,我想要实现的是将每个文件文件与其他文件至少比较一次。我不能准确地说出我在比较什么,但是比较是通过执行一个封闭源代码的 linux 二进制文件来进行的,该二进制文件接受你想要比较的文件和你想要比较的文件(分布式文件系统保存所有我要比较的文件)。它们需要放在容器中,原因有两个:

  1. 二进制文件在很大程度上依赖于特定的文件系统设置,并且将其容器化可确保文件系统始终正确(我知道它很愚蠢,但二进制文件又是封闭源代码,无法绕过它)
  2. 该二进制文件仅在 linux 上运行,并且将其容器化使得在本地机器上进行测试时开发更加容易。

最后,随着我们收到越来越多的提交,文件只会随着时间的推移而累积。每个文件加入系统后只读取,不修改。

【问题讨论】:

  • 你能解释一下你想要达到的目标吗?为什么需要比较?为什么在容器中需要它们?你打算如何处理这些文件?
  • @Kannaiyan 我添加了一些编辑来解决您的问题!
  • 我觉得可能会有一个“正确”的答案,但这与所讨论对象的大小和数量以及您阅读它们的频率有关。 EFS 有两个紧密耦合的组件,即存储大小和随着时间推移的整体吞吐量——当您向其中 添加 数据时,它会变得越来越快,因此您存储的越少,它就越慢(再次阅读,完全正确)。我们讨论了多少数据,读取频率如何?

标签: amazon-web-services docker amazon-s3 amazon-efs distributed-filesystem


【解决方案1】:

最后,我认为我最初采用的方法太复杂了。相反,我最终使用 S3 来存储所有文件,并使用 DynamoDB 作为最近存储文件的键的缓存。只有在成功上传到 S3 后,密钥才会添加到 DynamoDB 表中。每当运行比较操作时,容器会同步所需的 S3 目录,然后检查 DynamoDB 以查看是否缺少任何文件。由于 S3 的 read-after-write 一致性,如果任何文件丢失,它们可以从 S3 中拉出,而无需等待传播到所有 S3 缓存。这允许一个几乎即时传播的分布式文件系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多