分布式文件系统的S3与EFS传播延迟?

时间:2018-07-11 02:16:13

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

我正在研究一个利用多个Docker容器的项目 为了进行比较,所有这些文件都需要访问相同的文件。重要的是,如果文件对一个容器可见,那么到其他容器对文件可见之间的时间最短。

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

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

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

(最后一点:如果我最终使用S3,则可能会使用同步将所有新文件放到存储桶中)

编辑:要回答Kannaiyan的问题,我要实现的目标是,将每个文件文件与每个其他文件进行比较至少一次。我无法确切地说出我要比较的内容,但是比较是通过执行一个封闭源代码的Linux二进制文件进行的,该二进制文件接收要比较的文件以及要与之比较的文件(分布式文件系统包含所有我要比较的文件)。它们需要放在容器中有两个原因:

  1. 二进制文件严重依赖于特定的文件系统设置,并且对其进行容器化可确保文件系统始终正确(我知道它是愚蠢的,但是二进制文件还是封闭源代码,无法解决)
  2. 该二进制文件仅在linux上运行,并且对其进行容器化使开发更容易在本地计算机上进行测试。

最后,随着我们收到的提交越来越多,文件只会随着时间累积。每个文件仅在添加到系统后才读取,并且从未修改。

1 个答案:

答案 0 :(得分:0)

最后,我认为原本要使用的方法过于复杂。相反,我最终使用S3存储所有文件,并使用DynamoDB充当最新存储文件密钥的缓存。仅在成功上传到S3之后,才将密钥添加到DynamoDB表中。每当运行比较操作时,容器就会同步所需的S3目录,然后检查DynamoDB以查看是否缺少任何文件。由于S3的读写后一致性,如果缺少任何文件,可以将它们从S3中拉出,而无需等待传播到所有S3缓存。这几乎可以立即传播分布式文件系统。