55

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

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

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

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

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

+0

Считаете ли вы, что проблема решена? У меня очень похожая озабоченность по поводу EB, я подозреваю, что она запускает все 5 контейнеров в отдельном экземпляре. –

+2

Я тоже смущен. Выбранный ответ на самом деле не объясняет, как масштабирование работает в обеих службах. Также ECS/EB действительно ударяет по еще одному 5-му контейнеру, а затем запускается параллельно в одном экземпляре, если ресурсов достаточно? – codepushr

ответ

47

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

Вот документация EB на Докер: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

С ЭКС вам придется строить инфраструктуру первых, прежде чем приступить к установке на Dockerfile так что это действительно сводится к 1) ваше знакомство с инфраструктурой и 2) уровень усилий, который вы хотите потратить на инфраструктуру и приложение.

+5

Да, но как работает механизм автомасштабирования обеих служб, делает ли эластичный бобовый мешок контейнерами в контейнере, поэтому, если только один находится под нагрузкой, он масштабирует только этот, или он всегда масштабирует экземпляры и запускает все контейнеры, независимо от того, какой груз они являются? – orbatschow

+5

Теперь, когда ECS является GA, EB использует ECS для обеспечения его многоконтейнерной инфраструктуры. Автомасштабирование выполняется с использованием типичного примитива групповой групповой модели EC2. Триггерный коэффициент масштабирования вверх или вниз не является контейнером, а узлом экземпляра. То есть если трафик сетевого интерфейса или загрузка процессора или загрузка диска достигают определенного порога, тогда кластер может масштабироваться или находиться внутри. Таким образом, в вашем примере, если узел пятого контейнера находился под большой загрузкой процессора, вы могли установить триггер автоматической масштабирования на основе что. – alanwill

+0

Вот некоторые ресурсы, которые помогут вам: https://aws.amazon.com/blogs/aws/aws-elastic-beanstalk-for-docker/ http://docs.aws.amazon.com/elasticbeanstalk/latest /dg/create_deploy_docker_ecs.html – alanwill

4

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

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

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

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

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

Редактировать 1/31/18

AWS Fargate кажется довольно прохладно.

+1

Он делает именно это. Для нас это не проблема, потому что мы структурируем наши приложения в стеке, где обычно хорошо, что они масштабируются вместе. Если это необходимо для приложения для масштабирования независимо, я бы сказал, что это должно быть другое приложение для EB. Я действительно стараюсь думать о хорошем сценарии, где это необходимо. Я читал много случаев, когда люди заявляли об этом желании, и я не могу решить, является ли это просто академическим, проблемой дизайна или действительно действительным случаем. –

 Смежные вопросы

  • Нет связанных вопросов^_^