Бэкенд без лишних граблей: 13 статей о PostgreSQL, микросервисах и коде

Индексы есть, запросы тормозят, а разделённые сервисы всё ещё приходится выпускать вместе? Подготовили подборку из 13 наших лучших статей о подобных бэкенд-задачах: от настройки PostgreSQL до обновления Java-стека и тонкостей C++. Внутри — разборы решений с примерами кода и задачи, на которых можно проверить себя.
work_mem в PostgreSQL: как правильно кормить запросы памятью
Статья поможет разобраться, как work_mem влияет на сортировки, соединения и агрегации в PostgreSQL — и почему бездумное увеличение параметра может оставить сервер без памяти. Научитесь находить запись временных данных на диск через EXPLAIN ANALYZE, pg_stat_database и pg_stat_statements, а также подбирать настройки под OLTP и аналитическую нагрузку.
Декомпозиция микросервисов: 5 паттернов против распределённого монолита
Пять паттернов помогут вам провести границы между микросервисами и не получить распределённый монолит с каскадными отказами и общей базой данных. На практических примерах вы оцените, где пригодятся DDD, Strangler Pattern, Database per Service, CQRS и Saga, а также проверите автономность нового сервиса с помощью трёх вопросов.
Domain‑Driven Design: полный гайд по моделированию домена в 2026 году
Вместе с автором вы пройдёте путь от единого языка и границ контекстов до сущностей, объектов-значений и агрегатов. На примерах из финтеха вы увидите, как DDD помогает распутать бизнес-логику, разделить ответственность между частями системы и упростить дальнейшее развитие проекта.
BRIN, GIN, B‑Tree: полный гайд по индексам PostgreSQL для highload
Индекс есть, а запрос всё равно тормозит — статья поможет вам понять, где искать причину. Вы выясните, как планировщик PostgreSQL выбирает между индексом и последовательным сканированием и какой тип индекса подходит под конкретные данные. На кейсе системы со 100 млн записей в сутки вы увидите, как замена B-Tree на BRIN сократила индекс с 40 ГБ до 120 МБ.
Почему VACUUM не спасает от раздувания индексов в PostgreSQL
После массового DELETE индекс может остаться почти прежнего размера, даже если VACUUM отработал без ошибок. На пошаговом эксперименте вы проследите, почему PostgreSQL не уплотняет B-дерево, как обнаружить «полый» индекс и оценить степень раздувания. Заодно определите, когда достаточно наблюдения, а когда пора использовать REINDEX CONCURRENTLY или pg_squeeze
REST API: гайд по проектированию от принципов до боевых кейсов
Почему один неверный статус-код способен заметно увеличить нагрузку на базу данных? Вы пройдёте путь от ограничений REST и модели зрелости Ричардсона до проектирования эндпоинтов, ответов и обработки ошибок. На примере боевого кейса увидите, как корректные HTTP-коды и кэширование снизили нагрузку на БД на 80%
Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise
В распределённой системе одного брокера недостаточно: сообщения могут потеряться, задвоиться или застрять из-за сбоя потребителя. Шаг за шагом вы разберёте архитектуру Pipes and Filters, маршрутизацию и транзакционную обработку, а затем защитите бизнес-логику с помощью идемпотентного получателя. В финале получите практические рекомендации по DLQ и мониторингу очередей.
Архитектурные решения в backend: 5 практических приёмов, которые помогают держать баланс
Когда требования меняются быстрее архитектурных диаграмм, ранняя ставка на микросервисы легко оборачивается лишней сложностью. Пять практических приёмов покажут вам, как развивать систему постепенно: начать с модульного монолита, сохранить границы бизнес-логики и документировать ключевые решения. Вы также поймёте, когда системе действительно пора переходить к микросервисам.
Как спроектировать REST API без ошибок: 3 задачи с разбором
Сначала попробуете решить три задачи из практики: выбрать HTTP-метод, вернуть корректный статус при бизнес-конфликте и определить стратегию версионирования API. После каждого кейса вы сравните варианты, разберёте их последствия для клиентов и инфраструктуры, а в конце получите чек-лист для проверки новых эндпоинтов.
Создаём HTTP/2-сервер на C++ и хостим на нём свой сайт
Вы проследите, как HTTP/2-сервер на C++23 вырастает из минимального ответа 200 OK в основу для реального сайта. Затем разберёте защиту бинарника и контейнера, ограничения против атак на HTTP/2 и особенности деплоя у разных облачных провайдеров. В бонусной части узнаете, как автор нашёл утечку памяти в OpenSSL с помощью LeakSanitizer.
Move‑семантика в C++: пять задач, в которых легко ошибиться
Все пять примеров компилируются без ошибок, хотя скрывают лишние копирования, потерю оптимизаций и риск некорректного состояния объекта. Решая задачи, вы проверите понимание std::move, NRVO, self-move-assignment, emplace_back и noexcept, а затем разберёте поведение компилятора и стандартных контейнеров в каждом случае.
std::expected в C++23: гайд по миграции с исключений на функциональный error handling
Когда исключения скрывают возможные сбои за пределами сигнатуры, std::expected делает контракт функции явным. Вы освоите базовый API и монадические операции, научитесь преобразовывать ошибки между слоями и постепенно подключать новый подход к legacy-коду. Заодно определите случаи, где исключения по-прежнему уместнее.
Миграция на Spring Boot 4 и Java 25: пошаговый план, чтобы обновиться и не уронить прод
Сначала вы переведёте сервис на Spring Boot 4, сохранив Java 21, и только после стабилизации поднимете JDK до Java 25 — так источник каждой регрессии останется понятным. По пути устраните устаревшие API, проверите изменения Jackson и Spring Security, разберётесь с виртуальными потоками и подготовите канареечный релиз с планом отката.
Продолжить разбор бэкенд-задач можно на бесплатных уроках OTUS: от HTTP-сервера на Java до сложных SQL-запросов. Выбирайте тему под свою текущую задачу в дайджесте уроков сентября.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.