具有许多用户的文件名列表 S3

Filename List S3 with many users

我有一个 Android 和 IOS 应用程序可以将图像(每分钟约 15,000 张)上传到 AWS S3 存储桶,一切正常,但我需要在网络中处理这些图像由 2 到 50 个名为 'Monitores' 的不同用户使用的应用程序,当此类用户登录并开始处理图像时,该应用程序会扫描 S3 存储桶中的文件名,例如:

$recibidos = Storage::disk('s3recibidos');
$total_archivos = $recibidos->allfiles();

这会生成一个数组,其中的文件存储在调用路由时,如果我将它与一个用户一起用于进程则没有问题,因为进程只有一次,但如果我有 2 次怎么办还是更多的用户触发这个过程?该过程没有检索到确切的列表,但我认为许多未处理的文件将被复制。

文件名的过程是存储在数据库中并移动到子目录。

例如:

我在 AWS S3 存储桶中有 1000 个文件,用户 1 调用了该进程,因此该数组将有 1000 个文件名要处理,现在处理这些文件的时间大约为 3 分钟,因此在该进程完成 1000 个新文件之前被添加到 AWS S3 存储桶中,这些文件不在 user1 数组中,然后 user2 登录并开始处理,所以现在 AWS S3 有新文件和旧文件,然后在获取新数组时获取一些旧文件名(那些不是进程),事实上,当 user2 处理文件时,其中一些文件不可用,因为 user1 进程已经完成了工作。

我在这两件事上需要帮助:

1.- 如何处理进程。 2.- 我如何使用通配符,因为最后一个过程更改了 S3 中文件的文件名,所以我需要处理的文件名列表具有其可执行格式。

感谢任何建议

我对你的过程有点困惑,但我们假设:

  • 您有大量传入图片
  • 您需要对每个实例执行一些操作

有两种推荐的方法可以做到这一点:

选项 1:无服务器

  • 配置 Amazon S3 存储桶 以在存储桶中创建新对象时触发 AWS Lambda 函数
  • 创建一个 AWS Lambda 函数 作为工作人员 -- 它接收有关每个文件的信息,然后处理文件
  • AWS Lambda 将自动扩展 到运行 多个并行的 Lambda 函数。默认值为最多 1000 个并发 Lambda 函数,但可以根据要求增加。

选项 2:传统

  • 创建一个 Amazon SQS 队列 来存储要处理的图像的详细信息
  • 配置 Amazon S3 存储桶 以在存储桶中创建新对象时向 SQS 队列发送事件
  • 使用 Amazon EC2 实例 到 运行 多个 worker
  • 每个worker从队列中读取文件信息,处理图像,然后从队列中删除消息。然后重复,从队列中拉出下一条消息。
  • 根据需要扩展 EC2 实例的数量and/or 工作人员

这两种方法都需要工作人员一次处理 一个图像文件,因此您不会遇到在不断添加图像的同时维护列表的问题。它们还具有高度可扩展性,无需更改代码。