#python #flask #kubernetes
#python #flask #kubernetes
Вопрос:
У меня есть приложение на основе Flask, которое используется в качестве интерфейса (только для HTTP API) для задачи обработки изображений (распознавание лиц вместе с некоторой кластеризацией). Приложение развернуто в кластерах Kubernetes и, к сожалению, во время нагрузочного тестирования оно умирает.
Проблема в том, что все потоки Flask зарезервированы для обработки запросов, и приложение не может ответить на Kubernetes liveness probe ( /health
конечная точка) через HTTP, поэтому весь модуль перезапускается.
Как я могу это решить? Я думал о проблеме живучести на основе grep, однако это не решает проблему. Другая идея заключается в использовании сельдерея, однако, если Flask не поддерживает асинхронную обработку, мне нужно будет вызвать wait()
задачу сельдерея, которая приведет меня точно в то же место.
На данный момент я не рассматриваю возможность возврата 202
ответа вместе с URL-адресом для мониторинга процесса.
Есть еще идеи?
Ответ №1:
Как вы развертывали Gunicorn и т. Д.?
Возможно, FastAPI лучше подходит для вашего варианта использования, но миграция может оказаться чрезмерно сложной. Он имеет встроенную асинхронную поддержку, которая должна помочь вам лучше масштабироваться. Для этого мне нравятся контейнеры docker от tiangolo.
Сколько времени занимает распознавание изображений (секунды, миллисекунды)?
Если вы должны придерживаться своего текущего дизайна:
- увеличьте время ожидания, но имейте в виду, что у ваших клиентов та же проблема — у них может истечь время ожидания.
- Увеличьте ресурсы: больше модулей, чтобы ни у одного модуля не осталось ресурсов.
Если вы используете Flask, имейте в виду, что сервер разработки не предназначен для производственного развертывания. Хотя он многопоточный, он не отличается высокой производительностью, стабильностью или безопасностью. Для обслуживания приложения Flask используйте рабочий сервер WSGI, такой как Gunicorn, mod_wsgi или что-то еще.