我正在开发一个使用多个 docker 容器的项目,这些容器都需要访问相同的文件以进行比较。重要的是,如果一个文件对一个容器可见,那么在它对其他容器可见之间的时间最短。
举个例子,我试图避免这种情况:假设我们有两个文件 A 和 B,以及两个容器 1 和 2。文件 A 都上传到文件系统并大致同时提交以进行比较。紧接着,同样的情况发生在文件 B 上。文件 A 对容器 1 可见且文件 B 对容器 2 可见之后不久。由于文件在分布式文件系统上传播的方式,文件 B 对容器 1 不可见,并且文件 A 对容器 2 不可见。容器 1 现在被告知将文件 A 与所有其他文件进行比较,容器 2 被告知将 B 与所有其他文件进行比较。由于传播延迟,A 和 B 从未相互比较。
我正在尝试在 EFS 和 S3 之间做出决定,以用作存储所有这些文件的地方。我想知道哪个更适合我的需求(或者是否有我不知道的第三种选择)。
文件/容器的特点是: - 所有文件都是平均大小为 2kb 的小文本文件(尽管很少有 10 kb) - 目前总共有 20mb 的文件,但我预计到今年年底会有 1gb - 这些容器不是一个群体 - 每个比较的输出都已经上传到 S3 - 确保每个文件都与其他每个文件进行比较非常重要,因此传播延迟绝对是最重要的因素
(最后一点:如果我最终使用 S3,我可能会使用同步来下拉所有放入存储桶的新文件)
编辑:为了回答 Kannaiyan 的问题,我想要实现的是将每个文件文件与其他文件至少比较一次。我不能准确地说出我在比较什么,但是比较是通过执行一个封闭源代码的 linux 二进制文件来进行的,该二进制文件接收你想要比较的文件和你想要比较的文件(分布式文件系统保存所有我要比较的文件)。它们需要放在容器中,原因有两个:
- 二进制文件严重依赖于特定的文件系统设置,并将其容器化可确保文件系统始终正确(我知道它很愚蠢,但二进制文件又是封闭源代码,没有办法绕过它)
- 该二进制文件仅在 linux 上运行,并且将其容器化使得在本地机器上进行测试的开发更容易。
最后,随着我们收到越来越多的提交,文件只会随着时间的推移而积累。每个文件在添加到系统后只读取并且从不修改。