아마존 SQS 가시성 타임아웃 - Amazon Simple Queue Service

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

아마존 SQS 가시성 타임아웃

소비자가 Amazon SQS 대기열에서 메시지를 수신하면 해당 메시지는 대기열에 남아 있지만 다른 소비자는 일시적으로 볼 수 없게 됩니다. 이러한 일시적인 투명성은 다른 소비자가 동일한 메시지를 작업하는 동안 처리하지 못하도록 하는 메커니즘인 가시성 제한 시간에 의해 제어됩니다. SQSAmazon은 메시지를 자동으로 삭제하지 않습니다. 대신 소비자는 메시지가 성공적으로 처리된 후 DeleteMessage 작업을 사용하여 메시지를 명시적으로 삭제해야 합니다.

가시성 제한 시간 동안 요청이 처리되는 방식을 보여주는 타임라인 그래프

제한 시간 초과 설정

Amazon의 가시성 제한 시간은 메시지가 소비자에게 반환되는 즉시 SQS 시작됩니다. 이 기간 동안 소비자는 메시지를 처리하고 삭제해야 합니다. 그러나 가시성 제한 시간이 만료되기 전에 소비자가 메시지를 삭제하지 않으면 대기열에 메시지가 다시 표시되고 다른 소비자가 해당 메시지를 검색할 수 있습니다.

모든 Amazon SQS 대기열의 기본 가시성 제한 시간은 30초이지만 애플리케이션의 필요에 따라 이 설정을 조정할 수 있습니다. 일반적으로 애플리케이션에서 메시지를 처리하고 삭제하는 데 필요한 최대 시간과 일치하도록 가시성 제한 시간을 설정하는 것이 가장 좋습니다. 큐의 전체 타임아웃 설정을 변경하지 않고도 개별 메시지에 대해 특정 가시성 타임아웃을 구성할 수도 있습니다.

기내 메시지 및 할당량

SQSAmazon에서 기내 메시지는 소비자가 대기열에서 수신했지만 아직 삭제되지 않은 메시지입니다. 표준 대기열의 경우 대기열 트래픽 및 메시지 백로그에 따라 전송 중 메시지 수가 최대 약 120,000개까지 제한될 수 있습니다.

  • 짧은 폴링 — 짧은 폴링을 사용하는 동안 이 한도에 SQS 도달하면 Amazon은 일부 진행 중 메시지가 삭제될 때까지 추가 메시지를 수신할 수 없다는 OverLimit 오류를 반환합니다.

  • 긴 폴링 — 긴 폴링을 사용하는 경우 SQS Amazon은 기내 메시지 한도에 도달해도 오류를 반환하지 않습니다. 대신, 진행 중인 메시지 수가 한도 아래로 떨어질 때까지 새 메시지를 반환하지 않습니다.

기내 메시지를 효과적으로 관리하고 이 할당량에 도달하지 않도록 하려면:

  1. 즉시 삭제 — 메시지가 성공적으로 처리되는 즉시 삭제되도록 하여 진행 중인 메시지 수를 줄이십시오.

  2. 모니터링 기능 CloudWatch — CloudWatch Amazon을 사용하여 전송 중인 메시지 수를 모니터링하고 한도에 도달하면 알림을 받도록 알람을 설정합니다.

  3. 부하 분산 — 대량의 메시지를 처리하는 경우 부하를 분산하고 병목 현상을 방지하기 위해 대기열 수를 늘리는 것을 고려해 보십시오.

  4. 할당량 증가 요청 — 필요한 경우 다음 주소로 지원 요청을 제출하십시오. AWS 신청서의 기내 메시지 할당량을 늘리려면

표준 및 대기열의 가시성 타임아웃에 대한 이해 FIFO

Amazon의 가시성 제한 시간은 표준 및 FIFO 대기열 모두에서 메시지 처리를 SQS 관리하여 중복 처리를 방지하고 메시지 순서를 유지합니다.

  • 표준 대기열 — 표준 대기열에서 가시성 제한 시간은 여러 소비자가 동일한 메시지를 동시에 처리하는 것을 방지하는 데 도움이 됩니다. 그러나 SQS Amazon의 최소 1회 배송 모델로 인해 표시 제한 시간 동안 메시지가 두 번 이상 전송되지 않을 것이라는 절대적인 보장은 없습니다.

  • FIFO대기열 — 입력 FIFO (선입선출) 대기열에서는 가시성 제한 시간이 초과되므로 메시지 그룹 ID가 동일한 메시지가 올바른 순서로 처리됩니다. 소비자가 공개 제한 시간이 만료되기 전에 메시지를 삭제하지 않으면 메시지가 다시 표시되거나 삭제될 때까지 동일한 그룹 ID를 가진 새 메시지가 전달되지 않습니다. FIFO큐의 경우 메시지 순서와 처리 무결성을 유지하기 위해 가시성 타임아웃을 신중하게 관리하는 것이 특히 중요합니다.

소비자가 메시지를 처리하지 못하면 어떻게 되나요?

소비자가 애플리케이션 오류, 충돌 또는 연결 문제와 같은 문제로 인해 메시지 처리에 실패하고 가시성 제한 시간이 만료되기 전에 메시지를 삭제하지 않으면 메시지가 자동으로 대기열에 다시 표시됩니다. 메시지가 표시되면 동일한 소비자 또는 다른 사용자가 메시지를 검색하여 다른 처리를 시도할 수 있습니다. 이 프로세스를 통해 초기 처리가 실패하더라도 메시지가 손실되지 않습니다.

하지만 가시성 제한 시간을 너무 높게 설정하면 처리되지 않은 메시지가 다시 나타나는 시간이 지연되어 재시도 속도가 느려질 수 있다는 점에 유의해야 합니다. 메시지를 적시에 처리하려면 예상 처리 시간을 기준으로 적절한 가시성 제한 시간을 설정하는 것이 중요합니다.

가시성 타임아웃 변경 및 종료

필요에 따라 메시지 처리를 관리하는 ChangeMessageVisibility 작업을 SQS 사용하여 Amazon에서 가시성 제한 시간을 변경하거나 종료하십시오.

  • 타임아웃 변경 — 초기 가시성 타임아웃이 충분하지 않은 경우 작업을 사용하여 타임아웃을 조정할 수 있습니다. ChangeMessageVisibility 이 작업을 통해 처리 요구 사항에 따라 제한 시간을 단축하거나 연장할 수 있습니다.

  • 타임아웃 종료 - 수신된 메시지를 처리하지 않기로 결정한 경우 액션을 통해 를 0초로 설정하여 가시성 VisibilityTimeout 타임아웃을 종료할 수 있습니다. ChangeMessageVisibility 그러면 다른 소비자가 메시지를 즉시 처리할 수 있게 됩니다.

모범 사례

제한 시간을 설정SQS, 조정 및 연장하고 Dead-Letter Queues () 를 사용하여 처리되지 않은 메시지를 처리하는 등 Amazon에서 가시성 제한 시간을 관리하는 데 다음 모범 사례를 사용하십시오. DLQs

  • 타임아웃 설정 및 조정 먼저 애플리케이션이 메시지를 처리하고 삭제하는 데 일반적으로 필요한 최대 시간과 일치하도록 가시성 제한 시간을 설정하세요. 정확한 처리 시간이 확실하지 않은 경우 제한 시간을 더 짧게 (예: 2분) 시작한 다음 필요에 따라 연장하십시오. 하트비트 메커니즘을 구현하여 가시성 제한 시간을 주기적으로 연장하여 처리가 완료될 때까지 메시지가 표시되지 않도록 할 수 있습니다. 이렇게 하면 처리되지 않은 메시지를 재처리하는 데 따른 지연이 최소화되고 메시지가 너무 빨리 표시되는 것을 방지할 수 있습니다.

  • 제한 시간 연장 및 12시간 제한 처리. 처리 시간이 다르거나 처음 설정된 제한 시간을 초과할 수 있는 경우 ChangeMessageVisibility 작업을 사용하여 메시지가 처리되는 동안 가시성 제한 시간을 연장하십시오. 가시성 제한 시간은 메시지가 처음 수신된 시점부터 최대 12시간으로 제한된다는 점에 유의하세요. 제한 시간을 연장해도 12시간 제한은 초기화되지 않습니다. 처리에 이 한도보다 더 많은 시간이 필요한 경우 다음을 사용해 보세요. AWS Step Functions 작업을 더 작은 단계로 나눌 수도 있습니다.

    실제로는 메시지 수신과 제한 시간 업데이트 사이에 지연이 있는 경우 가시성 제한 시간을 최대 12시간으로 설정하는 것이 즉시 실패할 수 있습니다. 이를 방지하려면 약간 낮은 값 (예: 43,195초) 을 사용하십시오.

  • 처리되지 않은 메시지 처리 여러 번의 처리 시도에 실패한 메시지를 관리하려면 Dead-Letter Queue () 를 구성하십시오. DLQ 이렇게 하면 여러 번 재시도해도 처리할 수 없는 메시지를 추가 분석 또는 처리를 위해 별도로 캡처하여 기본 큐에서 반복적으로 순환하는 것을 방지할 수 있습니다.