Distributed locks на собеседовании системного аналитика
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем distributed lock
Multiple processes / services — coordinate access shared resource.
Examples:
- Cron job — only one instance runs.
- Inventory update — prevent oversell.
- Idempotent operation — first wins.
DB lock не достаточно если operation cross-DB.
Redis-based
Простейший:
SET resource_lock my_token NX EX 30NX — only if not exists. EX 30 — TTL 30 sec.
Release. Compare token, delete:
if redis.call("get", KEYS[1]) == ARGV[1] then
return redis.call("del", KEYS[1])
endLua script — atomic check-and-delete.
Caveat. TTL — protection если client crashes. Но если operation runs > TTL — другой client gets lock.
Redlock controversy
Antirez's Redlock — multiple Redis instances. Acquire majority for lock.
Martin Kleppmann critique. Doesn't satisfy strong properties under network partition / clock skew. Может give two clients lock.
Practically. Most apps OK с simple Redis lock + idempotency. Strict consistency — use Zookeeper/etcd.
ZooKeeper / etcd
Built для distributed coordination.
Approach.
- Create ephemeral znode (deletes on session end).
- First creator owns lock.
- Others watch и wait.
Pros: strong consistency, automatic release on crash.
Cons: slower, complex setup.
Leases vs locks
Lock. Hold until release.
Lease. Hold для bounded time.
Lease + fencing token. Each lease имеет monotonic ID. Resource checks fencing — accepts only highest seen.
Client A: lease token 5 — writes "x".
Client A pause (long GC) — lease expires.
Client B: lease token 6 — writes "y".
Client A resumes — writes "x" с token 5.
Resource: rejects (5 < 6 seen).Защищает от GC pauses, network delays.
Связанные темы
- 2PC vs Saga для SA
- Eventual consistency для SA
- Idempotency key для SA
- Cache strategies для SA
- Подготовка к собесу системного аналитика
FAQ
Это официальная информация?
Нет. Статья основана на работах Antirez (Redlock), Martin Kleppmann critique, ZK / etcd docs.
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.