我有一个 .NET 函数可以进行一些复杂的计算。根据传入的参数,函数:
- 运行时间从几分钟到几个小时不等
- 在计算期间使用 100% 的单核
- 需要从 100 MB 到几 GB 的内存
- 将几 MB 到几 GB 的数据写入磁盘
- 可能抛出异常,包括 OutOfMemoryException
可以从函数参数化中准确预测要写入磁盘的数据量。没有简单的方法可以从函数参数化中预测其他资源需求。
我需要通过 Web 服务公开此功能。该服务需要:
- 灵活且优雅地报告计算过程中的任何问题
- 能够处理并发请求,只要有足够的资源来处理请求而不会显着降低性能,否则优雅地拒绝请求。
我打算通过让初始请求返回一个可以轮询进度的状态资源来处理长时间运行的性质。计算完成后,此资源将提供输出数据的位置,客户端可以下载(可能通过 FTP)。
我不太清楚如何最好地处理其他要求。我正在考虑某种“计算池”来维护计算器的实例并跟踪当前正在使用哪些实例,但我还没有弄清楚细节。
有类似情况经验的人有什么建议吗?只要解决方案可以在 Windows 机器上运行,所有技术选项都可以考虑。