【发布时间】:2018-01-24 12:34:53
【问题描述】:
我有一个驻留在服务器上的 asp.mvc 应用程序。从这个应用程序中,我想启动一个运行时间较长的进程,并且将是资源密集型操作。
所以我想要做的是我想要一些像 3 这样的用户代理,它将在 3 台机器上,并且这个用户代理将只使用它们各自机器的资源。
与 Hadoop 一样,我们有主节点和集群,其中任务在单个集群上运行,并且有 1 个主节点跟踪所有这些集群。
在 Azure 中,我们有运行任务的虚拟机,如果需要,Azure 可以通过启动新实例来自动水平扩展以加快任务速度。
所以我想创建这样的基础设施,我可以将我的任务从 mvc 应用程序提交给 3 个用户代理,我的应用程序将跟踪这些代理,比如哪个代理是免费的,哪个被占用,哪个不工作这个。
我想从每个用户代理接收进度并显示在我的 MVC 应用程序上。
.net 中是否有任何框架可以让我管理此后台运行操作(跟踪、启动、停止等),或者应该采用什么方法?
更新:我不想为这个长时间运行的操作放置大量服务器,而且我想跟踪这个长时间运行的进程,就像他们在做什么一样,错误在哪里等.
以下是我正在考虑的方法,我不知道哪种方法更有意义:
1) 以本地 2-3 台计算机的代理形式安装 Windows 服务,以利用 resp 资源并打开与该代理的 tcp/ip 连接,除非并且直到长时间运行的过程完成。
2) 使用 hangfire 在 IIS 线程之外运行这个长时间运行的进程,但我想这会给服务器带来负载。
我想知道上述方法可能存在的问题,以及是否有比这更好的方法。
【问题讨论】:
-
这是一个相当广泛的问题。我个人会为此使用一些消息队列(如rabbitmq) - 从MVC您只需发布描述要完成的任务的消息,而不关心有多少工人以及在哪里。列在队列中的workers和rabbitmq会以循环的方式向它们发送消息。
-
@Evk 我不想把这个处理负载放在我的服务器上。我想在客户端环境中做这个长时间的处理来释放我的服务器。我的服务器(我托管我的 mvc 应用程序的地方)将是只负责跟踪这个长期运行的进程(工作进度、完成、停止等)。我想有一个 wcf 服务,它将由 mvc 应用程序调用并且是免费的。这个 wcf 服务将在客户端环境中.那么 rabbitqueue 会在 wcf 中吗?
-
RabbitMQ 是消息总线。您从一个地方(asp.net 服务)发布消息并在另一个地方(位于不同服务器上的工作人员之一)接收它。这样您就可以在不接触 mvc 服务的情况下添加\删除工作人员,并且您不需要打扰工作人员所在的位置(即 - 不需要知道 IP 地址或其他任何内容)。
-
@Evk 在其中一个答案中提到hangfire 怎么样?
-
您到底想对流程的结果做什么?由于 asp.net 是 REST,你应该如何显示结果(Signalr?单独的网站?等等?)
标签: c# asp.net-mvc windows-services daemon hangfire