TGViewer
System Design | balun.courses System Design | balun.courses @balun_courses_system_design · 355 subscribers
Post #35 76
Как кэш может перегрузить PostgreSQL

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

Проблемы начинаются, когда много востребованных ключей записывают почти одновременно и задают им одинаковый TTL. После их истечения приложение получает волну cache miss и отправляет запросы в PostgreSQL.

Дальше цепочка довольно неприятная. То, что раньше спокойно закрывалось из Redis, внезапно идёт в базу. PostgreSQL получает резкий скачок нагрузки, растёт время выполнения запросов и ожидание свободных соединений. А потом деградация уже может пойти дальше – в сервисы, которые от этой базы зависят.

То есть Redis сам по себе не «роняет» PostgreSQL. Проблема возникает в момент, когда кэш перестаёт брать на себя привычную долю трафика, а база внезапно остаётся один на один со всем потоком.

✔️Самое очевидное, что здесь можно сделать, – не записывать большому числу горячих ключей одинаковый TTL. Небольшой случайный разброс уже снижает риск того, что они истекут одной волной.

Если много запросов одновременно пытаются загрузить один и тот же отсутствующий ключ, помогает singleflight. Он объединяет одновременные загрузки одного ключа внутри экземпляра сервиса: один запрос выполняется, остальные используют его результат.

Дальше уже идут soft/hard TTL и background refresh. То есть в некоторых сценариях лучше какое-то время отдавать не самое свежее значение, пока новое обновляется в фоне, чем дождаться полного истечения TTL и отправить весь трафик в источник.

И отдельно нужно продумать, что делать, если сам Redis недоступен.

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


На курсе «Паттерны отказоустойчивости в микросервисах на Go» кэш разбираем именно с этой стороны: stale data, thundering herd, cache avalanche, topology, eviction и поведение системы при падении Redis.

🗓Курс стартует 27 октября и длится 1,5 месяца. За это время пройдём путь от базовой диагностики отказов до retry, circuit breaker, Kafka, кэшей, observability и полноценного GameDay с инцидентом, rollback и postmortem. Все темы – на одном смоделированном TravelTech-проекте, с практикой и разбором реальных сценариев отказов.
  • ❤ 2
  • 👍 2
  • 🔥 2
More from @balun_courses_system_design
  1. Sep 22, 2026Я бы здесь выбирал вариант 4: сначала оценить user impact и понять, насколько далеко уже р…
  2. Sep 22, 2026Post #33
  3. Sep 22, 2026Прод начал отдавать 12% ошибок. Что вы сделаете первым? Представим ситуацию. Вы только что…
  4. Sep 18, 2026Retry спасает от ошибок. И иногда превращает 10 000 запросов в 40 000 Сервис B начал тормо…
  5. Sep 1, 2026Реально ли пройти курс по System Design, если у вас full-time работа? Да. Но 4 недели прид…
  6. Aug 28, 2026Вы посмотрели 20 разборов System Design. А сможете спроектировать систему с нуля? Пока смо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →