У меня есть 2 проблемы, связанные с фоновыми задачами:
- Фоновые задачи записи блокируют основной поток.
- Потеря данных, если поступает менее 20 событий, если нет постоянного веб-трафика, моя задача записи не завершается и происходит периодическая очистка фона задача останавливается.
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