【问题标题】:.Net BackgroundService in Multi Server Environment.Net BackgroundService 在多服务器环境中
【发布时间】:2020-01-07 17:22:54
【问题描述】:

我根据此处的代码示例在WebAPI 中创建了BackgroundServicehttps://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice。这篇文章没有给出在多服务器环境中实现这一点的任何指导。我的用例涉及FileSystemWatcher 监控共享网络文件夹的更改。效果很好。

问题是会有多个这样的实例,我不希望所有实例都响应 - 只有一个。这是否可行,如果可行,我需要执行哪些步骤?我已经阅读了有关使用队列的信息,但我看不出这有什么帮助。此外,Hangfire 或类似名称也不是一个选项。我需要重新审视我的逻辑吗?

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api .net-core


    【解决方案1】:

    我可以想出多种方法来实现这一点,各有利弊。

    个性化服务

    如果您只需要一个实例,请将其实现为独立服务并仅部署在一台服务器上。诚然,您不能利用后台进程,但您真的需要吗?

    配置

    有一个配置值指示注册服务的位置。这可能是逗号分隔的值等等。不过,这将需要一些部署处理,以便在运行后台服务的服务器上将配置更改为 on。它甚至可以是一个逗号分隔值来指示服务器名称。

    将值保存在数据库中

    如果某处只有一个数据库,您可以让服务通过它进行通信。有一个表来存储哪个服务器执行后台服务,一旦第一个服务器锁定它,其他服务器就会休眠。一些保持活动逻辑也需要实现。

    老实说,我会选择解决方案一。可单独扩展、可部署且无需变通方法。

    后台服务,如果它是应用程序的一部分,则表明它应该在所有实例上运行。

    【讨论】:

      【解决方案2】:

      您需要采用微服务架构。

      • 在微服务器上将使用文件观察器并准备队列
      • 那么您可以使用另一个微服务器来处理该队列 msg(您可以使用多个实例进行扩展)
      • 您还创建了另一个服务/微服务来关注文件观察程序的运行状况并执行故障转移任务

      【讨论】:

      • 您能否为此提供任何链接/文档?我假设您的意思是“微服务器”而不是“微服务”:)
      • 微服务器此时可能不是一个选项。需要坚持使用 API
      • 我的意思是微服务
      • 你可以参考这个框架dotnet.github.io/orleans
      • 您说“在微服务器上将使用文件观察器并准备队列”。这些服务都是负载平衡的,因此每个微服务有多个服务器。它们都会响应文件观察者的操作,这是我需要避免的。
      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多