在 AWS 中托管的 .NET 应用程序中横向扩展 CPU 密集型任务

Scaling out CPU-intensive tasks in .NET application hosted in AWS

我的任务是呈现大型复杂的 PDF 报告,其中包括复杂的图表、SVG 图像、表格和其他数据。处理 1 个请求最多需要 10 分钟才能执行。有时我们必须在有限的时间范围内处理数百个此类请求。执行这项工作的网络应用程序目前托管在单台机器上。服务是完全无状态的。一台机器上的并行度几乎没有影响,所以我们正在寻找水平扩展它的方法。

我使用 AWS 来托管我们的服务。目前我考虑将带有此服务的 EC2 实例包括到手动或自动缩放组中,可能需要 运行 个实例。我还考虑添加一个队列来承载所有请求。这样所有实例都可以使用 1 个队列,并且每个实例都可以处理自己的请求(处理请求 = 呈现 1 个 PDF 报告)。

您能否推荐一些开箱即用的方法/最佳实践来扩展CPU 密集型工作以使用 AWS 的无状态 .NET 应用程序。

提前致谢!

你的想法是对的。处理报告的请求应放入 SQS 队列中。工作 EC2 实例可以使用队列中的这些请求并生成报告。将工作 EC2 实例放入配置为根据 SQS 队列的大小扩展 up/down 的自动扩展组。

在较高级别开始,将您的代码修改为来自 SQS 队列的 publish/consume 请求,使用此代码创建一个实例,然后从该实例创建一个 AMI。在自动缩放组中使用此 AMI。

最佳做法是对实例使用 IAM 角色来管理访问队列的 AWS 密钥(如果您想将报告保存到 S3 或对它们执行其他操作)。