기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
아마존 기반 규모 조정 정책 SQS
중요
다음 정보와 단계는 사용자 지정 지표로 게시하기 전에 SQS ApproximateNumberOfMessages
queue 속성을 사용하여 인스턴스당 Amazon 대기열 백로그를 계산하는 방법을 보여줍니다. CloudWatch 하지만 이제 지표 수학을 사용하여 자체 지표를 게시하는 데 드는 비용과 노력을 줄일 수 있습니다. 자세한 내용은 지표 수학을 사용하여 목표 추적 조정 정책을 생성하십시오. 단원을 참조하십시오.
이 섹션에서는 Amazon 심플 큐 서비스 (AmazonSQS) 대기열의 시스템 부하 변화에 따라 Auto Scaling 그룹을 조정하는 방법을 보여줍니다. Amazon을 사용하는 방법에 대해 자세히 SQS 알아보려면 Amazon 심플 큐 서비스 개발자 안내서를 참조하십시오.
Amazon SQS 대기열의 활동에 따라 규모를 조정하는 방안을 고려할 수 있는 몇 가지 시나리오가 있습니다. 사용자가 이미지를 업로드하고 그러한 이미지를 온라인으로 사용하는 웹 앱을 예로 들어 보겠습니다. 이 시나리오에서 각 이미지를 게시하려면 먼저 크기를 변경하고 인코딩해야 합니다. 앱은 Auto Scaling 그룹의 EC2 인스턴스에서 실행되며 일반적인 업로드 속도를 처리하도록 구성되어 있습니다. 인스턴스 수준을 항상 최신으로 유지하기 위해 비건전 인스턴스는 해지되고 교체됩니다. 앱은 이미지의 원시 비트맵 데이터를 처리를 위해 SQS 대기열에 넣습니다. 그리고 이미지를 처리한 후, 사용자가 볼 수 있는 처리된 이미지를 게시합니다. 이 시나리오의 아키텍처는 이미지 업로드 수가 항상 일정할 경우, 잘 작동합니다. 그러나 시간이 지남에 따라 업로드 수가 변경되는 경우, 동적 조정을 사용하여 Auto Scaling 그룹 용량의 조정을 고려할 수 있습니다.
올바른 지표에 대상 추적 사용
사용자 지정 Amazon SQS 대기열 지표를 기반으로 하는 대상 추적 조정 정책을 사용하는 경우 동적 규모 조정을 애플리케이션의 수요 곡선에 더 효과적으로 맞출 수 있습니다. 대상 추적에 대한 지표 선택에 대한 자세한 설명은 지표 선택 섹션을 참조하세요.
ApproximateNumberOfMessagesVisible
대상 추적과 같은 CloudWatch Amazon SQS 지표를 사용할 때의 문제는 대기열의 메시지 수가 대기열의 메시지를 처리하는 Auto Scaling 그룹의 크기에 비례하여 변경되지 않을 수 있다는 것입니다. SQS대기열에 있는 메시지 수가 필요한 인스턴스의 수만을 정의하는 것은 아니기 때문입니다. 하지만 Auto Scaling 그룹의 인스턴스 수는 메시지를 처리하는 데 걸리는 시간이나 허용되는 지연 시간(대기열 지연) 등과 같은 여러 요인의 영향을 받을 수 있습니다.
해결 방법은 인스턴스당 백로그 지표와 목표값을 사용하여 인스턴스당 허용 백로그를 유지하는 것입니다. 이 값은 다음과 같이 계산할 수 있습니다.
-
인스턴스당 백로그: 인스턴스당 백로그를 계산하려면
ApproximateNumberOfMessages
queue 속성으로 시작하여 대기열의 길이 (SQS대기열에서 검색할 수 있는 메시지 수) 를 결정합니다. 이 값을 플릿의 실행 용량(Auto Scaling 그룹에서 상태가InService
인 인스턴스 수)으로 나눠서 인스턴스당 백로그를 산출합니다. -
인스턴스당 허용되는 백로그: 목표값을 계산하려면 먼저 애플리케이션에서 허용할 수 있는 지연 시간을 확인하세요. 그런 다음, 허용 가능한 지연 시간 값을 EC2 인스턴스가 메시지를 처리하는 데 걸리는 평균 시간으로 나눕니다.
예컨대, 현재 인스턴스 10개로 구성된 Auto Scaling 그룹이 있고, 대기열(ApproximateNumberOfMessages
)에 표시되는 메시지 수가 1,500개라고 가정해 보겠습니다. 각 메시지의 평균 처리 시간이 0.1초이고 가장 긴 허용 지연 시간이 10초인 경우, 인스턴스당 허용 가능한 백로그는 10/0.1인 100개의 메시지입니다. 즉, 목표 추적 정책의 목표값은 100입니다. 인스턴스당 백로그가 목표 값에 도달하면 스케일 아웃 이벤트가 발생합니다. 인스턴스당 백로그가 이미 150개의 메시지(1,500개의 메시지/10개의 인스턴스)이므로 그룹이 스케일 아웃되고 5개의 인스턴스를 추가하여 목표 값 백분율을 유지합니다.
다음 절차에서는 사용자 지정 지표를 게시하고 이러한 계산에 따라 Auto Scaling 그룹을 조정하도록 구성하는 대상 추적 조정 정책을 생성하는 방법을 보여줍니다.
중요
비용을 절감하기 위해서는 지표 수학을 사용해야 한다는 점을 기억하세요. 자세한 설명은 지표 수학을 사용하여 목표 추적 조정 정책을 생성하십시오. 섹션을 참조하세요.
이러한 구성을 위해 세 가지 방법을 사용할 수 있습니다.
-
SQS대기열의 메시지를 처리하기 위해 EC2 인스턴스를 관리하는 Auto Scaling 그룹입니다.
-
Auto Scaling 그룹의 EC2 인스턴스당 대기열에 CloudWatch 있는 메시지 수를 측정하는 사용자 지정 지표로, Amazon에 전송합니다.
-
사용자 지정 지표와 설정된 목표 값을 기반으로 Auto Scaling 그룹이 확장되도록 구성하는 대상 추적 정책입니다. CloudWatch 경보는 조정 정책을 호출합니다.
다음 다이어그램은 이 구성의 아키텍처를 보여 줍니다.
제한 사항 및 사전 요건
이 구성을 사용하려면 다음과 같은 제한 사항을 숙지해야 합니다.
-
AWS CLI 또는 an을 사용하여 사용자 지정 지표를 SDK 게시해야 합니다. CloudWatch 그런 다음 를 사용하여 지표를 모니터링할 수 AWS Management Console있습니다.
-
Amazon EC2 Auto Scaling 콘솔은 사용자 지정 지표를 사용하는 대상 추적 조정 정책을 지원하지 않습니다. 조정 정책에 대한 사용자 지정 지표를 SDK 지정하려면 AWS CLI 또는 an을 사용해야 합니다.
다음 섹션에서는 수행해야 하는 AWS CLI 작업에 를 사용하도록 안내합니다. 예를 들어, 큐의 현재 사용을 반영하는 지표 데이터를 가져오려면 SQS get-queue-attributes명령을 사용합니다. 이 (가) CLI 설치 및 구성되어 있는지 확인하십시오.
시작하기 전에 사용할 Amazon SQS 대기열이 있어야 합니다. 다음 섹션에서는 대기열 (표준 또는FIFO), Auto Scaling 그룹 및 해당 대기열을 사용하는 애플리케이션을 실행하는 EC2 인스턴스가 이미 있다고 가정합니다. Amazon에 대한 자세한 내용은 Amazon SQS 심플 큐 서비스 개발자 안내서를 참조하십시오.
Amazon SQS 및 인스턴스 스케일 인 보호
인스턴스가 종료될 때 처리되지 않은 메시지는 SQS 대기열로 반환되어 아직 실행 중인 다른 인스턴스에서 처리할 수 있습니다. 오래 실행 중인 작업을 수행하는 애플리케이션의 경우, 인스턴스 스케일 인 방비를 선택적으로 사용하여 Auto Scaling 그룹이 축소될 때 어떤 대기열 작업자를 해지할지 제어할 수 있습니다.
다음 유사 코드는 오래 실행되는 대기열 기반 작업자 프로세스가 축소 시 해지되지 않도록 방지하는 한 가지 방법을 보여 줍니다.
while (true) { SetInstanceProtection(False); Work = GetNextWorkUnit(); SetInstanceProtection(True); ProcessWorkUnit(Work); SetInstanceProtection(False); }
자세한 설명은 인스턴스 종료를 정상적으로 처리하도록 애플리케이션을 설계하십시오. 섹션을 참조하세요.