Чи слід використовувати AWS Elastic Beanstalk або службу контейнерів Amazon EC2 (ECS) для масштабування контейнерів Docker?


81

Я розробив додаток на основі Docker, що складається з безлічі мікросервісів. Він повинен споживати повідомлення SQS Amazon і обробляти їх. Спочатку я хотів використовувати AWS Elastic Beanstalk, але потім я впав через службу контейнерів EC2. Зараз я не знаю, який із них вибрати.

На даний момент Elastic Beanstalk підтримує багатоконтейнерні середовища. Це чудово, оскільки кожна мікросервіс має власний сервер додатків усередині контейнера докера. Наступною проблемою є масштабування:

Я не знаю, як працює механізм масштабування. Наприклад: У моєму пружному середовищі Beanstalk є 5 контейнерів для докерів. Зараз лише п'ятий контейнер докера знаходиться під великим навантаженням, оскільки він має величезну кількість SQS-повідомлень для обробки, решта чотири майже не працюють, оскільки їм не потрібно багато процесора або, можливо, не багато повідомлень SQS. Припустимо, 5-й контейнер запускає сервер додатків JBoss. Наскільки мені відомо, сервер може споживати лише обмежену кількість паралельних запитів, навіть якщо в наявності достатньо ЦП / пам'яті.

Якщо контейнер JBoss Docker не може обробляти кількість запитів, але є достатньо CPU / пам'яті, звичайно, я хочу автоматично запустити другий контейнер Docker / JBoss на тому ж екземплярі. Але що станеться, якщо мені не вистачає процесора / пам'яті? Звичайно, я хочу обертатись на другому екземплярі, який можна налаштувати за допомогою групи автоматичного масштабування в EB. Зараз обертається другий екземпляр, але кожен контейнер, крім 5-го, майже не працює, звичайно, я не хочу, щоб вони також породили 4 непотрібних у другому екземплярі, що було б марною тратою ресурсів. Тільки 5-ий повинен ікру, а інші повинні масштабуватися як 5-й масштаб на основі конфігурованих параметрів, таких як: CPU / пам'ять / SQS.

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


Ви відчуваєте, що вашу проблему вирішено? У мене дуже схоже занепокоєння щодо EB, я підозрюю, що він запускає всі 5 контейнерів в окремий екземпляр
Cameron Singe

3
Я також розгублений. Вибрана відповідь насправді не пояснює, як масштабування працює в обох службах. Також ECS / EB насправді запускає ще 5-й контейнер, а потім виконує обидва паралельно на одному екземплярі, якщо ресурсів достатньо?
codepushr

Відповіді:


69

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) рівня зусиль, які ви хочете витратити на інфраструктуру проти програми.


7
Так, але як працює механізм автоматичного масштабування обох служб, чи масштабує Elastic Beanstalk контейнери на контейнер, тому, якщо завантажений лише один, він масштабує лише цей, або завжди масштабує екземпляри та запускає всі контейнери, незалежно від того, під яким навантаженням вони знаходяться?
orbatschow

6
Тепер, коли ECS є GA, EB використовує ECS для забезпечення своєї багатоконтейнерної інфраструктури. Автомасштабування здійснюється за допомогою типового примітиву групи автоматичного масштабування EC2. Фактором запуску для збільшення або зменшення є не контейнер, а вузол екземпляра. Тобто, якщо трафік мережевого інтерфейсу або завантаження процесора або навантаження диска досягають певного порогу, тоді кластер може масштабуватися або збільшуватися. Отже, у вашому прикладі, якщо вузол 5-го контейнера перебуває під великим завантаженням процесора, ви можете встановити автоматичний тригер групи масштабування на основі на тому.
alanwill

Ось кілька ресурсів, які допоможуть і вам: aws.amazon.com/blogs/aws/aws-elastic-beanstalk-for-docker docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
alanwill

Також зауважте, що ви можете дотримуватися більш контрольованого підходу ECS, орієнтованого на контейнери, і відкласти відповідальність за управління кластером, використовуючи AWS Fargate .
dmulter

Як щодо цін? Це інакше?
Даніель Вілела

12

Не воскрешати мертве питання, але, сподіваємось, це комусь допомагає.

Прийнята відповідь є недостатньо чіткою: виходячи з того, що описав OP, OP бажає ECS, а не багатоконтейнерну еластичну квасольку (MCEB). Наскільки я можу зрозуміти, MCEB ніколи не намагається ефективно упакувати контейнери в екземпляри. OP запитує у коментарі: "якщо лише один завантажений, він масштабує лише цей, або завжди масштабує екземпляри та запускає всі контейнери, незалежно від того, під яким навантаженням вони перебувають?" І відповідь "остання"; MCEB масштабує екземпляри та запускає всі контейнери, незалежно від того, під яким навантаженням вони перебувають.

Редагувати

Не використовуйте архітектуру, яку ви собі уявляєте.

Наскільки мікро-ваші мікросервіси? Чи було б смішно давати їм кожному t2.nano? Потім зробіть кожен з них одноконтейнерною програмою Docker EB - робочі програми EB можуть керуватися повідомленнями SQS. Або скористайтеся apex.run .

Редагувати 31.01.18:

AWS Fargate здається досить крутим.

Редагувати 5/6/19:

Використовуйте EKS, якщо вам потрібно організувати контейнери для задоволення свербежу. Але насправді, намагайтеся уникати цього. Розподілені системи важкі.


1
Він робить саме це. Для нас це не є великою проблемою, оскільки ми структуруємо наші програми у стиці, де зазвичай нормально, що вони масштабуються разом. Якщо це потрібно для програми для самостійного масштабування, я б сказав, що це повинна бути інша програма на EB. Я справді намагаюся придумати хороший сценарій, коли це потрібно. Я читав багато випадків, коли люди заявляли про це бажання, і я не можу вирішити, чи це просто академічна, проблема дизайну чи справді обґрунтована справа.
Jacob Thomason 02
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.