System Design Space
Граф знанийНастройки

Обновлено: 7 мая 2026 г. в 18:26

Стратегии кэширования: Cache-Aside, Read-Through, Write-Through, Write-Back

средний

Практический разбор Cache-Aside, Read-Through, Write-Through и Write-Back: как выбирать стратегию по требованиям к свежести данных, инвалидации и эксплуатационной устойчивости кэша.

Кэширование почти всегда покупает скорость ценой рассинхронизации, инвалидации и более хрупкого операционного контура.

Глава сравнивает Cache-Aside, Read-Through, Write-Through и Write-Back через требования к свежести данных, поведение при промахе кэша, цену записи и риски при сбоях.

В архитектурных разговорах это помогает обсуждать место кэша в системе, допустимую несвежесть данных и эксплуатационные риски как реальные решения, а не как автоматическое "давайте поставим Redis".

Практическая польза главы

Кэш как контракт

Проектируйте политику кэша как часть продуктового контракта: где допустима несвежая выдача, а где нужна строго актуальная информация.

Инвалидация

Выбирайте схему инвалидации под бизнес-семантику: синхронное обновление, событийную очистку, TTL или гибрид с версионированием.

Защита от лавины запросов

Добавляйте защиту от массовых промахов: случайный разброс TTL, дедупликацию чтений, фоновое обновление и ограничение нагрузки на origin.

Аргументация на интервью

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

Паттерн

Паттерн Cache-Aside

Классическое описание паттерна кэширования и его практических компромиссов.

Открыть материал

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

На практике , , и отвечают на разные требования к свежести данных, пути записи и поведению системы при промахе кэша.

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

Четыре базовые стратегии

Cache-Aside

Приложение само читает из кэша и при промахе обращается к базе данных.

Путь чтения

Приложение

чтение по ключу

Кэш

поиск значения

База данных

чтение при промахе

Кэш

сохранить значение

Приложение

вернуть ответ

Путь записи

Приложение

обновить значение

База данных

записать источник истины

Кэш

удалить или обновить ключ

Приложение

подтвердить запись

Что происходит

  • Чтение сначала идёт в кэш, а при промахе - в базу данных.
  • После промаха приложение само прогревает кэш для следующих запросов.
  • После записи приложение отдельно удаляет или обновляет запись в кэше.

Что важно учитывать: Если забыть про инвалидацию, кэш быстро начнёт отдавать устаревшие данные.

Как выбрать стратегию

СтратегияЗадержка чтенияЗадержка записиКонсистентностьСложностьКогда подходит лучше всего
Cache-AsideНизкая при попадании в кэш, выше при промахеНизкая: база данных обновляется отдельно от кэшаЗависит от скорости инвалидацииНизкая / средняяУниверсальные сценарии с преобладанием чтения
Read-ThroughСтабильная: слой кэша сам подгружает данныеЗависит от выбранной политики записиЗависит от того, как устроен путь записиСредняяОбщий инфраструктурный слой кэша
Write-ThroughНизкаяВыше: запись синхронно идёт в кэш и базу данныхВысокая после успешной записиСредняя / высокаяСценарии, где важно чтение сразу после записи
Write-BackНизкая для уже прогретых данныхОчень низкая для клиентаОтложенная, с высокими требованиями к надёжностиВысокаяПотоки с интенсивной записью и пакетной выгрузкой

Практические ориентиры

Что делать

  • Сначала зафиксируйте, где допустимы устаревшие данные, а где чтение должно видеть запись сразу.
  • Отдельно проектируйте инвалидацию кэша и политику вытеснения.
  • Для Write-Back используйте надёжный буфер и идемпотентную выгрузку.
  • Добавляйте защиту от лавины запросов: дедупликацию чтений, небольшой разброс времени жизни и фоновое обновление горячих ключей.

Частые ошибки

  • Кэшировать без понятной стратегии инвалидации и срока жизни записей.
  • Использовать Write-Back для критичных финансовых данных без надёжного журнала или очереди.
  • Пытаться кэшировать всё подряд вместо дорогих чтений и горячих ключей.
  • Не защищаться от лавины одинаковых запросов при массовом промахе кэша.
  • Не отслеживать долю попаданий в кэш, p95/p99 и частоту выдачи устаревших данных.

Проверки перед внедрением

1. Измерьте базовые p95/p99 и долю попаданий в кэш до внедрения.
2. Определите, где находится источник истины и как именно работает инвалидация.
3. Ограничьте размер ключей и продумайте пространства имён и версионирование.
4. Подготовьте резервный сценарий на случай деградации или недоступности кэша.

Короткое правило выбора: если важнее предсказуемость и простота, начинайте с Cache-Aside; если критично чтение сразу после записи, смотрите в сторону Write-Through; если узкое место - запись и допустима отложенная согласованность, используйте Write-Back с надёжным контуром выгрузки.

Стратегия кэширования должна определяться требованиями к свежести данных, а не привычкой команды.

Связанные главы

  • Принципы проектирования масштабируемых систем - помогает понять, когда кэш действительно снижает задержку, а когда создаёт новые проблемы со свежестью данных и консистентностью.
  • Алгоритмы балансировки - показывает, как локальность ключей и распределение трафика влияют на долю попаданий и риск горячих ключей.
  • Redis: база данных в памяти и архитектура - разбирает типичный эксплуатационный слой кэша: время жизни записей, политику вытеснения, сохранность данных и рабочие ограничения.
  • Обнаружение сервисов (service discovery) - показывает, как поддерживать актуальный пул узлов кэша и бэкендов для стабильных путей чтения и записи.
  • URL Shortener (TinyURL) - даёт прикладной пример, где выбор между Cache-Aside и прогревом кэша напрямую влияет на задержку и стоимость.
  • Content Delivery Network (CDN) - расширяет тему на пограничное кэширование, инвалидацию и многоуровневую архитектуру кэша.
  • Multi-region / Global Systems - добавляет региональную репликацию и правила согласованности для кэшей между дата-центрами.

Чтобы отмечать прохождение, включи трекинг в Настройки