여러 마이크로 서비스로 구성된 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가 그렇게하고 있는지 또는 가능한지 정확히 알 수는 없지만, 일반적으로 인스턴스 / 컨테이너를 기반으로 확장하는이 주제에 대해 인터넷에서 소스를 찾을 수 없습니다.