这是一个非常普遍的问题。我对这一切都很陌生,我很难决定是否应该将某件事视为批处理作业或对微服务的简单请求。
假设用户可以将 30 秒的视频上传到 S3,出于某种原因,我们希望处理每个视频,以便提取视频的各个图像并将其再次存储在 S3 中。此外,我们并不真正关心延迟,最小化计算成本(即云账单)更重要。
您会使用 AWS Batch 之类的东西吗?或者您是否会部署一组微服务,通过响应 API 服务调用来进行处理,可能在 S3 和微服务之间使用消息队列?
两种选择似乎都可以完成工作,但是解决此类问题的正确或正确方法是什么?
我已阅读https://docs.aws.amazon.com/batch/latest/userguide/best-practices.html。对于短作业,它表示您需要合并作业,以便它们在理想情况下每个运行 3 到 5 分钟。然而,它并没有真正讨论什么应该不被视为批处理作业。
我觉得这个问题应该可以在谷歌上搜索,但我可能只是缺少正确的术语。
这是一个常见的架构决策,使用 AWS Batch 和基于微服务的方法(如 Lambda)之间的选择取决于多种因素,例如:
AWS 批量:
微服务:
至于您最关心的问题:
成本:如果最大限度地降低计算成本是更高的优先级,则 AWS Batch 对于批处理可能更具成本效益。微服务可能会产生更多的运营成本。
运营开销:微服务比 AWS Batch 需要更多的管理和运营工作,AWS Batch 是一项完全托管的服务。
延迟:如果延迟不是问题,AWS Batch 可以并行处理视频,但微服务可以对处理即时请求提供更多控制。
最终,没有一刀切的答案,这取决于您的具体要求。您甚至可以考虑采用混合方法,根据每个视频上传的特征,使用 AWS Batch 批量处理视频,并使用微服务进行实时或交互式处理。所以这对谷歌来说是一件困难的事情很大程度上是因为它非常依赖于你的具体要求。