Проблемы с фоновыми задачами 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?
Завершение фоновой задачи, когда AWS Lambda неактивен
Я также пытался активировать асинхронную периодическую фоновую задачу раз в минуту и сбрасывать события, которые не достигли 20, для пакетной записи. Однако эта фоновая задача завершается, если к конечной точке не поступает постоянный трафик. Это завершение работы также предотвратит завершение некоторых запущенных фоновых задач записи.
Блокировка фоновых задач
Чтобы предотвратить блокировку моего основного потока, я выполняю пакетную запись в Firehose в обычной функции, а не в асинхронной. Я вижу, что пакетная запись выполняется в отдельном потоке от основного потока. Однако во время записи в основном потоке ничего не происходит.
Увеличить количество рабочих 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 ... k-problems
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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