기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SQS 가시성 제한 시간
Amazon SQS 대기열에서 메시지를 받으면 대기열에 남아 있지만 다른 소비자에게 일시적으로 표시되지 않습니다. 이러한 가시성은 가시성 제한 시간에 의해 제어되므로 작업 중에 다른 소비자가 동일한 메시지를 처리할 수 없습니다. AmazonSQS은 처리 후 메시지를 삭제하기 위한 두 가지 옵션을 제공합니다.
-
수동 삭제 -
DeleteMessage
작업을 사용하여 메시지를 명시적으로 삭제합니다. -
자동 삭제 - 특정에서 지원되며 AWS SDKs, 메시지가 성공적으로 처리되면 자동으로 삭제되어 워크플로가 간소화됩니다.
가시성 제한 시간 사용 사례
장기 실행 작업 관리 - 가시성 제한 시간을 사용하여 처리 시간 연장이 필요한 작업을 처리합니다. 처리 시간을 늘려야 하는 메시지에 대해 적절한 가시성 제한 시간을 설정합니다. 이렇게 하면 다른 소비자가 처리 중에 동일한 메시지를 선택하지 않아 중복 작업을 방지하고 시스템 효율성을 유지할 수 있습니다.
재시도 메커니즘 구현 - 초기 제한 시간 내에 완료하지 못한 작업에 대해 프로그래밍 방식으로 가시성 제한 시간을 연장합니다. 초기 가시성 제한 시간 내에 작업이 완료되지 않으면 프로그래밍 방식으로 제한 시간을 연장할 수 있습니다. 이렇게 하면 시스템이 메시지를 다른 소비자에게 표시하지 않고 다시 처리를 시도하여 내결함성과 신뢰성을 개선할 수 있습니다. Dead-Letter Queues(DLQs)와 결합하여 영구 장애를 관리합니다.
분산 시스템 조정 - SQS 가시성 제한 시간을 사용하여 분산 시스템 전반에서 작업을 조정합니다. 다양한 구성 요소에 대한 예상 처리 시간에 맞게 가시성 제한 시간을 설정합니다. 이를 통해 일관성을 유지하고 복잡한 분산 아키텍처에서 레이스 조건을 방지할 수 있습니다.
리소스 사용률 최적화 - 애플리케이션의 리소스 사용률을 최적화하도록 SQS 가시성 제한 시간을 조정합니다. 적절한 제한 시간을 설정하면 리소스를 불필요하게 연결하지 않고도 메시지가 효율적으로 처리되도록 할 수 있습니다. 이로 인해 전반적인 시스템 성능과 비용 효율성이 향상됩니다.
가시성 제한 시간 설정 및 조정
메시지가 전달되는 즉시 가시성 제한 시간이 시작됩니다. 이 기간 동안 메시지를 처리하고 삭제해야 합니다. 제한 시간이 만료되기 전에 삭제하지 않으면 메시지가 대기열에 다시 표시되며 다른 소비자가 검색할 수 있습니다. 대기열의 기본 가시성 제한 시간은 30초이지만 애플리케이션이 메시지를 처리하고 삭제해야 하는 시간에 맞게 조정할 수 있습니다. 대기열의 전체 설정을 변경하지 않고도 개별 메시지에 대한 특정 가시성 제한 시간을 설정할 수도 있습니다. ChangeMessageVisibility
작업을 사용하여 필요에 따라 프로그래밍 방식으로 제한 시간을 연장하거나 단축합니다.
비행 중 메시지 및 할당량
Amazon에서 SQS전송 중 메시지는 소비자가 수신했지만 아직 삭제되지 않은 메시지입니다. 표준 대기열의 경우 대기열 트래픽 및 메시지 백로그에 따라 약 120,000개의 전송 중 메시지가 제한됩니다. 이 제한에 도달하면 Amazon은 OverLimit
오류를 SQS 반환하여 일부 진행 중 메시지가 삭제될 때까지 추가 메시지를 수신할 수 없음을 나타냅니다. FIFO 대기열의 경우 제한은 활성 메시지 그룹에 따라 다릅니다.
-
짧은 폴링 사용 시 - 짧은 폴링을 사용하는 동안이 제한에 도달하면 Amazon은
OverLimit
오류를 SQS 반환하여 일부 전송 중 메시지가 삭제될 때까지 추가 메시지를 수신할 수 없음을 나타냅니다. -
긴 폴링 사용 시 - 긴 폴링을 사용하는 경우 Amazon은 전송 중 메시지 제한에 도달하면 오류를 반환하지 SQS 않습니다. 대신 처리 중 메시지 수가 한도 아래로 떨어질 때까지 새 메시지를 반환하지 않습니다.
전송 중 메시지를 효과적으로 관리하려면:
-
프롬프트 삭제 - 처리 후 메시지를 삭제하여(수동 또는 자동) 진행 중인 수를 줄입니다.
-
를 사용하여 모니터링 CloudWatch - 한도에 도달하지 않도록 높은 전송 중 수에 대한 경보를 설정합니다.
-
로드 분산 - 대량의 메시지를 처리하는 경우 추가 대기열 또는 소비자를 사용하여 로드의 균형을 맞추고 병목 현상을 방지합니다.
-
할당량 증가 요청 - 더 높은 한도가 필요한 경우 AWS Support에 요청을 제출합니다.
표준 및 FIFO 대기열의 가시성 제한 시간 이해
표준 대기열과 FIFO (선입선출) 대기열 모두에서 가시성 제한 시간은 여러 소비자가 동일한 메시지를 동시에 처리하지 못하도록 하는 데 도움이 됩니다. 그러나 Amazon의 전송 모델로 at-least-once 인해 가시성 제한 시간 동안 메시지가 두 번 이상 전송되지 않을 것이라는 절대적인 보장은 SQS없습니다.
-
표준 대기열 - 표준 대기열의 가시성 제한 시간으로 인해 여러 소비자가 동시에 동일한 메시지를 처리할 수 없습니다. 그러나 전송 모델로 인해 at-least-once AmazonSQS은 가시성 제한 시간 내에 메시지가 두 번 이상 전송되지 않을 것이라고 보장하지 않습니다.
-
FIFO 대기열 - FIFO 대기열의 경우 메시지 그룹 ID가 동일한 메시지는 엄격한 순서로 처리됩니다. 메시지 그룹 ID가 인 메시지가 전송 중이면 해당 그룹의 후속 메시지는 전송 중 메시지가 삭제되거나 가시성 제한 시간이 만료될 때까지 사용할 수 없습니다. 그러나 이렇게 해도 그룹이 무기한 '잠금'되지는 않습니다. 각 메시지는 순서대로 처리되며, 각 메시지가 삭제되거나 다시 표시될 때만 해당 그룹의 다음 메시지를 소비자가 사용할 수 있습니다. 이 접근 방식을 사용하면 그룹이 메시지 전송을 불필요하게 잠그지 않고도 그룹 내에서 순서가 지정된 처리를 보장할 수 있습니다.
실패 처리
애플리케이션 오류, 충돌 또는 연결 문제로 인해 가시성 제한 시간이 만료되기 전에 메시지를 처리하고 삭제하지 않으면 대기열에 메시지가 다시 표시됩니다. 그런 다음 동일한 소비자 또는 다른 소비자가 다른 처리 시도를 위해 검색할 수 있습니다. 이렇게 하면 초기 처리가 실패하더라도 메시지가 손실되지 않습니다. 그러나 가시성 제한 시간을 너무 높게 설정하면 처리되지 않은 메시지의 재출현이 지연되어 재시도가 느려질 수 있습니다. 적시에 메시지를 처리할 수 있도록 예상 처리 시간을 기준으로 적절한 가시성 제한 시간을 설정하는 것이 중요합니다.
표시 제한 시간 변경 및 종료
ChangeMessageVisibility
작업을 사용하여 가시성 제한 시간을 변경하거나 종료할 수 있습니다.
-
제한 시간 변경 -를 사용하여 가시성 제한 시간을 동적으로 조정합니다
ChangeMessageVisibility
. 이를 통해 처리 요구 사항에 맞게 제한 시간을 연장하거나 줄일 수 있습니다. -
제한 시간 종료 - 수신된 메시지를 처리하지 않기로 결정한 경우
ChangeMessageVisibility
작업을 통해를 0초VisibilityTimeout
로 설정하여 가시성 제한 시간을 종료합니다. 이렇게 하면 즉시 다른 소비자가 메시지를 처리할 수 있게 됩니다.
모범 사례
제한 시간 설정SQS, 조정 및 연장을 비롯하여 Amazon에서 가시성 제한 시간 관리와 배달 못한 편지 대기열()을 사용하여 처리되지 않은 메시지 처리를 위한 다음 모범 사례를 사용합니다DLQs.
-
제한 시간 설정 및 조정. 먼저 애플리케이션에서 일반적으로 메시지를 처리하고 삭제하는 데 필요한 최대 시간과 일치하도록 표시 제한 시간을 설정합니다. 정확한 처리 시간이 확실하지 않은 경우 더 짧은 제한 시간(예: 2분)으로 시작하고 필요에 따라 확장합니다. 하트비트 메커니즘을 구현하여 주기적으로 가시성 제한 시간을 연장하여 처리가 완료될 때까지 메시지가 보이지 않도록 합니다. 이렇게 하면 처리되지 않은 메시지의 재처리 지연이 최소화되고 조기 가시성이 방지됩니다.
-
제한 시간 연장 및 12시간 제한 처리. 처리 시간이 달라지거나 처음에 설정된 제한 시간을 초과할 수 있는 경우
ChangeMessageVisibility
작업을 사용하여 메시지를 처리하는 동안 가시성 제한 시간을 연장합니다. 표시 제한 시간은 메시지가 처음 수신된 시점으로부터 최대 12시간입니다. 제한 시간을 연장해도 이 12시간 제한은 재설정되지 않습니다. 처리에이 제한보다 많은 시간이 필요한 경우 작업을 사용하거나 더 작은 단계로 AWS Step Functions 나누는 것이 좋습니다. -
처리되지 않은 메시지 처리. 여러 처리 시도에 실패한 메시지를 관리하려면 데드 레터 대기열()을 구성합니다DLQ. 이렇게 하면 추가 분석 또는 처리를 위해 여러 번의 재시도를 수행한 후 처리할 수 없는 메시지를 개별적으로 캡처하여 기본 대기열에서 반복적으로 순환하지 않도록 할 수 있습니다.