我有一个.NET函数可以执行一些复杂的计算。根据传入的参数,函数:
可以通过函数参数化准确预测要写入磁盘的数据量。没有简单的方法来预测函数参数化中的其他资源需求。
我需要通过Web服务公开此功能。这项服务必须是:
我打算通过让初始请求返回可以轮询进度的状态资源来处理长期运行的性质。计算完成后,此资源将提供输出数据的位置,客户端可以下载(可能通过FTP)。
我不清楚如何最好地处理其他要求。我正在考虑某种“计算池”,它维护计算器的实例并跟踪当前正在使用的计算器,但我还没有弄清楚细节。
有类似情况经验的人有什么建议吗?只要解决方案可以在Windows机器上运行,就可以考虑所有技术选项。
答案 0 :(得分:4)
我建议将您的应用程序分为两部分。
这种设计的原因是
1)处理托管应用程序(ASP.NET)中的工作负载相对困难,因为服务器(IIS)将管理资源,而在单独的应用程序中,您可以更直接地控制;
2)双层设计更具可扩展性 - 例如,稍后您可以轻松地将后端移动到另一台物理机(或多台机器)。
Web服务应该是无状态的 - 例如,在接受请求后,用户返回一些ID并使用此ID来轮询服务以获得结果。
后端服务器可能必须维护要处理的请求队列和一组处理它们的工作线程。工作人员应监控可用资源,注意不要使机器过载(当然,要妥善处理所有可能的错误情况)。
答案 1 :(得分:2)
虽然您可能希望提供Web服务接口,但Web服务通常不是为这类过程设计的。您可能想要做的是将请求转发到可以处理此问题的Windows服务(在专用计算机上)。 Windows服务不会被回收,您可以更好地控制该过程。
关于计算池:您可以尝试创建计算队列(例如数据库中的表)。这样,您可以在处理计算的专用机器上拥有多个Windows服务。这可以让您更容易扩展。