215 похожих чатов

Ребята у меня больше архитектурный вопрос. В общем - есть микросервис

на 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...

1 ответов

5 просмотров

если поднимать динамически, вас не будет расстраивать время, которое потребуется модели, чтобы загрузиться на карточку?

Похожие вопросы

Обсуждают сегодня

Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Всем привет. Подскажите, пожалуйста, как вы реализовываете следующий функционал. Допустим есть форма, в которой имеется выпадающий список со значениями. Значения хранятся в БД...
Евгений
7
Хех, данные на форме всегда будут "из прошлого", т.к. перезаполнять поля формы в процессе редактирования пользователем - так себе идея. Пользователь может открыть форму редакт...
Alexander Somov
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Карта сайта