AWS Amazon Simple Queue Service(SQS)란?
- Queue는 대기한다는 의미
- SQS는 메시지를 대기하는 기능
- 애플리케이션 간의 느슨한 결합을 제공(Decoupling)
- 시나리오 : 쇼핑몰 주문 어플리케이션
- 이 시나리오를 생각해보자
- 1) 50건만 처리되고 50건은 삭제됨
- 2) 애플리케이션이 매우 느려짐
- 3) 애플리케이션의 에러 및 무응답 및 장애 발생
하지만 SQS를 사용하게 되면
- SQS에서 미리 대기열에 주문정보를 올려 놓는다.
- 그리고 배송 애플리케이션에서는 본인이 처리할 수 있는 만큼만 가져와 처리후 완료 메시지를 보낸다.
- 그리고 본인이 가능한 만큼 요청을 한다. (폴링이라고 함)
- 그메시지를 SQS는 받고 다시 남은 만큼 다시 보내준다.
- 별개의 SQS로 서로 영향을 주지 않는다. (어느 한쪽이 작동하지 않아도 = Decoupling)
SQS Queue
- SQS는 Poll 방식으로 메시지를 전송한다. (Consumer가 메시지를 요청하여 받는 형식)
- Consumer가 메시지를 소비하면 SQS Queue에서는 메시지가 삭제됨
- Producer에서 메시지를 보내고 SQS Queue가 Consumer에게 메시지를 보내는 것이 아니라 Consumer가 메시지를 요청하면 Producer에게 받은 것을 보내준다. (이를 Poll Message라고 한다.)
- 이때 SQS Queue에서 메시지를 삭제한다.
SQS - 표준 대기열 vs FIFO 대기열
표준 대기열 | FIFO 대기열 |
일반적인 대기열 방식 | 선입선출 방식 |
순서와 상관없이 메시지 전달 | 메시지가 들어온 순서대로 처리 |
가끔 2개 이상의 복사본이 전송되기도함 | 복사본(중복메시지) 전달이 없음 |
처리 순서와 상관없는 애플리케이션에 사용 | 처리 순서가 중요한 애플리케이션에 사용 |
예, 순서가 없는 파일 업로드, 순서가 없는 데이터베이스 항목 추가 등 | 예, 소핑물 주문시 결제처리 후 배송 처리 |
SQS - 배달 못한 편지 대기열 (DLQ, Dead Letter Queue)
- SQL의 DLQ기능이다. (데이터 처리하지 못한 것들의 모임)
- 일반적으로 메시지는 처리될동안 계속 여러번 보낸다.
- 하지만 부하가 발생해서 영향을 줄 수 있다. (다른 메시지까지)
- 일정 시도 후 처리안되면 DLQ로 이동하여 보관
이렇게 여러번 시도해도 Consumer가 받지 못하면 DLQ로 메시지를 이동해 보관
SQS - 제한 시간 초과/표시 제한 시간 (Visibility Timeout)
- 메시지 소비자가 SQS에서 메시지를 수신할때, 수신해도 SQS 대기열에 계속 메시지가 있음
- 추후에 메시지 에러, 애플리케이션에러시 다시 수신해야하기 때문에 SQS Queue에서는 자동으로 메시지를 삭제하지 않는다.
- 하지만 이용자가 확인 후 처리하면 요청을 한다 삭제해도 괜찮냐고... 그때서야 대기열에서 삭제한다.
- 제한시간 초과는 메시지 소비자가 메시지를 수신 후 다른 소비자가 메시지를 다시 처리하지 못하게 하기 위한 기간 (SQS에서 다른 소비자가 메시지를 수신하고 처리할 수 없도록 차단하는 기간)
- 메시지의 기본 제한 시간은 30초 (최소 0초 ~ 최대 12시간)
왜냐하면 처리한 메시지를 또 처리할 수 있기때문에..
이 시간이후로도 처리하지 못하면 다른 사용자가 처리하거나 재요청하게 된다.
SQS - Short Polling(짧은 폴링) vs Long Polling(긴 폴링)
- 폴링은 SQS Queue로부터 메시지를 가져오는 방법 (Consumer가 메시지를 요청)
- Default는 짧은 폴링이다.
- 메시지 Queue가 비어있어도 메시지 소비자는의 SQS Quere에 메시지 요청을 즉시 반환하는 방법
- 선택사항은 긴폴링이 있다.
- Queue에 메시지가 비어있으면 메시지가 도착할 때까지 또는 메시지 수신 대기시간 (Receive Message Wait Time)이 완료될 때 까지 메시지 요청을 기다림
- 메시지 수신 대기시간은 1초부터 최대 20초까지 설정가능 (숏의 경우 0초)
- 긴 폴링을 사용하면 빈 응답의 수를 제거하여 Amazon SQS 사용 비용을 절감할 수 있음
- API 요청수를 감소시켜 효율성 향상 및 애플리케이션의 지연시간 감소
- 아주짧은 메시지 응답이 필요없으면 굳이 숏이 아닌 롤폴링이 좋다.
실습
- SQS 클릭해서 대기열 생성
- 표준을 선택하고 이름을 적어준다.
- 표시 제한 시간은 메시지를 SQS에서 Consumer에게 보내줄때 Consumer에겐 보여주지않고 응답없을 때 SQS에서 보여주는 것이다.
- 메시지 보존기간은 Queue에 있는 메시지 보존기간이다. (메시지 크기도 조정가능)
- 보내는 권한인 액세스 정책을 선택할 수 있다.
- 대기열 생성!
대기열을 이용하여 Producer, Consumer의 애플리케이션을 연결하여 사용할 수 있다.
정상작동 확인을 위해 메시지 전송 및 수신을 해보자 (전송 및 폴링)
hello~라고 메시지를 보냈으니 (대기열에 올라왔으니) 폴링을 통해 받은 것을 확인해보자 (처리 작업을 진행한다.)
물론 여러번 연속으로 보낼 수 있다. (보낸만큼 대기열에 올라감)
다음처럼, 시간 및 아이디가 보인다. 하지만 여기아래에 남아있다는 소리이다.
이렇게 대기열에 남아있는 이유는 메시지가 제대로 전달되지 않았다.
우리는 애플리케이션을 연결하여 실습하지 않았기때문에 당연히 대기열에 남아있다.
이렇게 선택해서 삭제해 줄 수 있다.
사실 삭제는 Consumer에서 받았으면 자동적으로 이뤄지는 작업이다.
'Cloud Infra Architecture (AWS) > AWS SAA-C03' 카테고리의 다른 글
AWS Kinesis란? (0) | 2023.01.12 |
---|---|
AWS Amazon Simple Notification Service(SNS)란? (0) | 2023.01.12 |
AWS 데이터 분석 서비스 (0) | 2023.01.12 |
AWS DataBase Migraion Service(DMS)란? (0) | 2023.01.12 |
AWS에서 제공하는 다양한 Databases (0) | 2023.01.12 |