我的任务是渲染包含复杂图表,SVG图像,表格和其他数据的大型复杂PDF报告。处理1个请求最多需要10分钟才能执行。有时我们必须在有限的时间范围内处理数百个此类请求。执行此工作的Net应用程序当前托管在单台计算机上。服务完全是无国籍的。 1台机器上的并行性几乎没有影响,因此我们正在寻找水平扩展的方法。
我使用AWS来托管我们的服务。目前我考虑将EC2实例与此服务一起包含在手动或自动缩放组中,并且可以运行所需数量的实例。此外,我考虑添加一个将承载所有请求的队列。这样所有实例都可以使用1个队列,每个实例都会处理自己的请求(处理请求=渲染1个PDF报告)。
请您推荐使用AWS为无状态.NET应用程序扩展CPU密集型工作的一些现成方法/最佳实践。
提前谢谢!
答案 0 :(得分:0)
你有正确的想法。处理报告的请求应放入SQS队列。工作人员EC2实例可以从队列中使用这些请求并生成报告。将worker EC2实例放入一个自动扩展组,该组配置为根据SQS队列的大小向上/向下扩展。
在高级别开始时,修改代码以发布/使用来自SQS队列的请求,使用此代码创建实例,然后从此实例创建AMI。在自动缩放组中使用此AMI。
最佳做法是使用实例的IAM角色来管理AWS密钥以访问队列(如果您希望将报告持久保存到S3或使用它们执行其他操作)。