Windows“系统服务”,而不是“web服务”性能

问题描述:

我们有一个图像处理工作流产品。通常可以通过我们在工作中的处理来运行10,000-> 100,000个图像。不止一项工作可能正在等待。Windows“系统服务”,而不是“web服务”性能

目前,在我们本土图像库,托管的C++库,.N​​ET兼容执行所有的图像处理。它在用户的应用程序空间中运行。我的意思是,如果你登录为“PeteSmith”,图片将在Pete Smiths的账户上运行。

目前,我们一次只允许一次图像处理实例。客户要求我们提供新版本,允许同时运行多个实例,因此我们现在正在研究如何做到这一点。

得到处理掉的想法“用户占”和使用“系统帐户”做背景的处理是有吸引力。这很吸引人,因为windows服务通过操作系统事件自然管理,如登录和注销以及其他系统资源利用事件警报。

在我看来,所有我们需要做的是管理少数明确定义的事件,微软有据可查的。 这很好,很棒。但是,我需要了解的是,从客户的角度来看,我们的图像处理代码的服务植入意味着性能。 在他们看来,他们需要更多的处理,更快。

的问题,我应该如何思考tradoffs:

1)使用服务来运行作业与运行N个不同的“实例”只在皮特·史密斯(用户的)帐户运行的软件?

2)服务允许N个运行在比较N个不同的工作(不需要串扰)运行N个不同的“实例”只在皮特·史密斯(用户的)帐户运行的软件?

那么,图像处理需要一定数量的CPU和IO资源来处理。通过摆脱开始流程的方式和位置,这一数量不会发生变化。

服务与否之间的差异应该由所需的使用模式来管理。如果您希望应用程序继续自动处理图像,而不管是否有人登录,则应作为服务运行,但如果使用更像“选择图像,开始处理并等待结果”样式,则应该为客户端应用。

这并不完全清楚为什么你的客户想要运行多个实例。是否因为他们希望有一个实例在为另一个实例配置处理时执行繁重的处理工作?还是他们想运行多个实例,因为处理过程繁重,他们想要并行运行多个实例?

在这两个,我会考虑运行在应用后台线程的计算(一个或多个)的情况。如果不可能使用线程(可能是由于库中的某些全局共享状态),我的第二好选择是在新进程中开始每个处理并等待主进程的结果。

+0

“服务之间的差异或不应该由所需的使用模式” - >约定。 –