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

контейнерах:
- 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 ответов

16 просмотров

Мне кажется, вам пора уже в 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. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Hi! Could you please upvote my new notebook? thanks a lot. https://www.kaggle.com/code/melissamonfared/anime-character-generation-dsgan-gan
məru
4
upvote plz https://www.kaggle.com/code/bassetkerouche/swapping-face?scriptVersionId=207300096
benkerrouche Statoinary
1
-- Привет всем. -- Есть csv, проблема в том что он содержит очень много повторов по столбцам и по строкам. -- Решил перекинуть это в базу данных, чтобы было проще. Но я не ша...
Oleg Ivanov
1
Как считаете - вопрос на собесе: «Как быстрее всего запустить ec2 машину в aws (в чистом аккаунте) и показать вывод от любой команды с нее» не очень ли сложный для условного м...
Sergey
50
Господа, у меня вопрос. Что вообще такое этот ваш data science и data scientists? А то гуглю, а мне какую-то расплывчатую фигню говорят.
Inkosta
44
Исходя из ваших комментариев, получается, что чтобы получить марты в CH из данных в PG, неправильно тянуть сырые данные в CH и там их обрабатывать, лепить справочники и джойни...
unhingedlunatic
42
Hi could you please help me with my two new projects? https://www.kaggle.com/code/hesankazemnia/rice-image-classification-cnn-pytorch https://www.kaggle.com/code/hesankazemnia...
Hesan
6
hi, Can you upvote? https://www.kaggle.com/code/durjoychandrapaul/rag-q-a-system-by-langchain-huggingface-for-pdf?scriptVersionId=204704280
A
1
Could you upvote and comment please? https://www.kaggle.com/code/tatianapetrushkevich/beginner-images https://www.kaggle.com/code/tatianapetrushkevich/python-for-beginners1 ...
Tazziyana
7
Карта сайта