. Net BackgroundService в многосерверной среде - PullRequest
1 голос
/ 07 января 2020

Я создал BackgroundService в WebAPI на основе примеров кода здесь: https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/background-tasks-with-ihostedservice. Статья не дает никаких рекомендаций по реализации этого в многосерверной среде. Мой вариант использования включает FileSystemWatcher мониторинг общей сетевой папки на предмет изменений. Это прекрасно работает.

Проблема в том, что будет несколько экземпляров этого, и я не хочу, чтобы все экземпляры отвечали - только один. Возможно ли это, и если да, то какие шаги мне нужно осуществить? Я читал об использовании очередей, но не вижу, как это поможет. Кроме того, Hangfire или подобное не вариант. Нужно ли пересматривать мою логику c?

Ответы [ 2 ]

1 голос
/ 07 января 2020

вам нужно go с микросервисной архитектурой.

  • На микросервере будет использоваться средство просмотра файлов и подготовлена ​​очередь
  • , затем у вас может быть другой микросервер, который обрабатывает эту очередь сообщений (это можно масштабировать с несколькими экземплярами)
  • вы также создаете другой сервис / микросервис, чтобы следить за состоянием средства просмотра файлов и выполнять задачу восстановления после отказа
1 голос
/ 07 января 2020

Я могу придумать несколько способов добиться этого, с за и против.

Индивидуальная служба

Если вам нужен только один экземпляр этого, внедрите его как отдельную службу и разверните только на одном сервере. Правда, вы не можете использовать фоновые процессы, но вам действительно нужно?

Конфигурация

Есть значение конфигурации, указывающее, где зарегистрировать службу. Это могут быть значения, разделенные запятыми, и так далее. Это потребует некоторой обработки развертывания, чтобы изменить настройку на сервере, на котором работает фоновая служба. Это может быть даже значение, разделенное запятыми, для обозначения имен серверов.

Постоянное значение в дБ

Если где-то есть одна база данных, вы можете подключить службы через нее. Есть таблица, в которой хранится информация о том, какой сервер выполняет фоновую службу, и как только первый блокирует ее, другие просто спят. Некоторые поддерживают работу логики c также необходимо реализовать.

Я бы, честно говоря, go с первым решением. Индивидуально масштабируемый, развертываемый и не требующий обходного пути.

Фоновая служба, указывающая, что она должна работать во всех экземплярах, если она является частью приложения.

...