Забегая вперед, когда будет создана веб-ферма ...
У нас есть различные приложения-службы Windows, выполняющие различные фоновые задачи: отправка электронной почты, миниатюры / обработка файлов и т. Д.
В среде серверной фермы мы теоретически могли бы устанавливать и запускать каждую службу на каждом компьютере, однако могут быть конфликты из-за бизнес-объекта, основанного на принципе «первый выиграл при записи», или нежелательного дублирования задач, например: одни и те же электронные письма являются отправить несколько раз.
Сценарий «первый выиграл при записи» можно преодолеть с помощью кода или логики, которая решает проблему или пропускает элемент. (если это базовый механизм организации очередей (список запросов и запись процесса), он будет просто повторен)
Для дублирования задач можно выполнять задачи в транзакциях, чтобы другие процессы не могли захватить те же ресурсы, однако я думаю, что они просто подождут, и нам потребуется обработать вход в систему на основе повторяющихся событий? Будет ли это так?
Чтобы предотвратить дублирование задач, я думаю о создании механизма, который записывает «флаг блокировки» в базу данных, который будет установлен первой запускаемой службой. Этот флаг будет датирован и ссылается на экземпляр службы. Служба, которой «принадлежит» флаг, будет запускать задачи и периодически обновлять эту дату. Также будет установлен тайм-аут / допуск для каждого сервиса в ситуации, когда сервис не владеет флагом, он проверит допуск и при необходимости вступит во владение.
Похоже ли это на разумное решение или нужно перейти к лучшему решению на основе очередей сообщений на этом этапе (также не знаете, как это будет работать в среде фермы?
Технологии: C # / ASP.NET / SQL Server