我目前有一个有两个lambda的服务。第一个lambda由来自API网关的请求触发,它将在请求中获得的文件复制到S3中的某个位置。根据它在请求中获得的文件类型,第一个lambda将它们放在S3中的不同文件夹中。
第二个lambda每10分钟触发一次,它扫描s3桶中的文件,获取文件并对文件执行一些操作,然后将其复制回S3桶中的另一个文件夹。
我面临的问题是,当第二个lambda被触发时,它正在处理来自特定文件夹的文件,而该文件夹中的文件数量太多,其他文件夹中的文件在当前文件夹中的所有文件都被处理之前根本不会被处理。
我如何有效地解决这个问题?我只想用lambdas解决这个问题。
我想到的一个解决方案是,让我们把第二个lambda说成一个消费者。有一个主使用者lambda,它的唯一任务是检查S3的每个文件夹中的文件数量,如果S3中有5个文件夹中有文件,则每个文件夹生成5个lambda来处理该文件夹中的文件。不过,我不知道这种做法是否可行或合乎成本效益。
还有一件事需要考虑的是,主使用者λ需要扫描的文件夹数量不会超过15个,最多只需要生成(或触发)其他15个次级兰巴达。而且每个文件中的文件数量在任何时候都可以高达20000个,由使用者lambda处理每个文件需要大约3-4分钟。
请告诉我我心目中的方法是否有效,或者是否有其他方法,请给我建议。
发布于 2022-06-04 23:30:46
我如何有效地解决这个问题?我只想用lambdas解决这个问题。
这就是你的问题和糟糕的架构。正确的方法是使用SQS队列来存储要处理的S3文件的元数据。为此,您将为不同的文件夹设置S3事件通知,这将填充SQS队列。队列将触发相应的lambdas以供进一步处理。您也可以使用一个SQS和lambda来完成这个任务,但是这是一个细节。
关键是,您应该使用SQS队列,并真正正确地架构您的应用程序,而不是继续使用糟糕的设计来“仅使用lambdas解决这个问题”。坚持糟糕的设计只会在将来带来更多的问题,比如解决方案的可伸缩性和可靠性。
https://stackoverflow.com/questions/72503350
复制相似问题