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

Друзья, кто-нибудь работал с контейниризацией node-js микросервисов? Необходимо собрать несколько

сервисов из одного репозитория, зависимости у них прописаны в одном package.json и соответсвенно каждому контейнеру нужны свои зависимости, как их передать в контейнер? Есть вариант хранить node_modules в общем томе и прокидывать через volume либо для каждого контейнера устанавливать свои зависимости из разных package.json, но техлид эти варианты отмёл. Общаются сервисы по очередям, через воркеров bullMQ, кеширует redis. Хз, что он хочет ещё. Какие вообще best practice существуют по архитектуре микросервисов?

"один репозиторий на все 3 приложения (http server + 2 ms)
- 1 package.json
- три разных Dockerfile, для каждого мс
- 1 общий docker-compose.yml
- volumes - нет"
такие вводные

37 ответов

12 просмотров

Все зависимости должны быть в образе, какие еще тома?

Ну вообще этим должен заниматься архитектор, все продумать и приложение писать изначально заточенное в микросервисы. Вам монолит распилить надо? Архитектуру кто делает?

Бест практикс - все зависимости внутри имейджа никаких внешних подключений

Shved
Ну вообще этим должен заниматься архитектор, все п...

Причем тут архитектура. Им я так понял просто надо три имейджа собрать из одного репа

Dmitriy M.
Причем тут архитектура. Им я так понял просто надо...

Я понял что нужно распилить на микросервисы монолит.... Тз хромает

разные package.json и package-lock.json/yarn.lock для каждого приложения конечно. Зачем раздувать образы, и тащить одни и те же node_modules в каждый сервис, когда он все из них не будет использовать? - это надо задать вопрос тех. лиду, я думаю кроме ответа "мне удобней править один файл чем несколько" он не сможет ничего ответить, а это не повод раздувать образы, укудшать скорость деплоймента, хранить больше данных в registry чем надо.

Dmitry Sergeev 🇺🇦
разные package.json и package-lock.json/yarn.lock ...

Мой вариает с одним имейджем потанциально меньше места занимать в сумме будет

Aleksey Lazarev
Мой вариает с одним имейджем потанциально меньше м...

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

Sergei-Bobrov Автор вопроса
Sergei Bobrov
Один имэйдж на все 3 сервиса?

Да, просто запускаете разное.

Sergei-Bobrov Автор вопроса
Shved
Да, просто запускаете разное.

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

Sergei Bobrov
Так не прокатит, тк смысл в том, чтобы была возмож...

Тогда 3 файла пекеджа. Либо в печку Лида.

Sergei Bobrov
Так не прокатит, тк смысл в том, чтобы была возмож...

общий образ даст такую возможность. Через разные entypoint легко разруливается, или через один общий но с разными аргументами

Sergei-Bobrov Автор вопроса
Dmitry Sergeev 🇺🇦
разные package.json и package-lock.json/yarn.lock ...

На самом деле частый паттерн в мире джс почему-то, целые менеджеры монореп пишут, чтобы собирать сервисы с общим пакаджем но в каждом билде только нужные пакеты

Sergei Bobrov
объясните пожалуйста подробнее про entripint?

ну тебе предложили делать один образ на все приложения. Далее стоит задача запустить их в контейнере из этого образа. Ты можешь, запускать нужное тебе приложение указав нужный entrypoint. Например: 1) /opt/app1/server.js - запуск app1 (в терминах куба: command ["node", "/opt/app1/server.js"]) 2) /opt/app2/server.js - запуск app2 (в терминах куба: command ["node", "/opt/app2/server.js"]) Или ты можешь написать entypoint который запускает нужное тебе приложения исходя из аргументов в Dockerfile: ENTRYPOINT ["/entrypoint.sh"] 1) /entrypoint.sh app1 - запуск app1 ( в терминах куба: args: ["app1"] ) 2) /entrypoint.sh app2 - запуск app2 ( в терминах куба: args: ["app2"] ) entrypoint.sh в зависимости от аргумента запускает нужное приложение

Sergei-Bobrov Автор вопроса
Vladimir Chernyshev
На самом деле частый паттерн в мире джс почему-то,...

я договорился с лидом об отказе от lerna, иначе в образ пришлось бы запекать много всего. То есть проблема организационная. Если бы не смог договориться, то на любые жалобы про размер образа и почему он долго качается, отсылал к тому что это lerna и сами так захотели

Dmitry Sergeev 🇺🇦
ну тебе предложили делать один образ на все прилож...

Через sh норм идея... Но лучше 3 разных образа:)

Shved
Через sh норм идея... Но лучше 3 разных образа:)

да, мы так и делаем. Разные образы, разные package.json

Sergei-Bobrov Автор вопроса
Dmitry Sergeev 🇺🇦
ну тебе предложили делать один образ на все прилож...

это у нас один докерфайл на весь реп и в одном контйнере все 3 сервиса крутятся?

Vladimir Chernyshev
Там как раз не пришлось бы

я деталей не помню про lerna, но помню было что-то связано со сборками

Sergei Bobrov
это у нас один докерфайл на весь реп и в одном кон...

1 образ 3 контейнера же, а что где запускать ты разруливаешь через аргументы к энтрипоинту

Sergei-Bobrov Автор вопроса
Shved
1 образ 3 контейнера же, а что где запускать ты ра...

звучит слишком по девопсовски для просто разраба)

Sergei Bobrov
звучит слишком по девопсовски для просто разраба)

Эм...... Ну У вас выбора особо нет. Выше весь дискас был уже... Дык повесьте задачу на девопс, или У вас нет?

Sergei-Bobrov Автор вопроса
Shved
Эм...... Ну У вас выбора особо нет. Выше весь диск...

ок, это я понял уже. А через bind mount можно решить мою задачу? нагуглил такой вариант

Sergei Bobrov
звучит слишком по девопсовски для просто разраба)

Возьмите инструкцию от Дмитрия выше, почитайте, поищите примеры как люди делают. На самом деле так часто делают.... Точно найдете примеры, но он написал чуть ли не под ключ вам всё.

Shved
Возьмите инструкцию от Дмитрия выше, почитайте, по...

На каком варианте в итоге остановиличь? Один докерфайл+ентрипоин?

Aleksey Lazarev
На каком варианте в итоге остановиличь? Один докер...

Я так понимаю что да....вариантов предложили минимум 2

Aleksey Lazarev
Ты прям так любишь до мелочей жевать)

Похвально же! Спасибо мил человек надо говорить:)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта