Приложение Django с ASGI Uvicorn увеличивает задержки в 4 раза

Мы используем приложение Django (https://github.com/saleor/saleor) для работы с нашей электронной коммерцией. Мы используем ASGI с Uvicorn в производстве с 4 рабочими. Настройка инфраструктуры -

  1. 4 экземпляра 4-ядерных 16 ГБ машин для размещения приложения Django (Saleor).
  2. Приложение развернуто с помощью docker на всех инстансах.
  3. 2 инстанса по 4 ядра 16 ГБ для Celery.
  4. Хостируемое решение PostgresSQL с одной основной и одной репликой.

Saleor использует Django и Graphene для реализации GraphQL API. Один из API - createCheckout, который занимает от 150 до 250 мс в зависимости от сущностей полезной нагрузки. При проведении нагрузочного теста с 1 пользователем API постоянно дает одинаковые задержки. Когда количество одновременных пользователей увеличивается до 10, задержки возрастают в 4 раза (1 сек - 1,3 сек). При 20 пользователях она достигает более 10 секунд.

Среднее использование процессора не превышает 60%. Отслеживая задержки, мы обнаружили, что даже при одновременных запросах 20 пользователей, основные API не занимают более 150-250 мс. Это означает, что все задержки добавляются на уровне ASGI + Uvicorn.

Не совсем понимаю, что мы здесь упускаем. С точки зрения развертывания, мы следуем стандартной установке Django + ASGI + Uvicorn для производства. Любая помощь или предложения по этому поводу будут приняты с благодарностью.

У нас были похожие проблемы, когда в настройках saleor не был включен бегунок celery. Можете ли вы убедиться, что celery подключен через redis и что он обрабатывает запросы для каждого чекаута, как ожидалось? Если нет, то saleor не может выполнять асинхронные задачи и пытается выполнять их синхронно, добавляя большое количество задержек...

Вернуться на верх