Подтвердить что ты не робот

Должен ли я использовать AWS Elastic Beanstalk или Amazon EC2 Container Service (ECS) для масштабирования контейнеров докеров?

Я разработал приложение на основе Docker, состоящее из нескольких микросервисов. Он должен потреблять сообщения Amazon SQS и обрабатывать их. Сначала я хотел использовать AWS Elastic Beanstalk, но потом я упал на EC2 Container Service. Теперь я не знаю, какой из них выбрать.

На данный момент Elastic Beanstalk поддерживает многоконтейнерные среды. Это здорово, потому что каждый микросервис имеет свой собственный сервер приложений внутри контейнера докеров. Следующая проблема заключается в масштабировании:

Я не знаю, как работает механизм масштабирования. Например: у меня есть 5 докеров-контейнеров в моей эластичной среде Beanstalk. Теперь только пятый контейнер докеров находится под большой нагрузкой, потому что у него есть огромное количество сообщений SQS для обработки, остальные четыре почти бездействуют, потому что им не нужно много CPU или, возможно, не так много сообщений SQS. Предположим, что 5-й контейнер запускает сервер приложений JBoss. Насколько я знаю, сервер может потреблять ограниченное количество параллельных запросов, даже если имеется достаточное количество CPU/памяти.

Если контейнер JBoss Docker не способен обрабатывать количество запросов, но имеется достаточное количество CPU/памяти, конечно, я хочу автоматически запустить второй контейнер Docker/JBoss в том же экземпляре. Но что произойдет, если мне не хватает процессора/памяти? Конечно, я хочу вращаться на втором экземпляре, который настраивается через группу автомасштабирования в EB. Теперь второй экземпляр вращается, но каждый контейнер, за исключением 5-го, почти бездействует, конечно, я не хочу, чтобы они вторгались во второй случай тоже, что было бы пустой тратой ресурсов. Только пятый должен появиться, а остальные должны масштабироваться, как 5-й масштаб, на основе настраиваемых параметров, таких как: CPU/memory/SQS.

Я точно не знаю, делает ли Amazon ECS это, или, если это вообще возможно, но я действительно не могу найти какой-либо источник в Интернете по этой теме, что в общем сказано, масштабирование на основе экземпляров/контейнеры.

4b9b3361

Ответ 1

EB против ECS действительно сводится к контролю. Вы хотите контролировать масштабирование и пропускную способность, или хотите, чтобы они были более абстрактными и вместо этого фокусировались прежде всего на вашем приложении. ECS даст вам контроль, так как вам нужно указать размер и количество узлов в кластере и следует ли использовать автоматическое масштабирование. С помощью EB вы просто предоставляете Dockerfile, и EB заботится о масштабировании вашего количества и размера узлов, вы в принципе можете забыть об инфраструктуре с помощью маршрута EB.

Здесь документация EB на Docker: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

С ECS вам нужно будет сначала создать инфраструктуру, прежде чем вы сможете начать развертывание файла Docker, так что это действительно сводится к 1) знакомству с инфраструктурой и 2) уровню усилий, которые вы хотите потратить на инфраструктуру, приложение.

Ответ 2

Не воскресить мертвый вопрос, но, надеюсь, это кому-нибудь поможет.

Принятый ответ недостаточно ясен: на основании описанного OP OP хочет ECS, а не Multi-Container Elastic Beanstalk (MCEB). Насколько я могу судить, MCEB никогда не пытается эффективно упаковать контейнеры в экземпляры. OP спрашивает в комментарии: "Если только один загружен, он масштабирует только этот или он всегда масштабирует экземпляры и запускает все контейнеры, независимо от того, под какой нагрузкой они находятся?" И ответ "последний"; MCEB масштабирует экземпляры и запускает все контейнеры, независимо от того, под какой нагрузкой они находятся.

редактировать

Не используйте архитектуру, которую вы себе представляете.

Насколько микро ваши микроуслуги? Было бы смешно давать каждому из них t2.nano? Затем сделайте каждое приложение Docker EB одним контейнером - рабочие приложения EB могут управляться сообщениями SQS. Или используйте apex.run.

Изменить 1/31/18:

AWS Fargate выглядит довольно круто.

Изменить 6/5/19:

Используйте EKS, если вам нужно организовать контейнеры, чтобы удовлетворить зуд. Но на самом деле, постарайтесь избежать этого. Распределенные системы сложны.