на go. deep-map-service
- есть redis message queue
redis-mq
- есть python worker с нейронкой на борту
- есть бд sql lite для хранения ответов воркера.
Сам сервис делает такую работу
- на вход приходит json с координатами квадрата (широта / долгота).
Deep-map-service валидирует запрос. Переводит в нужную систему координат и кладёт в очередь redis задачу, создаёт запись в бд о том что задача id отправлена на обработку и возвращает id.
Далее воркер достаёт эту задачу из очереди и начинает работу.
1. Обновляет запись в базе о том что задача id выполняется.
2. Он выкачивает тайлы с qgis сервера со спутниковыми снимками.
3. Прогоняет их через нейросетку и на выходе выдаёт geoJson с векторном распознованных объектов (дома / дороги). Там ещё идёт всякие сложные преобразования самого json а. Аппроксимация векторных полигонов, обьеленение, удаление выбросов и т д.
4. Когда все тайлы отработаны и json сформирован воркер кладёт geoJson в sqllite
5. чистит за собой хранилище куда сохранял временные файлы (те же тайлы фотографий).
А deep map service при обращении к нему с укозанием id задачи смотрит в базу и возвращает статус сообщения. Если статус done то возвращает geoJson и удаляет запись из бд.
Все работает круто. Но мне её нравится то что worker постоянно висит в памяти и сеточка отжирает добрые 4 гб vidio памяти gpu и жрёт RAM.
У меня все находится в докерах. Я думаю сделать так.
1. Deep-map service получил запрос. Составил задачу положил её в очередь.
2. Если воркер не поднят то поднял бы докер с воркером
3. Вернул бы id.
Далее после того как воркер отработал и от пользователя пришёл запрос получить результат
Deep map service бы проверил очередь на предмет нахождения в ней задач и если задач нет то остановил бы контейнер. И вернул ответ. Стоит ли так делать?
Или создать другой "воркер или агент докер" который будет слушать очередь и поднимать или опускать контейнеры с нужными параметрами. А сервис вместо того чтобы делать это самостоятельно просто клал бы 2 задачи в разные очереди.
1. Поднять контейнер
2. Выполнить задачу id...
если поднимать динамически, вас не будет расстраивать время, которое потребуется модели, чтобы загрузиться на карточку?
Обсуждают сегодня