Struchkov Mark
be8fd578f3
All checks were successful
continuous-integration/drone/push Build is passing
2.2 KiB
2.2 KiB
aliases | tags | date | zero-link | parents | linked | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
Представим, что у нас 3 реплики сервиса, которые выполняют какие-то вычисления раз в 30 секунд, а в вычислениях используется кэшированные значения. При Инвалидация кэша может сложиться ситуация при которой все 3 реплики начнут наперегонки обновлять значение в кэше. Это приводит как минимум к лишней нагрузке на базу данных, а как максимум к отказу в обслуживании.
Решить эту проблему можно с использованием ../../fundamental/Блокировка:
- Получаем доступ к кэшу, его срок жизни истёк. Пытаемся заблокироваться по ключу.
- Не удалось получить блокировку
- Ждём снятия ../../fundamental/Блокировка.
- Если не дождались, возвращаем старые данные кэша
- Если дождались, значит кто-то построил кэш за нас, выбираем значения ключа заново, возвращаем новые данные.
- Удалось получить блокировку
- Строим кэш самостоятельно
- Снимаем блокировку
- Ждём снятия ../../fundamental/Блокировка.
- Не удалось получить блокировку
Мета информация
Область:: ../../../meta/zero/00 HighLoad Родитель:: ../Кэширование Источник:: Автор:: Создана::