Я ищу создать распределенный Lock внутри Redis на Azure для нашей роли с несколькими экземплярами. Мне нужен способ создания «критических разделов», для которых только один поток может иметь доступ одновременно через несколько экземпляров роли рабочего.Каков рекомендуемый способ создания распределенного Lock с Redis на Azure?
Я использую клиент StackExchange.Redis сделать это и, услужливо, он имеет реализацию транзакционной TakeLock\ReleaseLock
already и this answer на SO дает мне хорошую идею картины использовать и сведения о том, как создать замок ,
Читая дальше по этому вопросу, я также читал эту Redis article regarding distlock, который описывает слабые отказоустойчивых основе Redis узлов при попытке реализовать распределенную механизм блокировки.
Кэш Azure Redis реализует ведущий/ведомый отказоустойчивость (кроме базового уровня), так это значит, что мне нужно будет реализовать redlock шаблон для того, чтобы гарантировать, что только одна вещь когда-либо есть замок?
Кроме того, я задаюсь:
- Почему Azure Redis строки Пример подключения не, кажется, список ведущего и ведомого в них? Запустили ли Azure переключение режима master/slave по-другому?
- Почему one .NET implementation из redlock выбрано не для поддержки использования master/slaves в его использовании? (Смотрите раздел Использование, первый пункт) Является ли это по собственному желанию или это потому, что ведущий/ведомый не является допустимым использование redlock (что не казалось бы, дело в redis article)
Я прочитал статью о переделке, а также просмотрел видео. Могу ли я предположить, что если я использую один экземпляр azure, у нас будет такой сценарий: «В этой модели есть очевидное условие гонки: Клиент A получает блокировку в главном. Мастер сработает до того, как будет передана запись в ключ Раб получает повышение до уровня хозяина. Клиент B получает блокировку на тот же ресурс. А уже содержит блокировку. НАРУШЕНИЕ БЕЗОПАСНОСТИ!« –
@AlexMaie: да, я так считаю. Если вам нужна более надежная защита от множества клиентов, входящих в критический раздел, то использование алгоритма блокировки с несколькими независимыми мастерами (или несколькими независимыми реплицируемыми наборами master/slave) должно быть более безопасным. – Sam