728x90
728x90
FIFO Queue 순서가 보장되는 큐이다. 즉 선입선출 구조로 먼저 들어온 메시지가 먼저 처리되서 나간다는 것이다. producer 가 대기열에 메시지를 넣은 순서대로 consumer 가 메시지를 읽는다. 순서를 강제하기 때문에 SQS queue 는 제한된 처리량을 갖는다. 단일 메시지는 초당 300개의 메시지를 처리하고 묶음으로 보내진 메시지는 초당 3000개를 처리할 수 있다. 대기열에서 자동으로 중복을 제거해준다. 순서대로 메시지를 처리해주기 때문에 순서를 유지할 필요가 있을 때 FIFO 큐를 사용하면 된다. SQS with Auto Scaling Group SQS 대기열에서 메시지를 폴링하는 오토 스케일링 그룹이 있다. 대기열의 메시지 양에 따라 인스턴스를 스케일링 할 수 있다. 대기열에 부하가..
Request-Response Systems 먼저 requester 들이 있다. 해당 사용자들이 모든 요청을 대기열로 보낸다. producer 와 응답을 분리하고 중간에서 SQS 를 이용하는 방식으로 request 와 response 양을 스케일링할 수 있다. 오토 스케일링 그룹에 consumer 들이 존재한다. 이 녀석들이 SQS 대기열에서 사용하고자 하는 애플리케이션들이다. 여기서 핵심은 producer 가 메시지를 SQS 대기열에 넣을 때 correlation ID 와 응답할 대기열의 이름을 같이 넣는다. 즉, '이 메시지를 받으면 대기열 1에서 응답할 수 있도록' 라는 것이다. 이제 consumer 는 대기열에서 request 를 읽고 처리한 후 response 를 만든다. 만약 response ..
Delay Queue 대기열 지연은 consumer 들이 메시지를 바로 보지 못하도록 메시지를 일부러 지연시키는 것을 뜻한다. 최대 15분 까지 지연시킬 수 있고 기본값은 0초 이다. 대기열 레벨에서 기본값으로 대기열 지연 시간을 지정하거나 매번 메시지를 보낼 때 마다 DelaySeconds 파라미터를 사용하여 메시지 별 지연 시간을 지정할 수 있다. 즉, 대기열이 있고 consumer 가 그 대기열로 메시지를 보냈을 때 해당 메시지를 얼마나 지연시킬지에 대한 기본값을 가지고 있는 것이다. Long Polling consumer 가 대기열에 메시지를 요청하는데 대기열에 메시지가 없으면 메시지가 도착할 때 까지 기다리고 이를 Long Polling 이라고 부른다. 롱 폴링을 하는 이유는 두가지이다. 지연 ..
SQS - Dead Letter Queue Message Visibility Timeout 내에 메시지를 처리하지 못하는 시나리오가 있다고 가정한다. 메시지는 자동으로 SQS 대기열로 복귀한다. consumer 는 메시지를 읽다가 오류가 발생하였거나 Message Visibility Timeout 를 초과하였을 수도 있다. 이런 식으로 계속해서 메시지가 대기열로 복귀를 반복하게 되면 문제가 발생한다. 즉, 이렇게 메시지가 다시 대기열로 돌아로는 과정이 반복되서 진행되는 것을 막아주기 위해 해당 과정을 몇 번 반복할 것인지 임계값을 설정할 수 있다. 이 최대 수신 임계값을 초과하면 SQS 는 메시지가 이상하다는 것을 감지한다. 즉, 많은 처리 시도가 있었지만 최종적으로는 메시지를 처리하지 못했기 때문에 해..
SQS - Message Visibility Timeout Message Visibility Timeout 라는 중요한 개념을 알아야 한다. consumer 가 메시지를 폴링하면 그 메세지는 다른 소비자들에게 보이지 않게 된다. 기본 Message Visibility Timeout 시간은 30초로 설정되어 있고, consumer 가 메시지를 폴링하는 순간부터 다른 consumer 가 메시지를 요청하는 API 를 보내도 현재 폴링된 메시지가 반환되지 않는다. 언제까지? Message Visibility Timeout 인 30초가 지날 때 까지. Message Visibility Timeout 이 초과되고 메시지가 처리되지 않아 대기열에서 삭제되지 않은 경우 메시지는 다시 대기열에서 폴링 요청이 올 때 까지..
SQS Queue Access Policy SQS 대기열 정책은 리소스 정책이라는 점에서 S3 버킷과 유사하다. 예시 1) 교차 계정 액세스를 허용하고자 할 때, 어떤 계정에 SQS 대기열이 있고 다른 계정에서 그 대기열에 액세스해야 된다고 가정한다. 위 사진과 같이 생긴 대기열 액세스 정책을 생성하고 이 정책을 SQS 대기열에 입력해줘야 한다. 또한, Principal 을 보면 EC2 인스턴스가 SQS 대기열에 접근할 수 있도록 허가해준 것을 알 수 있다. 즉, SQS 대기열 액세스 정책은 EC2 인스턴스가 다른 계정의 SQS 대기열에 액세스하여 메시지를 폴링할 수 있도록 했다. 예시 2) S3 버킷에 객체를 업로드하면 SQS 대기열에 자동으로 메시지를 보내도록 설정할 수 있다. SQS 대기열에서 액세..