Amazon SQS 공정 대기열 - Amazon Simple Queue Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon SQS 공정 대기열

Amazon SQS 공정 대기열은 고객, 클라이언트 애플리케이션 또는 메시지 유형과 같은 여러 논리적 엔터티의 메시지가 포함된 다중 테넌트 대기열에서 노이즈가 많은 이웃에 미치는 영향을 자동으로 완화합니다. 이러한 공유 대기열 환경에서 중요한 성능 지표 중 하나는 유지 시간입니다.이 지표는 메시지의 도착부터 처리까지 대기열에서 소요된 총 시간을 측정합니다. 한 테넌트가 시스템에서 처리할 수 있는 것보다 더 많은 메시지를 게시하여 대기열에 백로그를 생성하면 공정 대기열은 다른 테넌트의 체류 시간에 미치는 영향을 최소화합니다.

정상 상태

다음 다이어그램은 네 개의 개별 테넌트(레이블 A, B, C, D)의 메시지가 포함된 다중 테넌트 대기열을 보여줍니다. 대기열은 안정적인 상태로 작동하며, 소비자가 대기열에 메시지가 나타나는 즉시 메시지를 수신할 때 메시지 백로그가 없습니다. 모든 테넌트의 체류 시간이 짧습니다. 이 안정 상태에서 모든 소비자 용량이 완전히 활용되는 것은 아닙니다.

4개의 서로 다른 테넌트(A,B,C,D로 표시됨)의 메시지를 포함하는 다중 테넌트 대기열입니다. 대기열은 모든 테넌트에 대해 백로그가 없고 유지 시간이 짧으며 테넌트 간에 균등하게 배포된 진행 중인 메시지가 있는 안정 상태에 있습니다.

시끄러운 이웃 영향

노이즈가 많은 이웃 영향은 다중 테넌트 대기열의 한 테넌트가 백로그를 생성하여 다른 모든 테넌트의 메시지 유지 시간을 늘릴 때 발생합니다. 테넌트는 다른 테넌트보다 더 많은 양의 메시지를 보내거나 소비자가 특정 테넌트의 메시지를 처리하는 데 더 오래 걸리는 경우 시끄러운 이웃이 될 수 있습니다.

이 다이어그램은 테넌트 A에서 증가된 트래픽이 대기열에 백로그를 생성하는 방법을 보여줍니다. 소비자는 테넌트 A의 메시지만 처리하는 데 바쁜 반면, 다른 테넌트의 메시지는 백로그에서 대기하여 모든 테넌트의 유지 시간이 늘어납니다.

테넌트 A가 트래픽을 늘리고 대기열에 백로그를 생성할 때의 결과입니다. 테넌트 A의 메시지는 진행 중 상태로 과도하게 표시되며 다른 테넌트의 메시지는 백로그에 멈춰 유지 시간이 길어집니다.

공정 대기열을 사용한 완화

Amazon SQS는 처리 중에 테넌트 간의 메시지 분포를 모니터링하여 시끄러운 이웃을 감지합니다("사용 중" 상태). 테넌트가 다른 테넌트에 비해 전송 중 메시지가 불균형적으로 많은 경우 Amazon SQS는 해당 테넌트를 노이즈가 많은 이웃으로 식별하고 다른 테넌트에 대한 메시지 전송의 우선순위를 지정합니다. 이 접근 방식은 다른 테넌트에 대한 유지 시간 영향을 줄입니다.

이 다이어그램은 Amazon SQS 공정 대기열이 시끄러운 이웃 문제를 해결하는 방법을 보여줍니다. 한 테넌트(테넌트 A)에 노이즈가 발생하면 Amazon SQS는 다른 테넌트(B, C, D)의 메시지 반환을 우선시합니다. 이 우선 순위는 조용한 테넌트 테넌트 B, CD의 유지 시간을 낮게 유지하는 데 도움이 되며, 테넌트 A 메시지의 유지 시간은 다른 테넌트에 영향을 주지 않고 대기열 백로그가 사용될 때까지 상승됩니다.

공정 대기열이 진행 중인 상태를 모니터링하여 시끄러운 이웃 문제를 해결하는 방법을 보여주는 그림입니다. 테넌트 A에 노이즈가 발생하면 SQS는 다른 테넌트(B,C,D)의 메시지를 반환하여 진행 중인 메시지가 테넌트 간에 균등하게 배포되도록 하는 것을 목표로 합니다. 테넌트의 유지 시간(B,C,D)은 낮게 유지되는 반면 테넌트 A의 메시지에 대한 유지 시간은 대기열 백로그가 사용될 때까지 증가합니다.
참고

Amazon SQS는 테넌트당 소비율을 제한하지 않습니다. 소비자 용량이 있고 대기열에 반환할 다른 메시지가 없는 경우 소비자가 시끄러운 이웃 테넌트로부터 메시지를 수신할 수 있습니다. Amazon SQS 표준 대기열과 마찬가지로 공정 대기열은 사실상 무제한의 처리량을 허용하며 대기열에 있을 수 있는 테넌트 수에는 제한이 없습니다.

FIFO 대기열과의 차이점

FIFO 대기열은 각 테넌트의 진행 중인 메시지 수를 제한하여 엄격한 순서를 유지합니다. 이렇게 하면 노이즈가 많은 이웃이 방지되지만 각 테넌트의 처리량이 제한됩니다. 공정 대기열은 높은 처리량, 낮은 체류 시간, 공정한 리소스 할당이 우선순위인 다중 테넌트 시나리오를 위해 설계되었습니다. 공정 대기열을 사용하면 여러 소비자가 동일한 테넌트의 메시지를 동시에 처리하는 동시에 모든 테넌트가 일관된 유지 시간을 유지할 수 있습니다.

공정 대기열 사용

메시지 생산자는 발신 메시지MessageGroupId에를 설정하여 테넌트 식별자를 추가할 수 있습니다.

// Send message with tenant identifier SendMessageRequest request = new SendMessageRequest() .withQueueUrl(queueUrl) .withMessageBody(messageBody) .withMessageGroupId("tenant-123"); // Tenant identifier sqs.sendMessage(request);

공정성 기능은 MessageGroupId 속성이 있는 메시지의 모든 Amazon SQS 표준 대기열에 자동으로 적용됩니다. 소비자 코드를 변경할 필요가 없으며 API 지연 시간에 영향을 주지 않으며 처리량 제한이 없습니다.

공정 대기열 CloudWatch 지표

Amazon SQS는 노이즈가 많은 이웃 영향의 완화를 모니터링하는 데 도움이 되는 추가 CloudWatch 지표를 제공합니다. 예를 들어 Approximate..InQuietGroups 지표를 표준 대기열 수준 지표와 비교할 수 있습니다. 특정 테넌트에 대한 트래픽이 급증하는 동안 일반 대기열 수준 지표에서 백로그 증가 또는 메시지 수명 증가를 확인할 수 있습니다. 그러나 저소음 그룹을 개별적으로 살펴보면 대부분의 비저소음 메시지 그룹 또는 테넌트가 영향을 받지 않음을 식별할 수 있습니다.

아래에서 노이즈가 없는 테넌트(ApproximateNumberOfMessagesVisibleInQuietGroups)에 대한 백로그가 낮게 유지되는 동안 노이즈가 있는 테넌트로 인해 표준 대기열 백로그 지표(ApproximateNumberOfMessagesVisible)가 증가하는 예를 찾을 수 있습니다.

Graph showing queue backlog spike for noisy groups while quiet groups remain low.

Amazon SQS CloudWatch 지표 및 해당 설명의 전체 목록은 Amazon SQS에 대한 CloudWatch 지표를 참조하세요.