Я розробив додаток на основі 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, чи це взагалі можливо, але я дійсно не можу знайти в Інтернеті жодного джерела про цю тему, що, як правило, масштабується на основі екземплярів / контейнерів.