1. SQS (Simple Queue Service)
- 완전관리형 메시지 큐 서비스
- 생산자 (producer)와 소비자 (customer) 간의 버퍼 역할
- Loosely Coupled Architecture 구현
- 비동기 처리 -> 사용자에게 신속하게 응답
- SQS 지표 -> 경보 -> 소비자 애플리케이션을 처리하는 인스턴스 확장
- DLQ (Dead Letter Queue)
- SQS의 큐 유형
- Standard
- 최소 1회 처리 (여러 번 처리될 수도 있음)
- 무제한 처리 용량
- 순서대로 처리됨을 보장받지 못함
- FIFO
- 정확히 1회 처리
- 초당 300건의 메시지 처리 (배치처리 시 10건씩 묶어서 처리하므로 최대 3000건/초)
- 순서대로 처리됨을 보장
- Standard
- SQS의 메시지
- 메시지의 최대 크기: 256KB
- 따라서 대용량 데이터를 처리하려면 S3 등을 결합하여 사용
- 보존기간
- 기본: 4일, 설정 범위: 1분 ~ 14일, 보존 기간이 지나면 메시지는 자동으로 삭제
- 처리가 완료된 메시지는 명시적으로 삭제
- 메시지를 수신할 때 받은 ReceiptHandle를 이용하여 삭제함
- HTTP 기반의 관리형 서비스
- 기존의 MQ (Rabbit MQ, MSMQ 등)와 호환되지 않음
- 기존 MQ와 연동하려면 Amazon MQ를 사용해야 함
- 메시지의 최대 크기: 256KB
- 가시성 제한 시간 (Visibility Timeout)
- 소비자가 메시지를 폴링하여폴링 하여 처리하는 동안 다른 소비자가 메시지를 폴링 하여 읽어갈 수 없도록 하는 제한시간
- 기본값: 30초, 설정 가능범위: 0초 ~ 12시간
- 한 메시지가 중복 처리되는 것을 방지하기 위한 설정
- 메시지 처리에 필요한 시간이 가시성 제한 시간을 넘어서면 중복 처리될 가능성
- Short Polling vs Long Polling
- short polling은 메시지가 없어도 빈메시지를 응답함
- 요청/응답당 비용 부과 -> 비용 증가
- 비용 절감 -> LongPolling (wait 설정값)
- SQS 사용 사례
- API GW + Lambda + RDS의 경우
- API GW와 Lambda는 서버리스이므로 스파이크 성의 쓰기 작업이 몰려들면 자동으로 확장
- 하지만 RDS는 확장이 용이하지 않음
- 이럴 때 SQS로 요청을 버퍼링하고 RDS에 신뢰성 있게 저장되도록 구성
- 대용량 메시지 처리
- S3 버킷에 큰 메시지를 저장 -> S3 버킷 내의 객체 경로 정보를 메시지에 담아 SQS로 전송
- 소비자 애플리케이션에서는 메시지를 폴링 -> S3 버킷에서 객체를 획득하여 데이터 처리
- 주의 사항
- 메시지가 크다면 가시성 제한 시간을 예측하여 넉넉하게 지정
- 소비자 애플리케이션이 S3 버킷에 접근할 수 있어야 하므로 IAM Role 등을 이용해 권한 부여
- API GW + Lambda + RDS의 경우
2. SNS (Simple Notification Service)
- 게시자 (Publisher)가 전달된 메시지를 구독자 (Subscriber)에게 전달하는 Pub/Sub 구조의 메시지 전달 서비스 (관리형 서비스)
- 구독 유형
- Lambda. SQS. HTTP(S), Email. SMS
- 주제
- 게시자가 메시지를 게시하는 대상
- 구독자가 구독을 신청하는 대상
- 게시자와 구독자를 연결하는 접점 (1:N)
- SNS 특징
- Push 방식: 폴링 아님
- 따라서 게시자가 메시지를 게시한 이후에는 구독자에게 전달되지 않도록 막을 방법이 없음
- 메시지가 구독자에게 전달된 후 처리가 완료되었는지를 확인할 수 없음
- 이 문제는 SNS와 SQS를 결합하여 해결 가능
- Fan-out 구조: 부채살 형태로 펼침 (1:N)
- 한 게시자가 전송한 메시지를 여러 구독자에게 전달
- 메시지를 SNS가 장시간 보관하지 않음: 지속성 없음
- Push 방식: 폴링 아님
- SNS와 SQS의 결합
- SNS로 Fan-out : 1-N
- SQS로 신뢰할 수 있는 처리
'정보보안 자격증 > AWS' 카테고리의 다른 글
AWS 21. API Gateway (0) | 2024.07.20 |
---|---|
AWS20. Serverless (0) | 2024.07.20 |
AWS 18. IAM (0) | 2024.07.20 |
AWS17. Elasticache (0) | 2024.07.20 |
AWS16. Dynamo DB (0) | 2024.07.20 |