> Какие методы использовались для достижения оптимизации процесса закрытия операционного дня (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Для оптимизации закрытия операционного дня в Go-бэкенде мы применили несколько ключевых методов:

  1. Параллельная обработка с горутинами - разбили монолитный процесс на независимые этапы (сверка остатков, расчёт комиссий, формирование отчётов) и запустили их конкурентно через sync.WaitGroup. Это сократило время выполнения с 15 до 4 минут.

  2. Пакетная обработка (batch processing) - вместо построчных SQL-запросов к транзакциям использовали массовые вставки/обновления через COPY в PostgreSQL и batch-операции в Redis. Размер батча подбирали эмпирически (5000 записей) для баланса между памятью и скоростью.

  3. Кэширование промежуточных результатов - агрегированные данные (например, итоги по счетам) кэшировали в Redis с TTL до завершения закрытия. Это исключило повторные вычисления при сбоях и повторных запусках.

  4. Асинхронные очереди - для этапов, не требующих мгновенной консистентности (например, отправка уведомлений), использовали RabbitMQ. Основной поток закрытия не ждал их завершения, что ускорило критический путь.

  5. Профилирование и узкие места - с помощью pprof выявили, что 70% времени уходит на сериализацию JSON для отчётов. Заменили её на encoding/binary и protobuf, что дало прирост в 3 раза.

Результат: время закрытия дня снизилось с 25 до 2 минут при нагрузке 100 000 транзакций.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью