Почему SemaphoreSlim не решает задачу защиты от cache stampede в распределённой системе и что использовать вместо него?

SemaphoreSlim координирует только потоки одного процесса. При нескольких экземплярах приложения каждый может одновременно пересчитать один и тот же отсутствующий ключ кеша.

Короткий ответ

Что ответить на собеседовании

SemaphoreSlim координирует только потоки одного процесса. При нескольких экземплярах приложения каждый может одновременно пересчитать один и тот же отсутствующий ключ кеша.

Подробный разбор

Ответ с пояснениями

SemaphoreSlim координирует только потоки одного процесса. При нескольких экземплярах приложения каждый может одновременно пересчитать один и тот же отсутствующий ключ кеша.

Для распределённого single-flight используют общую блокировку или иной протокол выбора одного обновляющего узла. У блокировки должны быть ограниченный срок, уникальный токен владельца и безопасное освобождение; при истечении lease старый владелец не должен перезаписывать более свежий результат.

Также помогают разброс TTL и stale-while-revalidate, если устаревшие данные допустимы. Распределённый lock не устраняет все отказы: нужны таймаут ожидания, повторная проверка кеша после захвата и защита БД от перегрузки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее