我正在设计一个系统,在其中要使用AWS和S3存储桶的无服务器功能。
我在S3存储桶中有一些Word文件,并希望对文件进行一些转换(此代码将由我编写,我想使用无服务器功能将其托管,假设此服务的名称为{{ 1}}服务)并生成新文件。
假设用户发送了一个转换文件的请求,并且该请求中包含了文件名。
现在我有以下问题:
FileTransformation
在请求中给出了10个文件名,而另外一个user1
也给出了一个要求再提供15个文件。我不希望出现“一旦user2
请求完成然后user1
请求应该开始”的情况。我该如何处理? user2
和user1
询问了他们的请求状态,如何报告?这需要对我的user2
服务做些额外的事情吗?在开发上述服务时是否应该考虑任何AWS服务?
我认为我们可以使用消息代理将请求发送到服务。 CloudWatch用于错误报告或其他内容。
答案 0 :(得分:2)
您的设计可能如下所示:
我不希望这些服务做顺序的事情
当您使用无服务器的AWS Lambda时,您的Lambda将运行多个并发实例(您可以使用保留的并发执行值限制和/或保留)。
假设user1和user2询问他们的请求状态
为此,您可能需要实现一个DynamoDB来保存每个请求的状态。触发Lambda时,它可以用状态为“进行中”的方式写入DynamoDB,然后可以将其相应地更新为“完成”或“失败”。然后,您将拥有一个单独的API,该API可在用户请求更新时读取该表
如果请求在两次之间失败,如何通知用户?
您可以上传带有前缀的文件,该前缀包含用户的电子邮件或任何其他通知介质,例如:files/userA/userA@test.com/file.doc
。这样,当Lambda触发并开始处理时,如果处理失败,它将知道将结果发送到的电子邮件。
编辑: 基于注释,如果您想要一种方法,其中文件已存在于S3中并且用户请求处理,则只需将用户的消息发送到SQS队列,然后为其使用Lambda触发器(它将触发并发执行)。 Lambda处理队列,而不是顺序的。或者,您可以让API直接调用Lambda,然后让用户等待(如果处理相对较快,这也可以)