Вернуться к кейсам

От ~1 500 до ~8 000 успешных HTTP RPS.

Определил границы сервисов и спроектировал RabbitMQ-контракты для декомпозиции HR-бэкенда; команда выделила бота и фоновые задачи.

~5,3×пиковый успешный HTTP RPS
PythonRabbitMQGranianOutboxRedis

Исходная задача

Во время всплеска активности основной API стал узким местом: в одном приложении выполнялись запросы, работал бот и запускались фоновые задачи. При перегрузке пользователи сталкивались с ответами 503 и таймаутами.

Мой вклад

Я определял границы сервисов, проектировал RabbitMQ-контракты и проводил code review реализации двух разработчиков. Коллеги писали код выделяемых сервисов, а я отвечал за архитектурные решения и проверку результата по production-мониторингу.

Инженерный подход

Мы выделили Telegram-бота и фоновые задачи, ввели взаимодействие через RabbitMQ и Outbox для уведомлений. Одновременно увеличили число Python-воркеров Granian с одного до четырёх и лимиты CPU/RAM, не добавляя Kubernetes pod.

Результат

Пиковая нагрузка успешных HTTP-запросов к основному API выросла примерно с 1 500 до 8 000 RPS. В момент позднего пика Grafana показывала ноль в метрике HTTP 5xx.

Что стоит за результатом

Отдельно сравнивали старую и новую архитектуру при одинаковых Granian workers и лимитах CPU/RAM; численный результат этого контрольного теста неизвестен. Показатель ~5,3× относится к успешным HTTP 2xx/3xx RPS на одной панели Nginx/Grafana с пятиминутным окном после комплекса архитектурных и инфраструктурных изменений.