Все кейсы

Асинхронная обработка задач

Интегрировал PostgreSQL и RabbitMQ для очередей задач. Повысил надежность и скорость работы внутреннего сервиса доставки.

PostgreSQLRabbitMQTypeScriptNode.js
Асинхронная обработка задач

Задача

Внутренний сервис заказов Sushi-Love обрабатывал всё синхронно - проверка наличия, расчет стоимости, уведомление на кухню, запись в базу.  Каждый запрос - 2-3 секунды.  В пиковые часы нагрузка росла в 5-8 раз, часть запросов падала по таймауту.  Терялись заказы.

Решение

Разделил на два этапа: быстрый прием и фоновую обработку.  API теперь только валидирует заказ, пишет в PostgreSQL со статусом "принят" и кидает сообщение в RabbitMQ - 100-200 мс, клиент сразу получает подтверждение.  Воркеры забирают из очереди и делают тяжелую работу: пересчет, проверка остатков, отправка на кухню.  Каждый воркер в транзакции PostgreSQL - если падает, сообщение возвращается в очередь.  Настроил dead letter queue для заказов, которые не прошли после 3 попыток - отдельная очередь для ручного разбора.

Результат

Нулевая потеря заказов - RabbitMQ буферизует пики.  Время отклика API упало с 2-3 секунд до 150-200 мс.  В пятничный пик сервис тянет 200+ заказов в час без проблем.

214

Похожие кейсы

Миграция платформы на React и NestJS
Переписал ядро o5.Еда с PHP/jQuery на TypeScript/React/NestJS. Модульная архитектура, типизированный API, 500+ бизнес-клиентов без простоя при переходе.
ReactTypeScriptNestJSNode.js
Пайплайн транскодирования аудио
Серверный пайплайн: загрузка FLAC/MP3/OGG, транскодирование в нужные форматы, стриминг через S3. Lossless воспроизведение в браузере с любого устройства.
NuxtTypeScriptS3Node.js
Интеграция каталога MusicBrainz
Подключил каталог MusicBrainz (127 000+ артистов), скробблинг в ListenBrainz, Telegram Mini App для мобильного доступа к библиотеке.
NuxtTypeScriptTelegram Mini App
SEO-архитектура для сайтов доставки
Отдельные страницы товаров с Schema.org разметкой, SSR, мета-теги. Клиентские сайты выходят в топ Google по локальным запросам.
NuxtTypeScriptTailwind CSS

Нужно решить похожую задачу?

Напишите - обсудим ваш проект или идею.

© 2026 Николай Косарев