2013-08-22 4 views
2

У нас есть требование управлять параллельными операциями задачи. Короче говоря, только одна версия этой задачи может быть запущена в любой момент времени.Распределенный механизм блокировки. NET

Проблема в том, что мы будем работать в многосерверной среде.

Требования:

  • Разрешить однократно экземпляр метода для запуска в любое время. (Мьютекс OS).
  • Должен работать в среде с несколькими серверами.
  • Мьютекс должен быть отброшен, если процесс замирает.
  • Должно быть надежное и зрелое решение.

Окружающая среда:

  • Windows Server (на предпосылке)
  • .Net
  • Azure

Вещи, которые я рассмотрел до сих пор:

  • OS мьютекс : Работает на emise, unsure, если он отпустит блокировку на смерти процесса. Также не уверены, поддерживает ли Windows надежный мьютекс.
  • DB Flag: работает на основе, работает на нескольких серверах. Не разблокирует процесс смерти.
  • AppFabric: Работает на посылке, хотя дополнительный этап настройки нежелателен. Работает на нескольких серверах. Не будет разблокировать процесс смерти, хотя блокировки могут быть установлены на тайм-аут при приобретении. (лучше всего до сих пор)
  • CIFS File lock: работает на посылке, работает на нескольких серверах, должен разблокировать о смерти процесса. Не удается выполнить надежный тест, хотя это может быть уклон .

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

Мне особенно интересно слышать мысли о решении блокировки CIFS или использовать MSMQ?

+0

Re DB flag: «Не будет разблокировать процесс смерти.»- это разрешимо с тайм-аутом и пульсом, хотя лично я использую redis:' SET {lock-name} {произвольный токен} NX EX {expiry-timeout} '(и проверить возвращаемое значение, выполненную работу) (см. раздел «Шаблоны» на странице «set»: http://redis.io/commands/set) –

ответ

1

Если вы используете Windows Azure Storage, вы можете использовать Blazer Windows Azure для приобретения аренды на этом блоке с таймаутом (максимальный размер которого можно использовать в течение 1 минуты). Сервер, который приобретает аренду, может выполнить задание, и он может продлить срок аренды до истечения срока его действия.

Другие серверы будут продолжать пытаться приобретать аренду, в случае смерти лидера.

Как часто вы проводите опрос, зависит от того, насколько важно, чтобы другие процессы немедленно возобновились, но, вероятно, могут привести к некоторым дополнительным затратам (что может быть не слишком незначительным, если оно слишком частым и зависит от того, сколько серверов у вас есть опрос, конкурирующий за это аренды).

+0

Привет, Джулиан, да, мы рассматривали это для лазурного развертывания, я думаю, что мы неохотно поддерживаем два метода: нам также нужно развернуть помещение. –

Смежные вопросы