TTL выбирают по измеренной длительности критической секции, включая хвосты и сбои, но один большой timeout не гарантирует безопасность. После истечения lease старый worker может продолжить работу одновременно с новым.
Как в реальной системе выбрать TTL (тайм-аут) для Redis-блокировки при update_user? Какие данные и инструменты использовать?
TTL выбирают по измеренной длительности критической секции, включая хвосты и сбои, но один большой timeout не гарантирует безопасность. После истечения lease старый worker может продолжить работу одновременно с новым.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
TTL выбирают по измеренной длительности критической секции, включая хвосты и сбои, но один большой timeout не гарантирует безопасность. После истечения lease старый worker может продолжить работу одновременно с новым.
Соберите гистограммы времени update_user, traces, задержки Redis/БД и паузы процесса. Продление и освобождение должны проверять уникальный токен владельца атомарно. При потере lease операция должна прекращать изменения; для защиты ресурса полезны fencing token или версия записи, проверяемые самим хранилищем. Если меняется одна строка БД, её транзакционная блокировка или условный UPDATE часто надёжнее отдельного Redis-lock.
Источник: redis.io.