[amazon-web-services] Docker 컨테이너를 확장하려면 AWS Elastic Beanstalk 또는 Amazon EC2 Container Service (ECS)를 사용해야합니까?

여러 마이크로 서비스로 구성된 Docker 기반 애플리케이션을 개발했습니다. Amazon SQS 메시지를 소비하고 처리해야합니다. 처음에는 AWS Elastic Beanstalk를 사용하고 싶었지만 EC2 컨테이너 서비스에 넘어갔습니다. 이제 어떤 것을 선택해야할지 모르겠습니다.

현재 Elastic Beanstalk는 Multi-Container-Environments를 지원합니다. 모든 마이크로 서비스에는 도커 컨테이너 내부에 자체 애플리케이션 서버가 있기 때문에 훌륭합니다. 다음 문제는 확장입니다.

스케일링 메커니즘이 어떻게 작동하는지 모르겠습니다. 예 : Elastic Beanstalk 환경에 5 개의 도커 컨테이너가 있습니다. 이제 다섯 번째 도커 컨테이너 만 처리 할 SQS 메시지가 엄청나게 많기 때문에 부하가 높고 나머지 4 개는 CPU가 많이 필요하지 않거나 SQS 메시지가 많지 않기 때문에 거의 유휴 상태입니다. 다섯 번째 컨테이너가 JBoss 애플리케이션 서버를 실행한다고 가정 해 보겠습니다. 내가 아는 한, 서버는 사용 가능한 CPU / 메모리가 충분하더라도 제한된 양의 병렬 요청 만 사용할 수 있습니다.

JBoss Docker 컨테이너가 요청 량을 처리 할 수 ​​없지만 사용 가능한 CPU / 메모리가 충분한 경우, 물론 동일한 인스턴스에서 두 번째 Docker / JBoss 컨테이너를 자동으로 시작하고 싶습니다. 하지만 CPU / 메모리가 충분하지 않으면 어떻게됩니까? 물론 EB의 자동 확장 그룹을 통해 구성 할 수있는 두 번째 인스턴스에서 회전하고 싶습니다. 이제 두 번째 인스턴스가 회전하지만 5 번째 인스턴스를 제외한 모든 컨테이너는 거의 유휴 상태입니다. 물론 두 번째 인스턴스에서도 불필요한 4 개를 생성하는 것을 원하지 않습니다. 이는 리소스 낭비입니다. 5 번째 만 스폰되고 나머지는 CPU / 메모리 / SQS와 같은 구성 가능한 매개 변수를 기반으로 5 번째 스케일처럼 확장되어야합니다.

Amazon ECS가 그렇게하고 있는지 또는 가능한지 정확히 알 수는 없지만, 일반적으로 인스턴스 / 컨테이너를 기반으로 확장하는이 주제에 대해 인터넷에서 소스를 찾을 수 없습니다.



답변

EB 대 ECS는 실제로 제어 할 수 있습니다. 확장 및 용량을 제어하고 싶습니까, 아니면 더 추상화하고 대신 주로 앱에 집중하고 싶습니까? ECS는 클러스터에서 노드의 크기와 수를 지정해야하고 자동 확장을 사용해야하는지 여부를 지정해야하므로 제어 기능을 제공합니다. EB를 사용하면 Dockerfile을 제공하기 만하면 EB가 노드 수와 크기의 프로비저닝을 조정합니다. 기본적으로 EB 경로를 사용하는 인프라는 잊어 버릴 수 있습니다.

Docker에 대한 EB 설명서는 다음과 같습니다. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

ECS를 사용하면 Dockerfile 배포를 시작하기 전에 먼저 인프라를 구축해야하므로 1) 인프라에 대한 친숙 함과 2) 인프라와 앱에 투자하려는 노력의 수준이 결정됩니다.


답변

죽은 질문을 부활시키는 것이 아니라 누군가에게 도움이되기를 바랍니다.

받아 들여지는 대답은 충분히 명확하지 않습니다. OP는 설명 된 OP에 따라 MCEB (Multi-Container Elastic Beanstalk)가 아닌 ECS를 원합니다. 내가 말할 수있는 한 MCEB는 컨테이너를 인스턴스로 효율적으로 포장하려고하지 않습니다. OP는 “하나만로드 중이면이 항목 만 확장하거나 항상 인스턴스를 확장하고 모든 컨테이너를 시작합니까? 그리고 대답은 “후자”입니다. MCEB는 인스턴스를 확장하고 부하에 관계없이 모든 컨테이너를 시작합니다.

편집하다

당신이 상상하는 아키텍처를 사용하지 마십시오.

마이크로 서비스는 얼마나 마이크로입니까? 그들에게 각각 t2.nano를주는 것이 우스꽝 스럽습니까? 그런 다음 각각을 단일 컨테이너 Docker EB 앱으로 만듭니다. EB 작업자 애플리케이션은 SQS 메시지로 구동 될 수 있습니다. 또는 apex.run을 사용 하십시오 .

1/31/18 수정 :

AWS Fargate는 꽤 멋져 보입니다.

6/5/19 수정 :

가려움증을 해결하기 위해 컨테이너를 조정해야하는 경우 EKS를 사용합니다. 그러나 정말로 이것을 피하십시오. 분산 시스템은 어렵습니다.


답변