AWS Lambda FastAPI блокирует фоновую задачуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AWS Lambda FastAPI блокирует фоновую задачу

Сообщение Anonymous »

У меня есть простой REST-сервер FastAPI, работающий на AWS Lambda. Он записывает журналы на S3 с помощью AWS Kinesis Firehose пакетами по 20 штук.
У меня есть 2 проблемы, связанные с фоновыми задачами:
  • Фоновые задачи записи блокируют основной поток.
  • Потеря данных, если поступает менее 20 событий, если нет постоянного веб-трафика, моя задача записи не завершается и происходит периодическая очистка фона задача останавливается.
Единственный надежный вариант — отправлять в Firehose по одному событию за раз, но это очень медленно. Я испробовал много обходных путей, но со всеми столкнулся с проблемами.
FastAPI BackgroundTasks для пакетной записи событий
Я использую библиотеку Boto3 для отправки событий в Firehose, и это не асинхронно. Чтобы снизить задержку, я помещаю события в очередь событий и записываю пакеты по 20 событий в Firehose, каждый пакет запускается в FastAPI BackgroundTasks.
Возможно, BackgroundTasks — неподходящий инструмент для AWS Lambda?
Блокировка фоновых задач
Чтобы предотвратить ожидание в основном потоке, я выполняю пакетную запись в Firehose в обычной функции, а не в асинхронный. Я вижу, что пакетная запись выполняется в отдельном от основного потока потоке. Однако во время записи в основном потоке  ничего не происходит.
Завершение фоновой задачи, когда AWS Lambda неактивен
Я также пытался иметь асинхронную периодическую фоновую задачу, которая просыпается раз в минуту и ​​сбрасывает события, которые не достигли 20, для пакетной записи. Однако эта фоновая задача завершается, если к конечной точке не поступает постоянный трафик. Это завершение работы также предотвратит завершение запущенной фоновой задачи записи.
Увеличить количество рабочих процессов Uvicorn в AWS Lambda?
Возможная проблема заключается в том, что FastAPI сервер Uvicorn по умолчанию работает только с одним работником. Я также пытался найти место для изменения количества рабочих Unicorn в консоли Terraform или AWS, но не нашел документации о том, как это сделать. Я даже увеличил размер памяти до 1,8 ГБ, чтобы получить 2 ядра для моей микроВМ.
FastAPI на AWS Lambda или EC2
Не могу сказать, проблема ли это в моей проблеме это небольшая неправильная конфигурация или вместо этого было бы проще запустить FastAPI на статическом экземпляре EC2. Вероятно, у вас не возникнет проблем с фоновыми задачами в EC2, но интеграция с API Gateway, вероятно, сложнее.

Подробнее здесь: https://stackoverflow.com/questions/783 ... round-task
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»