Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 分布式文件系统的S3与EFS传播延迟?_Amazon Web Services_Docker_Amazon S3_Amazon Efs_Distributed Filesystem - Fatal编程技术网

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

Amazon web services 分布式文件系统的S3与EFS传播延迟?,amazon-web-services,docker,amazon-s3,amazon-efs,distributed-filesystem,Amazon Web Services,Docker,Amazon S3,Amazon Efs,Distributed Filesystem,我正在做一个利用多个docker容器的项目 它们都需要访问相同的文件以进行比较。重要的是,如果一个文件对一个容器可见,那么它对其他容器可见的时间间隔很短 以下是我试图避免的情况: 假设我们有两个文件A和B,以及两个容器1和2。文件A大致同时上载到文件系统并提交以进行比较。紧接着,文件B也会发生同样的情况。紧接着,文件A对容器1可见,文件B对容器2可见。由于文件在分布式文件系统上的传播方式,文件B对容器1不可见,文件A对容器2不可见。容器1现在被告知将文件A与所有其他文件进行比较,容器2被告知将B

我正在做一个利用多个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 -尝试确保每个文件都与其他文件进行比较是非常重要的,因此传播延迟肯定是最重要的因素

(最后一点注意:如果我使用end-up-using S3,我可能会使用sync将所有放入存储桶的新文件拉下来)

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

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

  • 最后,随着我们收到越来越多的提交,这些文件只会随着时间的推移而积累。每个文件只从系统中读取,在添加到系统中后从未修改过。

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

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