Как масштабировать задачи / контейнеры в AWS ECS

Это вводное руководство AWS по развертыванию приложений на основе микросервисов на ECS

Очевидно (как также становится ясно из документации), так называемое определение задачи должно охватывать все ваши контейнеры, которые составляют ваш стек.

т.е. если ваш соответствующий docker-compose.yml файл был сделан из 5 services (в контексте создания докера) все они должны в конечном итоге соответствовать одному и тому же определению задачи ECS (?).

Из того, что я понимаю, это также служит для автоматического обнаружения служб среди контейнеров (как и поведение по умолчанию в docker-compose а также docker swarm);

Проблема заключается в том, что возможность масштабирования, когда дело доходит до ECS (кроме EC2 экземпляр) в соответствии ECS Обслуживание.

Значит ли это, что у вас не может быть масштабирования на уровне контейнера?

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

2 ответа

Вам не нужно иметь все контейнеры в одном и том же определении задачи. Из документов:

Весь ваш стек приложений не обязательно должен существовать в одном определении задачи, и в большинстве случаев онне должен существовать. Ваше приложение может охватывать несколько определений задач, объединяя связанные контейнеры в свои собственные определения задач, каждое из которых представляет отдельный компонент.

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

Что касается масштабирования, вы можете создать сервис для каждого определения задачи. Это позволяет логически разделять компоненты в вашем стеке для независимого масштабирования. Например, если у вас есть 2 службы, одна для фонового API-сервиса и другая для интерфейсного nginx, вы можете создать для них 2 отдельных определения задач, каждое из которых будет масштабироваться независимо.

Возможные причины сгруппировать определения вашего контейнера в одно определение задачи:

  • Они имеют единственное логическое назначение или имеют общий жизненный цикл (начинаются и заканчиваются вместе).
  • Вы хотите масштабировать их вместе.
  • Вы хотите, чтобы контейнеры совместно использовали ресурсы, такие как тома данных.
  • Контейнеры должны работать на одном и том же экземпляре хоста и выполнять такие вещи, как общение через локальный хост.

С другой стороны, если контейнеры выполняют отдельные логические функции, независимо масштабируются, не разделяют жизненный цикл или ресурсы, такие как тома, вам, вероятно, лучше использовать несколько определений / служб задач.

Существует также некоторая документация по архитектуре приложений для ECS, которая объясняет это далее.

Хорошо, ECS только масштабирует задачу, а не 1 контейнера внутри задачи, если вы хотите масштабировать контейнер внутри задачи, вы должны масштабировать задачу со всеми контейнерами. Вы должны создать задачу для каждого сервиса. Помните, AWS считает, что вы хотите запускать задачу только с простым приложением, которое использует службу базы данных из RDS и любую службу, которая может использовать ее, расположенную в инфраструктуре AWS.

Другие вопросы по тегам