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