gpt4 book ai didi

c# - .Net 框架来管理单独机器上的后台运行进程

转载 作者:太空狗 更新时间:2023-10-29 19:38:26 26 4
gpt4 key购买 nike

我有一个驻留在服务器上的 asp.mvc 应用程序。我想从这个应用程序启动一个运行时间有点长且将是资源密集型操作的进程。

所以我想做的是我想要一些像 3 这样的用户代理,它将存在于 3 台机器上,并且这个用户代理将只使用它们各自机器的资源。

就像在 Hadoop 中一样,我们有主节点和集群,其中任务在单个集群上运行,并且有 1 个主节点跟踪所有这些集群。

在 Azure 中,我们有运行任务的虚拟机,如果需要,Azure 可以通过启动新实例来自动横向扩展以加快任务速度。

所以我想创建这样的基础设施,我可以从 mvc 应用程序将我的任务提交给 3 个用户代理,我的应用程序将跟踪这个代理,比如哪个代理空闲,哪个被占用,哪个不工作,比如这个。

我想从每个用户代理接收进度并显示在我的 MVC 应用程序上。

.net 中是否有我可以管理后台运行操作(跟踪、启动、停止等)的任何框架,或者应该采用什么方法?

更新: 我不想为这个长时间运行的操作增加服务器负载,而且我也想跟踪这个长时间运行的过程,比如他们在做什么,错误在哪里等.

以下是我正在考虑的方法,我不知道哪种方法更有意义:

1) 在本地 2-3 台计算机上以代理的形式安装 Windows 服务,以利用 resp 资源并打开与此代理的 tcp/ip 连接,除非并直到长时间运行的过程完成。

2) 使用 hangfire 在 IIS 线程之外运行这个长时间运行的进程,但我想这会给服务器带来负载。

我想知道上述方法可能存在的问题,以及是否有比这更好的方法。

最佳答案

Hangfire确实是处理后台任务的绝佳解决方案,我们已在我们的项目中广泛使用它。

我们在单独的 IIS 服务器上设置了 MVC 应用程序,它也是一个 hangfire 客户端,只是将需要由 hangfire 服务器执行的作业排入队列。然后我们有两个 hangfire server 实例,它们是 windows 服务应用程序。因此实际上 MVC 应用程序服务器上没有负载来处理后台作业,因为它是由单独的 hangfire 服务器处理的。

hangfire 的一个非常有用的功能是其开箱即用的仪表板,它允许您监视和控制后台作业处理的任何方面,包括统计信息、后台作业历史记录等。

在应用程序和 hangfire 服务器中配置 hangfire

public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("<connection string or its name>");

app.UseHangfireDashboard();
app.UseHangfireServer();
}

请注意,您使用相同的连接字符串。仅当您想将该实例用作 hangfire 服务器时才使用 app.UseHangfireServer(),因此在您的情况下,您希望从应用程序服务器配置中省略此行并仅在 hangfire 服务器中使用。还可以在实例中使用 app.UseHangfireDashboard(),它将为您的 hangfire 仪表板提供服务,这可能是您的 MVC 应用程序。

当时我们使用 Windows 服务 完成了它,但如果现在必须这样做,我想使用 Azure worker role甚至现在更好Azure Web Jobs托管我的 hangfire 服务器,并轻松管理诸如自动缩放之类的事情。

请引用 hangfire overviewdocumentation了解更多详情。

关于c# - .Net 框架来管理单独机器上的后台运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48422631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com