Simple Queue Service
<aside>
⛲
설명

- producer가 메시지가 전송되면 queue 대기열에 들어가게 되고 customer가 polling을 통해 customer 앞으로 온 메시지가 있는지 확인
- 완전 관리형 서비스이고 애플리케이션을 분리하는 데 사용
</aside>
<aside>
🪧
특징
- 무제한 처리량
- 초당 원하는 만큼 메시지 전송 가능
- 대기열에도 원하는 만큼 메시지 포함 가능
- 처리량에 제한 없음
- 대기열에 메시지 수도 제한 없음
- 메시지는 기본 값으로 4일 동안 대기열에 남음
- 메시지 크기는 257KB 미만으로 작아야함
- 중복 메시지가 존재 할 수도 있음
-
동일한 메시지가 두 번 전송 되는 경우 존재
⇒ 데이터 안전 중시
</aside>
<aside>
🃏
Producing Messages

- 생산자는 SDK를 사용하여 SQS에 메시지를 전송
- SQS에 메시지를 보내는 API를 SendMessage라 함
- 소비자가 읽고 삭제할 떄까지 대기열에 유지
ex) 주문 처리
- 주문 접수
- 고객이 온라인에서 물건 주문하면, 이 주문 정보를 SQS 큐에 넣어 안전하게 저장
- 주문 처리
- 백엔드 시세틈에서 SQS 큐를 주기적으로 확인하면서 새 주문이 있는지 확인, 주문이 존재하면 상품을 포장
- 배송 및 알림
- 상품이 포장되면 SQS큐에 다시 메시지를 전송, “상품 출고 완료” 와 같은 메시지를 다른 서버에서 확인되어 고객에게 배송 알림 등을 전송
</aside>
<aside>
🎳
Consuming Messages

RDS 데이터베이스에 message를 입력하는 경우
- Cusumer는 SQS Queue에서 메시지를 poll하고 RDS에 저장과 함께 메시지는 삭제

EC2 instance 3개로 각 소비자에게 message poll
- SQS Queue에서 3개의 instance가 poll하여 메시지를 처리하는 방식으로 메시지가 소비자의 의해 충분히 빠르게 처리되지 않으면 다른 소비자가 수신 가능

이상적인 SQS 아키텍처
-
더 많은 메시지를 처리하기 위해 ASG를 이용하여 수평 확장을 수행하여 처리량을 개선, ASG 내에서 EC2 instance를 실행하고 SQS 대기열에서 메시지를 polling하고 ASG가 일종의 지표에 따라 확장 가능한 지표인 대기열의 길이 ApproximateNumberOfMessages를 참고하고 대기열의 특정 수준을 넘어가면 CloudWatch Alarm을 설정하여 ASG 용량을 X만큼 증가
-
일부는 코드로 작성해야 하는 애플리케이션이고 이러한 애플리케이션은 EC2 instance 서버에서 실행될 수 있음
- 온프레미스 서버에서도 가능
- Lambda의 람다 함수에서도 가능
</aside>