Как разрешить запуск только одной версии фонового задания [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Как разрешить запуск только одной версии фонового задания [закрыто]

Сообщение Anonymous »

У меня есть задача реализовать механизм безопасности, который гарантирует, что одновременно может работать только одна версия фоновой службы. Я не могу изменить существующую архитектуру или ввести новые компоненты инфраструктуры, поэтому я ограничиваюсь тем, что у нас уже есть: Azure SQL Server, Azure Blob и Service Bus.
Проблема возникает, когда две версии приложения (старая и новая) запускаются одновременно во время развертывания, что является распространенной ситуацией при использовании замены слотов службы приложений Azure для развертываний с нулевым временем простоя.
Одно из самых простых предлагаемых решений (из Stack Overflow) — вручную разблокировать новую версию после замены. К сожалению, у этого решения есть серьезные недостатки: при ручном перезапуске или любом перезапуске, не вызванном развертыванием, приложение не разблокируется автоматически. Это может привести к простою фоновых служб, а поскольку наше приложение сильно зависит от этих служб, мы не можем позволить себе простоя более одной минуты.
Другое предложение заключалось в использовании распределенной блокировки, реализованной через Azure SQL Server. Первый подход заключался в использовании sp_getapplock, но он зависит от базового соединения с БД. Если соединение прерывается из-за проблем с сетью, блокировка может не быть снята должным образом, что может привести к нескольким часам простоя.
Второй подход заключался в использовании специальной таблицы с TTL. Однако это может привести к ситуации, когда две версии фоновой службы считают, что обе удерживают блокировку, хотя на самом деле это делает только одна.
Мы также рассмотрели возможность блокировки фоновых служб в рабочем слоте и разблокировки их по умолчанию при запуске приложения. Но если промежуточный слот по какой-либо причине не запустится, мы можем получить простои более чем на минуту; слишком сильно зависит от времени между блокировкой и запуском второй версии приложения.
Итак, мой вопрос: кто-нибудь уже решил проблему такого типа или есть ли у кого-нибудь предложения, как ее решить более надежно?

Подробнее здесь: https://stackoverflow.com/questions/798 ... job-to-run
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»