我正在设计一个要使用AWS和S3存储桶的无服务器功能的系统。
我在S3存储桶中有一些Word文件,并希望对文件进行一些转换(此代码将由我编写,我想使用无服务器功能将其托管,假设此服务的名称为FileTransformation
服务)并生成新文件。
假设用户发送了一个转换文件的请求,并且该请求包含了文件名。
现在我有以下问题:
user1
在请求中指定了10个文件名,而另一个user2
也给出了另外15个文件的请求。我不希望出现类似“一旦完成user1
请求,然后就应该开始user2
请求”的问题。我该如何处理? user1
和user2
询问了他们的请求状态,如何报告?这需要在FileTransformation
服务中完成一些额外的工作吗? 开发上述服务时,我应该考虑任何AWS服务吗?
我认为我们可以使用消息代理将请求发送到服务。 CloudWatch用于错误报告等。
最佳答案
您的设计可能如下所示:
I don't want the services to do sequential stuff
当您使用无服务器的AWS Lambda时,您的Lambda将运行多个并发实例(您可以使用保留的并发执行值限制和/或保留)。
Suppose the user1 and user2 asked for status of their request
为此,您可能需要实现一个DynamoDB来保存每个请求的状态。触发Lambda时,它可以状态为“进行中”的状态写入DynamoDB,然后可以将其相应更新为“完成”或“失败”。然后,您将拥有一个单独的API,该API在用户请求更新时都会读取该表
How can i notify user if request fails in between?
您可以上传包含用户电子邮件或任何其他通知媒体的前缀的文件,例如
files/userA/userA@test.com/file.doc
。这样,当Lambda触发并开始处理时,如果处理失败,它将知道将结果发送到的电子邮件。编辑:
根据注释,如果您想要一种方法,其中文件已存在于S3中,并且用户请求处理,则只需将用户的消息发送到SQS队列,然后为其使用Lambda触发器(它将触发并发执行)。 Lambda处理队列,而不是顺序的。或者,您可以让API直接调用Lambda,然后让用户等待(如果处理相对较快,这也应该很好)
关于amazon-web-services - 如何架构文件的无服务器转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422774/