Моя задача - настроить мониторинг с помощью Prometheus.Идея следующая: каждый раз, когда Prometheus выполняет очистку с конечной точки (то есть делает запрос GET), на веб-сервере (сейчас это просто Tornado ) запускается соответствующий обработчик (скрипт Python), который выполняет работуи возвращает метрики, которые собирает Прометей.
Кажется, все в порядке, но проблема в том, что я использую Tornado из-за асинхронности, и это вызывает проблемы (ошибки, трудно обрабатывать исключения и т. д.), плюс тамне так много библиотек, которые хорошо работают с asyncio, поэтому чаще мои помощники не работают асинхронно, они просто запускают код в потоках.
Итак, что я хочу.Я хочу настроить свой веб-сервер для управления запросами Prometheus не асинхронно, а с использованием чего-то вроде многопроцессорной обработки.Я представляю каждый запрос от Прометея как отдельное соединение от пользователя, и я хочу обрабатывать его отдельно от чужих соединений (в идеале - в отдельном процессе интерпретатора).Я предполагаю, что это может быть достигнуто с помощью набора веб-сервера (nginx), сервера приложений Python (uWSGI) и веб-фреймворка (Flask, или другого).Как это выглядит:
- Прометей делает GET-запрос, скажем http://localhost/something_i_watch/metrics
- nginx направляет его на соответствующую конечную точку
- сервер приложений и веб-фреймворк выполняют работу и возвращаютметрики
Преимущество: каждый запрос обрабатывается отдельно (он разделяет процесс интерпретатора Python), у нас много возможностей для масштабирования, быстрые запросы не ждут медленных, код Python является синхронным.
Это хорошая идея для меня или может быть лучше?Может я что-то упустил?Извините за беспорядок, если он там и спасибо за ваши предложения.