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

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