Распределенные блокировки в Go. Redis, etcd.

Ответ

Блокировка в распределенной среде: один узел владеет блокировкой (по ключу ресурса). Redis: SET key value NX EX ttl; при успехе - владеем, по окончании - DEL или скрипт Lua. Redlock - несколько инстансов Redis для надежности. etcd: аренда (lease) и сравнение-и-запись. В Go библиотеки: go-redis с SetNX, etcd client с lease. Важно таймаут и продление блокировки при долгой работе.

ok := rdb.SetNX(ctx, "lock:resource", "owner", 10*time.Second).Val()
if !ok { return ErrLocked }
defer rdb.Del(ctx, "lock:resource")
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.