HyperLEDA / db-app

Backend for HyperLeda astronomical database of extragalactic objects
https://hyperleda.github.io/db-app/
MIT License
0 stars 0 forks source link

Создание очереди задач на основе Redis #40

Closed Kraysent closed 5 months ago

Kraysent commented 5 months ago

Проблема: сейчас любая долгая операция (загрузка таблицы из CDS, далее будет кросс-идентификация) проводятся в том же потоке, что и обработка запроса пользователя. Это приводит к тому, что пользователь не может разорвать соединение и обязан дождаться, пока процесс закончится, чтобы получить ответ - это неправильно.

Потенциальное решение: поднять очередь Redis (https://python-rq.org/) и при запросе в API создать и положить в очередь задачу. Эта задача будет выполняться асинхронно в соседнем процессе при помощи worker-а. Она может писать в базу (перед создание worker-а можно установить соединение с базой при помощи https://python-rq.org/docs/workers/#custom-worker-classes. По мере выполнения задачи статус обновляется в базе, и если пользователь запрашивает статус задачи, API идёт в базу, выясняет его и отдаёт пользователю.

Видимо, нужно будет сделать таблицу задач и, скорее всего, таблицу pipeline-а обработки.

В рамках этой задачи хочется сделать таблицу задач, поднять Redis и сделать модуль для задач, откуда worker-ы смогут их подбирать.

Плюсы такого решения следующие:

Минусы:

Kraysent commented 5 months ago

Очень хочется в рамках этой же задачи в mermaid или https://draw.io или аналоге нарисовать и поддерживать диаграмму взаимодействия наших и внешних сервисов между собой (как то: API, worker-ы, Postgres, CDS, внешние большие каталоги и так далее), потому что система становистя относительно сложной и хочется иметь рисунок.

Kraysent commented 5 months ago

В качестве MVP хочется иметь следующее:

После выполнения шагов выше можно сделать задачу которая получает доступ к БД и пишет в неё что-то.