Привет, ситуация такова - у меня есть несколько сервисов в

контейнерах:
- MongoDB - просто контейнер с базой;
- db_service - контейнер с API которая принимает файлы (зипованные JSON), распаковывает, валидирует, ищет копии, сохраняет в MongoDB GridFS, версионирует и т.п.
- conversion_service - контейнер с API, которая запускает задачи Celery, проверяет их статус и отдаёт результат.
- celery_worker - в этом сервисе выкачиваются указанные файлы из db_service и происходит конвертация в нужный формат (stp, stl и т.п.).
- Redis - контейнер, использующийся как message broker.
- nginx_proxy - контейнер, в котором крутится nginx, между собой все сервисы общаются только через него, во внешний мир выставлен тоже только он.

После сохранения файла или его апдейта, db_service автоматически дёргает сервис конвертации, так как необходимо иметь определённые форматы уже сконвертированными в момент когда пользователь захочет получить их.
Сейчас между conversion_service и celery_worker есть расшаренный докеровский volume. Запрос о конвертации приходит в conversion_service, тот запускает задачу, celery_worker выкачивает файл из db_service, конвертирует, помещает результат в этот volume. Пользователь проверяет статус задачи, если конвертация прошла, то забирает результат через эндпоинт в conversion_service.
Меня это не совсем устраивает, я думаю, что эти файлы должны отдаваться напрямую nginx'ом. Но, меня смущает, что в таком случае непонятно, как решать, имеет право человек получить данный файл или нет? И вообще, есть мысль перестать хранить файлы в GridFS, складировать в папке в том же зипованном виде, а в MongoDB оставить только мета-данные. Помогите понять, что не так сейчас, что не так может быть в будущем? Что искать в доках nginx по этой теме? Может на примете есть у кого статьи или другие материалы по схожим проблемам?

9 ответов

1 просмотр

Мне кажется, вам пора уже в Service Discovery с таким количеством контейнеров. Какой смысл гонять внутренний трафик через nginx?

Philipp-Bondarev Автор вопроса
Yuri
Мне кажется, вам пора уже в Service Discovery с та...

Мы не знаем где какой сервис, но знаем где nginx, отправляем ему запрос на известный адрес, а он уже смотрит куда переправить, нет? Это плохой подход?

Philipp Bondarev
Мы не знаем где какой сервис, но знаем где nginx, ...

Это не очень нативный подход для микросервисной архитектуры, котороб вы строите.

Philipp Bondarev
Мы не знаем где какой сервис, но знаем где nginx, ...

ну, рано или поздно вы просто забьете nginx своими запросами. Service Discovery для того и нужен, чтобы каждый сервис знал, где сейчас находится другой сервис, чтобы ходить напрямую к нему

Philipp-Bondarev Автор вопроса
Anton Noginov
Это не очень нативный подход для микросервисной ар...

Ну, не сказал бы, что у меня прямо таки микросервисы, просто набор сервисов, а между ними происходит как бы интеграция, то есть, запись в базу будет работать и без конвертации, а конвертировать ты можешь не только файлы из базы. Как-то так, но я не особо опытен в этих делах.

Philipp-Bondarev Автор вопроса
Yuri
ну, рано или поздно вы просто забьете nginx своими...

Спасибо, обязательно почитаю про это.

Philipp Bondarev
Спасибо, обязательно почитаю про это.

https://www.consul.io например, или etcd (если кубер будет)

Philipp Bondarev
Мы не знаем где какой сервис, но знаем где nginx, ...

кубер бери, там уже все костыли написали за тебя и такой примитив там называется Service а твои микросервисы это Deployment, они могут быть заскейлены в N экземпляров, и по имени Service кубер будет балансить запросы между ними

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

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

Добрый день. Созданию отношения таблиц для учёта кораблей, их движения между точками (портами) согласно расписания. Терзают сомнения в правильном ли направлении двигаюсь 😅 1...
Aleksey
1
I have financial chart like this I can mask by color to get green and red squares. I want get two data First i want to get two last squares(two in the very right side colors) ...
@. .@
4
Привет. Наверняка у кого-нибудь здесь есть опыт работы с трекерами (встроенными в OpenCV (KCF) или абстрагированными) на одноплатниках. Если не рассматривать малинку и други...
Georgy Makarov
4
Hi guys Do you know any persian/farsi or english group for opencv?
@. .@
4
Приветствую. Есть N видео объектов (фильмы). Часть полной длины просмотра а часть короткие ( обрезаны титры). Задача найти идентичные фильмы. Я не в курсе, есть ли аналог шаз...
Nikolay Chudinov
7
И всё-таки спрошу насчет такого вариант, сомнительно или нет? (Windows стоять не будет)
Georgy Makarov
5
Приветствую. Подскажите, как можно исправить баланс белого на подобных примерах фото, именно, чтобы брать белый цвет с корпуса теста? А след. шагом будет определение оттенка п...
Volad Malevich
3
https://youtu.be/d8Jx6zO1yw0?si=AvWkrBe-RS3FAlWX Компилировал с CUDA по этому гайду, единственно моменты: 1) С VS 2022 работает, нужно только что бы была установлена среда C...
Denis
3
Кто знает как подружить Gstreamer с OpenCV? Вот такой пайплайн я шлю с гстримера но OpenCV + python у меня никак не получается его воспроизвести "gst-launch-1.0 nvarguscameras...
Artem
3
Как потом сделать чтобы питон видел нахождение скомпилированных файлов? Я через системные переменные пробовал указать расположение но не помогло
Artem
5
Карта сайта