Межпроцессная (и машинная) синхронизация (семафоры) - PullRequest
0 голосов
/ 24 августа 2018

Справочная информация:

Мое приложение WCF должно вызвать службу, в которой нет проверки параллелизма.Это служба, созданная третьей стороной, и заставить их добавить проверку параллелизма может быть невозможно.

Я могу гарантировать, что единственный способ вызвать стороннюю службу - это мое приложение WCF.Поэтому я планирую включить проверку параллельности в мой код.

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

Проблема:

Мой WCFСервис сбалансирован по нагрузке.У меня может быть одновременно до 16 экземпляров, запущенных на разных виртуальных машинах.

Так что большинство классов .NET, которые имеют дело с синхронизацией, предполагают совместное использование памяти.

Существуют ли стандартные способы «наилучшей практики» для выполнения синхронизации для экземпляров служб с балансировкой нагрузки?

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

Резюме:

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

1 Ответ

0 голосов
/ 25 августа 2018

Использование диспетчера распределенной блокировки для блокировки изменения ресурса на основе созданного вами идентификатора.

Некоторые из DLM, которые вы можете использовать:

...