Как лучше всего упаковывать компонент "подписчик / работник" микросервиса?
У меня есть микросервис с api и подписчиками, которые должны быть написаны на NodeJS в одном репо. Я буду использовать argo-события для прослушивания шины событий и запуска нескольких подписчиков при получении определенного сообщения из шины событий. Подписчики будут запускаться как ресурс Job в Kubernetes при получении сообщения.
Мой вопрос: как лучше всего упаковывать подписчиков в образ Docker? Поскольку микросервис находится в одном репо, содержащем как apis, так и подписчиков, вы (A) создаете один образ для всего микросервиса и просто меняете точку входа / команду для запуска подписчика? Или (B) вы создаете отдельный образ докера для каждого подписчика?
Если (A), как вы думаете, размер изображения вызовет какие-либо проблемы? Если (B), как вы организуете Dockerfiles и управляете конвейером CI/CD с несколькими образами докеров?
1 ответ
Позвольте мне начать с самого начала вашего вопроса. Я предполагаю, что все ваши подписчики и службы API имеют разное поведение и обязанности.
микросервис с api и подписчиками для написания на NodeJS в одном репо
Это подход, который мы обычно видим, когда начинаем с микросервисов, объединяем все наши коды вместе, и у нас есть гигантский репозиторий, в котором хранятся все наши коды, и один единственный конвейер сборки. Это совершенно нормально и довольно просто с точки зрения разработчика, и если только одна команда работает над всем, это может работать нормально, но в течение короткого периода времени. Но это одна из закономерностей, которых следует избегать на самых ранних стадиях. У этого шаблона есть несколько существенных недостатков. Например, небольшое изменение в службе API и всех других службах будет проверяться и создаваться без необходимости, и это действительно влияет на скорость, с которой мы можем перенести простое изменение из таблицы разработчиков в prod env, и вы собираетесь повторно развернуть своих подписчиков. 'пакет без изменений, оставляя усилия для тестирования и новую версию вашего пакета с пустым журналом изменений !!. Кто-то будет утверждать, что у них другая модель развертывания, поэтому они развертывают только пакеты с изменениями, я предполагаю, что они потеряют свою полную автоматизацию. В дополнение к этому существует высокий риск поломки всей сборки из-за небольшого изменения, которое мы только что внесли в службу API. Так что теперь всем остальным пакетам нужно дождаться этого перерыва, чтобы исправить !!. Короче говоря, такая установка в конечном итоге приводит к большому риску зависимости, и если ваша команда будет развиваться и разделиться на несколько команд, это будет хаос. Я упоминаю здесь только несколько проблем, но многие из них в будущем приводят к сбоям в архитектуре.Кто-то будет утверждать, что у них другая модель развертывания, поэтому они развертывают только пакеты с изменениями, я предполагаю, что они потеряют полную автоматизацию. В дополнение к этому существует высокий риск поломки всей сборки из-за небольшого изменения, которое мы только что внесли в службу API. Так что теперь всем остальным пакетам нужно дождаться этого перерыва, чтобы исправить !!. Короче говоря, такая установка в конечном итоге приводит к большому риску зависимости, и если ваша команда будет развиваться и разделиться на несколько команд, это будет хаос. Я упоминаю здесь только несколько проблем, но многие из них в будущем приводят к сбоям в архитектуре.Кто-то будет утверждать, что у них другая модель развертывания, поэтому они развертывают только пакеты с изменениями, я предполагаю, что они потеряют полную автоматизацию. В дополнение к этому существует высокий риск поломки всей сборки из-за небольшого изменения, которое мы только что внесли в службу API. Так что теперь всем остальным пакетам нужно дождаться этого перерыва, чтобы исправить !!. Короче говоря, такая установка в конечном итоге приводит к большому риску зависимости, и если ваша команда будет развиваться и разделиться на несколько команд, это будет хаос. Я упоминаю здесь только несколько проблем, но многие из них в будущем приводят к сбоям в архитектуре.существует высокий риск поломки всей сборки из-за небольшого изменения, которое мы только что внесли в службу API. Так что теперь всем остальным пакетам нужно дождаться этого перерыва, чтобы исправить !!. Короче говоря, такая установка в конечном итоге приводит к большому риску зависимости, и если ваша команда будет развиваться и разделиться на несколько команд, это будет хаос. Я упоминаю здесь только несколько проблем, но многие из них в будущем приводят к сбоям в архитектуре.существует высокий риск поломки всей сборки из-за небольшого изменения, которое мы только что внесли в службу API. Так что теперь всем остальным пакетам нужно дождаться этого перерыва, чтобы исправить !!. Короче говоря, такая установка в конечном итоге приводит к большому риску зависимости, и если ваша команда будет развиваться и разделиться на несколько команд, это будет хаос. Я упоминаю здесь только несколько проблем, но многие из них в будущем приводят к сбоям в архитектуре.
как лучше всего упаковывать подписчиков в образ Docker? Поскольку микросервис находится в одном репо, содержащем как API, так и подписчиков, вы (A) создаете один образ для всего микросервиса и просто меняете точку входа / команду для запуска подписчика? Или (б) вы создаете отдельный образ докера для каждого подписчика?
Лучшая практика для контейнеризации - у каждого контейнера должна быть только одна проблема. Дело в том, что всегда думайте о разделении приложений на несколько контейнеров, и их будет легко масштабировать по горизонтали. В вашем случае попробуйте создать разные образы для каждого подписчика.
как вы думаете, размер изображения вызовет какие-либо проблемы?
Лучшая практика - минимизировать размер образов докеров.
Как вы организуете Dockerfiles и управляете конвейером CI/CD с несколькими образами докеров?
Если вы думаете о нескольких образах докеров (образ / подписчик), почему вы не можете думать о разделении своего гигантского репо. Видите ли, у вас есть куча вопросов из-за этой структуры проекта. Разделите свое репо, создайте конвейер CI/CD для каждой службы и создайте образы докеров для служб индивидуально, без привязки и полной гибкости !!.