Amazon SNS 메시지 전송 재시도 - Amazon Simple Notification Service

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

Amazon SNS 메시지 전송 재시도

Amazon SNS에서는 각 전송 프로토콜에 대한 전송 정책을 정의합니다. 서버 측 오류가 발생할 경우(즉, 구독 엔드포인트를 호스팅하는 시스템을 사용할 수 없게 될 경우) Amazon SNS가 메시지 전송을 재시도하는 방식이 전송 정책에 따라 결정됩니다. 전송 정책이 소진되면 Amazon SNS는 전송 재시도를 중지하고 배달 못한 편지 대기열이 구독에 연결되어 있지 않는 한 메시지를 삭제합니다. 자세한 정보는 Amazon SNS 배달 못한 편지 대기열(DLQ)에서 확인하세요.

전송 프로토콜 및 정책

참고
  • HTTP/S를 제외하고 Amazon SNS에서 정의하는 전송 정책을 변경할 수 없습니다. HTTP/S만 사용자 지정 정책을 지원합니다. HTTP/S 전송 정책 생성에서 확인하세요.

  • Amazon SNS는 전송 재시도에 지터링을 적용합니다. 자세한 정보는 AWS 아키텍처 블로그지수 백오프 및 지터 게시물을 참조하세요.

  • HTTP/S 엔드포인트의 총 정책 재시도 시간은 3,600초를 초과할 수 없습니다. 이 값은 고정 한도이며 늘릴 수 없습니다.

[엔드포인트 유형] 전송 프로토콜 즉각 재시도(지연 없음) 단계 프리 백오프 단계 백오프 단계 포스트 백오프 단계 총 시도 횟수
AWS 관리형 엔드포인트 아마존 데이터 파이어호스¹ 3회, 지연 없음 2회, 1초 간격 10회, 1초~20초 범위에서 지수 백오프 사용 100,000회, 20초 간격 100,015회, 23일 동안
AWS Lambda
Amazon SQS
고객 관리형 엔드포인트 SMTP 0회, 지연 없음 2회, 10초 간격 10회, 10초~600초(10분) 범위에서 지수 백오프 사용 38회, 600초(10분) 간격 50회 시도, 6시간 동안
SMS
모바일 푸시

¹ Firehose 프로토콜의 제한 오류의 경우 Amazon SNS는 고객 관리형 엔드포인트와 동일한 전송 정책을 사용합니다.

전송 정책 단계

다음 다이어그램은 전송 정책의 단계를 보여줍니다.

각 전송 정책은 4단계로 구성됩니다.

  1. 즉각 재시도 단계(지연 없음) – 이 단계는 첫 전송 시도 직후에 발생합니다. 이 단계에서는 재시도 간에 지연이 없습니다.

  2. 프리 백오프 단계 – 이 단계는 즉시 재시도 단계 후에 이어집니다. Amazon SNS는 이 단계를 사용하여 백오프 기능을 적용하기 전에 일련의 재시도를 시도합니다. 이 단계에서는 재시도 횟수와 재시도 간의 지연 시간을 지정합니다.

  3. 백오프 단계 – 이 단계에서는 재시도 백오프 함수를 사용하여 재시도 간 지연을 제어합니다. 최소 지연 시간과 최대 지연 시간을 설정한 다음 재시도 백오프 함수를 설정하여 최소 지연 시간부터 최대 지연 시간까지 어느 정도 간격으로 지연을 늘릴 것인지를 정의합니다. 백오프 함수는 Arithmetic, Exponential, Geometric 또는 Linear가 될 수 있습니다.

  4. 포스트 백오프 단계 – 백오프 단계 뒤에 오는 이 단계에서는 재시도 횟수와 재시도 간의 지연 시간을 지정합니다. 이것이 마지막 단계입니다.

HTTP/S 전송 정책 생성

전송 정책과 해당 4단계를 사용하여 Amazon SNS가 HTTP/S 엔드포인트로 메시지 전송을 재시도하는 방법을 정의할 수 있습니다. Amazon SNS를 사용하면 예를 들어 HTTP 서버의 용량을 기반으로 정책을 사용자 지정하려는 경우 HTTP 엔드포인트에 대한 기본 재시도 정책을 재정의할 수 있습니다.

구독 또는 주제 수준에서 HTTP/S 전송 정책을 JSON 객체로 설정할 수 있습니다. 주제 수준에서 정책을 정의하면 주제에 연결된 모든 HTTP/S 구독에 정책이 적용됩니다. 구독 수준에서 전송 정책을 설정하려면 Subscribe 또는 SetSubscriptionAttributes API 작업을 사용할 수 있습니다. 주제 수준에서 전송 정책을 설정하려면 CreateTopic 또는 SetTopicAttributes API 작업을 사용할 수 있습니다. 또는 템플릿의 AWS::SNS::Subscription리소스를 사용할 수도 있습니다. AWS CloudFormation

HTTP/S 서버의 용량에 따라 전송 정책을 사용자 지정해야 합니다. 정책은 주제 속성 또는 구독 속성으로 설정할 수 있습니다. 주제의 모든 HTTP/S 구독이 동일한 HTTP/S 서버를 대상으로 하는 경우 전송 정책을 주제 속성으로 설정하여 주제의 모든 HTTP/S 구독에 정책이 적용되도록 하는 것이 좋습니다. 이렇게 하지 않으면 정책이 대상으로 하는 HTTP/S 서버의 용량에 따라 주제의 각 HTTP/S 구독에 대한 전송 정책을 작성해야 합니다.

요청 정책에서 Content-Type 헤더에 대해서도 알림의 미디어 유형을 지정할 수 있습니다. 기본적으로 Amazon SNS 콘텐츠 유형이 text/plain; charset=UTF-8로 설정된 HTTP/S 엔드포인트로 모든 알림을 보냅니다. Amazon SNS를 사용하면 기본 요청 정책을 재정의할 수 있습니다. 지원 headerContentType 및 제한 사항은 아래 표를 참조하세요.

다음 JSON 객체는 실패한 HTTP/S 전송을 아래와 같이 재시도하도록 Amazon SNS에 지시하는 전송 정책을 나타냅니다.

  1. 지연 없음 단계에서 즉시 3회

  2. 프리 백오프 단계에서 2회(1초 간격)

  3. 10회(1초~60초 범위에서 지수 백오프 사용)

  4. 포스트 백오프 단계에서 35회(60초 간격)

이 샘플 전송 정책에서 Amazon SNS는 메시지를 삭제하기 전에 총 50번의 시도를 합니다. 전송 정책에 지정된 재시도가 소진된 후에도 메시지를 유지하려면 전송할 수 없는 메시지를 배달 못한 편지 대기열(DLQ)로 이동하도록 구독을 구성합니다. 자세한 정보는 Amazon SNS 배달 못한 편지 대기열(DLQ)에서 확인하세요.

참고

또한 이 전송 정책은 maxReceivesPerSecond 속성을 이용하여 초당 10개 이하로 전송을 제한하도록 Amazon SNS에 지시합니다. 이 자체 조절 속도로 인해 전송된 메시지 (아웃바운드 트래픽) 보다 게시된 메시지 (인바운드 트래픽) 수가 더 많을 수 있습니다. 아웃바운드 트래픽보다 인바운드 트래픽이 더 많은 경우 구독에 큰 메시지 백로그가 누적되어 메시지 전송 대기 시간이 길어질 수 있습니다. 전송 정책에서는 maxReceivesPerSecond에 대해 워크로드에 부정적인 영향을 미치지 않는 값을 지정해야 합니다.

참고

이 전송 정책은 application/json에 HTTP/S 알림을 위한 기본 콘텐츠 유형을 재정의합니다.

{ "healthyRetryPolicy": { "minDelayTarget": 1, "maxDelayTarget": 60, "numRetries": 50, "numNoDelayRetries": 3, "numMinDelayRetries": 2, "numMaxDelayRetries": 35, "backoffFunction": "exponential" }, "throttlePolicy": { "maxReceivesPerSecond": 10 }, "requestPolicy": { "headerContentType": "application/json" } }

전송 정책은 재시도 정책과 제한 정책, 요청 정책으로 구성됩니다. 전송 정책에는 총 9개의 속성이 있습니다.

정책 설명 Constraint
minDelayTarget 재시도의 최소 지연 시간입니다.

단위:

1~최대 지연 시간

기본값: 20

maxDelayTarget 재시도의 최대 지연 시간입니다.

단위:

최소 지연 시간~3,600

기본값: 20

numRetries 즉각 재시도, 프리 백오프, 백오프, 포스트 백오프 단계의 재시도를 모두 포함한 총 재시도 횟수입니다. 0~100

기본값: 3

numNoDelayRetries 재시도 간 지연 없이 즉각 수행되는 재시도 횟수입니다. 0 이상

기본값: 0

numMinDelayRetries 재시도 간 지정된 최소 지연 시간으로 프리 백오프 단계에서 수행되는 재시도 횟수입니다. 0 이상

기본값: 0

numMaxDelayRetries 재시도 간 지정된 최대 지연 시간으로 포스트 백오프 단계에서 수행되는 재시도 횟수입니다. 0 이상

기본값: 0

backoffFunction 재시도 간 백오프에 사용되는 모델입니다.

다음 4가지 옵션 중 하나:

  • Arithmetic

  • Exponential

  • Geometric

  • Linear

기본값: Linear

maxReceivesPerSecond 구독별 초당 최대 전송 수입니다. 1 이상

기본값: 제한 없음

headerContentType

HTTP/S 엔드포인트로 전송되는 알림의 콘텐츠 유형입니다.

요청 정책이 정의되지 않은 경우 콘텐츠 유형의 기본값은 text/plain; charset=UTF-8입니다.

구독에 대해 원시 메시지 전송을 비활성화하거나(기본값) 전송 정책이 주제 수준에서 정의된 경우 지원되는 헤더 콘텐츠 유형은 application/jsontext/plain입니다.

구독에서 원시 메시지 전송을 활성화하면 다음과 같은 콘텐츠 유형이 지원됩니다.

  • text/css

  • text/csv

  • text/html

  • text/plain

  • text/xml

  • application/atom+xml

  • application/json

  • application/octet-stream

  • application/soap+xml

  • 애플리케이션/ x-www-form-urlencoded

  • application/xhtml+xml

  • application/xml

Amazon SNS에서는 다음 수식을 사용하여 백오프 단계의 재시도 횟수를 계산합니다.

numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries

3가지 파라미터를 사용하여 백오프 단계의 재시도 빈도를 제어할 수 있습니다.

  • minDelayTarget – 백오프 단계에서 처음 수행하는 재시도에 대한 지연을 정의합니다.

  • maxDelayTarget – 백오프 단계에서 마지막으로 수행하는 재시도에 대한 지연을 정의합니다.

  • backoffFunction – Amazon SNS가 백오프 단계의 첫 재시도부터 마지막 재시도까지의 모든 재시도에 대한 지연을 계산하는 데 사용할 알고리즘을 정의합니다. 4가지 재시도 백오프 함수 중 하나를 사용할 수 있습니다.

다음 다이어그램은 백오프 단계에서 각 재시도 백오프 함수에 따라 재시도 관련 지연이 어떻게 달라지는지를 보여줍니다. 전송 정책의 총 재시도 횟수는 10회, 최소 지연 시간은 5초, 최대 지연 시간은 260초로 설정되어 있습니다. 세로 축은 10번의 재시도 각각에 대한 지연(초)을 나타냅니다. 가로 축은 첫 번째 시도에서 열 번째 시도까지의 재시도 횟수를 나타냅니다.