Вопрос с собеседования · Базы данных

Что обязательно при реализации распределённой блокировки на Redis?

SeniorRedis и кэшированиеRedis
Ещё спрашивают так:
  • Как сделать распределённую блокировку на Redis?
  • Что такое Redlock?
Коротко

SET lock:x <уникальный токен> NX PX 30000 — захват с TTL (чтобы упавший клиент не держал вечно); снятие — Lua-скриптом только своего токена.

  • Без уникального токена можно снять чужую блокировку после истечения своей
  • Пауза GC дольше TTL — два владельца одновременно
  • Для корректности — fencing token, проверяемый хранилищем

А ещё Для эффективности (не делать работу дважды) Redis-блокировки достаточно; для корректности — консенсус

Подробно

Захват делают атомарно — установкой ключа с условием отсутствия и сроком жизни; освобождение обязано проверять владельца, что требует скрипта, иначе между проверкой и удалением вклинится чужой захват. Самое важное — честно понимать границы гарантии: если владелец задержался на паузе сборщика мусора дольше TTL, блокировка истечёт, её возьмёт другой, и оба будут считать себя владельцами. Поэтому такой механизм годится для оптимизации (не выполнять работу дважды), но не для случаев, где двойное выполнение недопустимо — там нужна защита на стороне самого ресурса: условная запись по версии, ограничение уникальности или монотонно растущий маркер, который ресурс проверяет.

Что хотят услышать

  • SET NX с TTL и уникальным токеном.
  • Атомарное снятие своей блокировки.
  • Почему взаимное исключение не абсолютно, fencing.

Частые ошибки

  • Считать распределённую блокировку гарантией строгого взаимного исключения.
  • Удалять ключ блокировки без проверки владельца.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Достаточно одной команды SET с ключом ресурса — TTL и токен лишь усложняют снятие блокировки
  • ✓У блокировки должен быть TTL, иначе падение владельца заблокирует ресурс навсегда
  • ✓Снимать блокировку можно только своим уникальным токеном
  • ✓При паузе владельца дольше TTL владельцев станет двое — нужна защита на стороне ресурса

Что спросят дальше

  • Что такое fencing token и зачем он нужен?
  • Чем условная запись по версии надёжнее внешней блокировки?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования