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 ответов

9 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта