Amazon SQS(Simple Queue Service)
- 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전관리형 메시지 대기열
- 애플리케이션 분리하는데 사용되는 완전 관리형 서비스
SQS - 메시지 생산자
- 생산자는 SDK 소프트웨어 개발 키트를 사용하여 SQS에 메시지를 보낸다.
-SendMessage API 사용한다.
- 소비자가 해당 메시지를 읽고 삭제할 때까지 SQS 대기열에 유지된다.

SQS - 메시지 소비자
- 소비자는 일부 코드로 작성해야 하는 애플리케이션이고 이러한 애플리케이션은 EC2 인스턴스에서 실행될 수 있다.
-온프레미스, AWS Lambda의 람다 함수
- 대기열에는 소비자가 있고 소비자는 SQS 메시지를 폴링한다.
-소비자는 한 번에 최대 10개의 메세지를 받는다.
- 소비자는 이 메시지들을 폴링하고 처리할 책임이 있다.
- 이후 소비자가 이 메시지들을 DeleteMessage API로 대기열에서 삭제한다.

SQS - 다중 EC2 인스턴스 소비자
- SQS 대기열은 소비자가 메시지를 동시에 받고 병렬적으로 처리할 수 있다.
- 중복으로 메시지를 받을 수 있기 때문에, 최선의 노력으로 메시지 순서를 지정한다.
- 메시지 처리 이후에는 메시지를 삭제해야 한다.
- SQS 대기열에서 더 많은 메시지가 있어서 처리량을 늘려야 하면
소비자를 추가하고 수평 확장(ASG)을 수행해서 처리량을 개선할 수 있다.
SQS with Auto Scaling Group(ASG)
- 메시지를 스케일링할 때 SQS 큐에 있는 CloudWatch Metric 을 사용한다.
- 큐의 길이가 일정 수준을 넘으면 알람을 설정하고, 그 알람이 배율을 증가시키도록 하여 메시지 처리량을 더 높게 처리하도록 한다.
SQS - 애플리케이션 계층 간에 분리(decouple)
- 프론트엔드 앱은 파일 처리 요청을 바을 때 큐에 메시지를 보낸다.
- 백엔드 응용 프로그램을 메시지를 수신하고 s3 버킷에 삽입하기 위한 ASG에 있게 된다.

Security
- 암호화
- HTTPS API를 사용하여 전송 중 암호화를 한다.
- KMS 키를 사용하여 미사용 암호화를 얻는다.
- 액세스 제어
-SQS API에 대한 액세스를 규제
- SQS 액세스 정책
-S3 버킷 정책과 유사
-SQS 대기열에 대한 교차 계정 액세스를 수행하려는 경우
-SNS 혹은 Amazon S3 같은 다른 서비스가 SQS 대기열에 S3 이벤트 같은 것을 쓸 수 있도록 허용
SQS - 메시지 가시성 시간 초과(Timeout)
- 메시지가 폴링된 이후, 다른 컨슈머에게 보이지 않게 된다.
- 디폴트로, 메시지 가시성 타임 아웃은 30초
- 메시지는 30초 동안 실행된다.
- 메시지 가시성 타임 아웃이 끝난 이후, 메시지는 sqs에서 보이게 된다.

- 가시성 타임 아웃 시간 내에 메시지가 실행되지 않는다면, 이후 두 번 실행되게 된다.
- 컨슈머가 시간을 더 얻기 위해 ChangeMessageVisibility API 를 호출할 수 있다.
- 만약 가시성 타임아웃이 높다면(몇 시간), 컨슈머는 충돌하고 재실행이 시간을 가진다.
- 만약 가시성 타임아웃이 너무 낮다면(몇 초), 우리는 복제를 얻게 된다.
SQS - Long Polling
- 롱 폴링
클라이언트의 요청에 대해서 서버가 일정시간동안 기다렸다가 클라이언트에게 응답을 주는 방식
- 애플리케이션의 효율성을 늘리고 지연시간을 줄이는 반면, SQS에 생성된 API 호출 횟수를 감소시킨다.
SQS - FIFO Queues
- FIFO = First In First Out(큐에 들어가는 메시지의 순서)
FIFO 대기열의 특징: FIFO(first-in-first-out) 전달 및 정확한 1회 처리
- 메시지 송신 및 수신 순서가 엄격히 보존되며, 메시지는 한 번 전달되어 소비자가 이를 처리하고 삭제할 때까지 계속 사용 가능합니다. 대기열에 중복 메시지가 유입되지 않습니다.
- FIFO 대기열은 단일 대기열 내의 순서화된 여러 메시지 그룹을 가능케 하는 메시지 그룹도 지원합니다. FIFO 대기열은 300회의 초당 트랜잭션(TPS)으로 제한되지만 표준 대기열의 모든 기능을 가지고 있습니다.

SQS - Auto Scaling Group
- 로드가 너무 크면, 몇몇 트랜잭션이 잃어버리게 될 수 있다.

-
SQS가 버퍼로써 데이터 베이스 쓰기

-
두 애플리케이션 티어 사이에 복제된 SQS

AWS SNS(Simple Notification Service)
SNS: 클라우드에서 손쉽게 알림을 설정, 운영 및 전송할 수 있는 웹 서비스, 게시-구독(pub-sub) 메시징 패러다임을 따르며 푸시 메커니즘을 사용하여 클라이언트에 알림을 전달
출처: https://easyitwanner.tistory.com/480 [IT 시작해보기:티스토리]
-
사용자는 주제를 생성하고 어떤 게시자 및 구독자가 주제와 통신할 수 있는지를 결정하는 정책을 정의
-
게시자는 각 메시지에 특정 대상 주소를 포함하는 대신 메시지를 해당 주제로 전송할 수 있습니다. SNS는 주제와 해당 주제의 구독자 목록을 일치시켜 각 구독자에게 메시지를 정송합니다.
-
모든 알림 메시지에는 게시 메시지가 하나만 포함됩니다. SNS는 게시자가 주제에 게시한 메시지를 그 순서 그대로 전송하려고 시도합니다.

SNS and SQS - Fan Out Pattern
애플리케이션: 다중 큐에 대한 S3 이벤트들
- 이벤트 타입과 프리픽스의 같은 조합에 대해 하나의 S3 이벤트 규칙을 가질 수 있다.

애플리케이션: Kinesis Data Firehose 를 통한 아마존 s3에 SNS
- SNS는 KiNESIS에 보낼 수 있고 아래와 같은 솔루션 아키텍처를 가진다.

SNS - FIFO Topic
- SQS FIFO와 비슷한 특징
-Ordering: 메시지 그룹 id에 의한 순서
-Deduplication: 복제 id 또는 컨텐츠 기반 복제를 사용한 복제
- SQS 스탠다드와 FIFO 큐를 subscribers 로 가질 수 있다.

메시지 필터링
- JSON 정책은 SNS의 topic subscriptions에 보낼 메시지를 필터하는 데 사용된다.
