通过远程访问单服务器应用程序的性能

时间:2020-03-06 14:35:24  来源:igfitidea点击:

这是我的设置:我为本地客户端计算机编写了一个.NET应用程序,该应用程序实现了也可以在网页上使用的功能。为了使此示例简单,假设客户端安装了一个软件,他可以在该软件中输入一些数据并取回一些数据。

这个想法是创建一个网页,该网页包含一个表单,用户可以在其中输入相同的数据并获得与上述相同的结果。由于该公司有可用的Web服务器,因此第一个想法是创建一个Mono Web服务,但是由于未知原因而被驳回。 "服务"不应作为Web服务运行,而应由PHP脚本调用。当前,这是通过PHP的shell_exec调用mono应用程序来实现的。

因此,现在我陷入了应用程序的单端口问题,该端口工作正常,但执行时间太长。我已经去除了所有不必要的dll,方法等,但是通过命令行调用应用程序并通过命令行参数提交所需的数据大约需要700毫秒。我们期望每秒约有10次点击,因此只有在为此任务设置大量服务器时才能使用。

我认为700m与每次启动应用程序的成本有关,因为如果我仅处理一次或者五百次请求,就时间而言并没有多大差异(我接受原始输入,稍微改变一下,然后执行每次带有"新"数据的500次迭代。从第二次迭代开始,处理时间下降到每次迭代大约1毫秒)

我的下一个想法是将Mono应用程序设置为远程服务器,这样它只需启动一次即可处理传入的请求。因此,我编写了另一个充当客户端的mono应用程序。调用客户端,让客户端将数据传递到服务器并检索结果现在需要344毫秒。这是更好的方法,但是仍然比我期望的和希望的要慢。

然后,根据此博客文章,我从头开始实施了一个新项目,并陷入了同样的性能问题。

问题是:我是否缺少与单一项目相关的东西,可以提高客户端/服务器的速度?尽管创建用于此任务的Web服务的想法被驳回了,但据说远程处理比Web Service快,在这种情况下Web Service在这种情况下的性能会更好(因为我不需要客户端应用程序来调用该服务)?

我本可以更清楚地说明这一点,但目前尚无法实现Web服务(请不要问为什么,我没有写要求;))

同时,我检查了确实是客户端的启动,这在远程处理方案中花费了大部分时间。

我可以想象从命令行通过管道访问服务器,这在我的场景中非常合适。我想这将使用套接字来完成吗?

解决方案

我相信在这种情况下使用远程处理不是理想的选择。但是,我们希望在服务器上安装单声道而不是每次都启动它的想法确实很可靠。

我们是否考虑过通过HTTP使用SOAP Web服务?这也将解决"网页"情况。

即使从我的经验来看,这可能会减慢速度,但自定义RESTful服务实现比远程处理要容易得多。

我们可以尝试使用AOT来减少启动时间。在.NET上,我们将使用ngen来实现此目的,在mono上,只需对应用程序使用的所有程序集执行mono --aot即可。

AOT的代码比JIT的代码慢,但是具有减少启动时间的优点。

我们甚至可以尝试使用AOT框架程序集,例如mscorlib和System。