What is a queue?

SQS 대기열에 메시지를 보내는 것을 생산자라고 한다.
-여러 생산자가 여러 개의 메시지를 SQS 대기열에 보낼 수 있다.
-메시지는 무엇이든 상관없다.
-생성한 모든 메시지는 대기열에 들어간다.
수신하는 대상을 Consumer라고 한다.
-Consumer는 대기열에서 메시지를 Polling 한다. 이는 대기열에게 내 앞으로 온 메시지가 있는지 물어보는 것이다.
만약 있다면, 그 메시지를 폴링해서 정보를 얻는다.
-메시지를 받아서 처리하고, 대기열에서 그 메시지를 삭제한다.
-여러 Consumer가 메시지를 Polling 할 수 있다.
대기열 서비스는 생산자와 소비자 사이를 분리하는 버퍼 역할을 한다.
Amazon SQS - Standard Queue
Oldest offering (over 10 years old)
AWS에서 제공하는 가장 오래된 서비스, AWS의 첫 번째 서비스 중 하나였다. (10년이 넘었음)
Fully managed service, used to decouple applications
완전 관리형 서비스이며 애플리케이션을 분리하는데 사용된다. 시험에서 애플리케이션 분리에 대한 문제가 보이면 SQS를 생각하자
Attributes:
-Unlimited throughput, umlimited number of messages in queue
-무제한 처리량, 대기열에 있는 메시지 수 제한 없다.
-Default retention of messages: 4 days, maximum of 14days
메시지는 기본 값으로 4일 동안 보유할 수 있다. 대기열에 있을 수 있는 최대 시간은 14일이다.
-Low latency (<10ms on publish and receive)
-짧은 지연시간을 가지고 있다. (게시 및 수신 시 10밀리초 이내로 응답한다.)
-Limitation of 256KB per messages sent
전송되는 메세지 당 256KB 미만이어야 한다.
Can have duplicate messages (at least once delivery, occasionally)
Can have out of order messages (best effort ordering)
중복된 메시지를 가질 수 있음(최소 한 번 이상, 때때로)
주문 오류 메시지가 있을 수 있음(최상의 노력으로 주문)
SQS - Producing Messages
Produced to SQS using the SDK (SendMessages API)
생산자는 SDK를 사용해 SQS에 메시지를 보낸다. (API는 SendMessages라고 함)
The messages is persisted in SQS until a consumer deletes it
메시지는 소비자가 삭제할 때까지 SQS에 유지됩니다. (메시지가 삭제됐다는 것은 메시지가 처리된 것임)
Messages retention: default 4 days, up to 14days
메시지 유효기간은 기본 4일이고 최대 14일까지 보관할 수 있다.
Example: send an order to be processed
-Order id
-Customer id
-Any attributes you want
원하는 속성을 SQS 대기열로 보낼 수 있다.
SQS standard: unlimited throughput
SQS 표준은 무제한 처리량을 갖고 있다.
SQS - Consuming Messages
Consumers (running on EC2 instances, servers, or AWS Lambda) . . .
소비자는 애플리케이션이고, 이러한 애플리케이션은 EC2 인스턴스, 자체 온프레미스 서버, Lambda 등에서 실행할 수 있다.
Poll SQS for messages (receive up to 10 messages at a time)
소비자는 SQS메시지를 폴링한다. (한 번에 최대 10개의 메시지를 받을 수 있다)
Process the messages (example: insert the messages into an RDS database)
이후 메시지를 처리한다. (예시: 메시지를 RDS 데이터베이스에 삽입)
Delete the messages using the DeleteMessages API
소비자가 메시지들을 DeleteMessages API로 대기열에서 삭제한다.
SQS - Multiple EC2 instances Consumers
Consumers receive and process messages in parallel
At least once delivery
Best-effort message ordering
-소비자가 메시지를 병렬로 수신하고 처리합니다.
세 개의 EC2 인스턴스가 있다고 했을 때 각 소비자들이 poll 함수를 호출하여 다른 메시지 세트를 수신하게 된다.
만일 메시지가 소비자에 의해 충분히 빠르게 처리되지 않으면 다른 소비자가(EC2 인스턴스, 애플리케이션)수신하게 된다.
그래서 적어도 한 번은 전송이 된다고 하는 것이다.
즉 최선의 방법으로 메시지를 정렬하는 이유이기도 하다.
Consumers delete messages after processing them
소비자가 메시지를 처리하면, 메시지를 삭제한다. (그렇지 않으면 다른 소비자가 메시지를 보내게 됨)
We can scale consumers horizontally to improve throughput of processing
SQS 대기열에 많은 메시지가 있어 처리량을 늘려야 한다면 소비자를 추가해 수평확장을 통해 처리량을 개선할 수 있다.
SQS with Auto scaling Group (ASG)

소비자가 ASG의 내부에서 EC2 인스턴스를 실행하고 SQS 대기열에서 메시지를 폴링할 것이다.
ASG는 일종의 지표에 따라 확장된다.
사용할 수 있는 지표는 대기열의 길이로, ApproximateNumberOfMessages라고 한다.
이는 모든 SQS 대기열에서 쓸 수 있는 CloudWatch 지표이다.
알람을 설정할 수도 있다. 대기열의 길이가 특정수준을 넘어가면 CloudWatch Alarm을 설정 가능하다.
SQS to decouple between application tiers
SQS는 애플리케이션 계층 간에 분리를 위해 사용된다.
예시로 비디오를 처리하는 애플리케이션이라고 가정했을 때,
애플리케이션을 분리하여 파일 처리 요청과 실제 파일 처리가 다른 애플리케이션에서 발생할 수 있도록 할 수 있다.

Amazon SQS Security
Encryption:
-In-flight encryption using HTTPS API
HTTPS API를 사용하여 전송 중 암호화
-At-rest encryption using KMS Keys
KMS키를 사용한 미사용 암호화
-Client-side encryption if the client wants to perform encryption/decryption itself
클라이언트 측 암호화 가능함. 클라이언트가 자체적으로 암호화 및 복호화 수행해야한다. SQS에서 기본적으로 지원하지 않음.
Access Controls: IAM policies to regulate access to the SQS API
액세스 제어: SQL API에 대한 액세스를 규제하는 IAM 정책
SQS Access Policies (similar to S3 bucket policies)
-Useful for cross-account access to SQS queues
-Useful for allowing other services (SNS, S3. . .) to write to an SQS queue
SQS 액세스 정책(S3 버킷 정책과 유사)
-SQS 대기열에 대한 교차 계정 액세스에 유용함
-다른 서비스(SNS, S3. . .)가 SQS 대기열에 쓸 수 있도록 하는 데 유용함
'Cloud > AWS' 카테고리의 다른 글
Amazon Kinesis Overview (0) | 2022.12.02 |
---|---|
Amazon SNS (0) | 2022.12.02 |
Storage Comparison / AWS 모든 스토리지 비교 (0) | 2022.11.28 |
AWS Storage Gateway 개요 (0) | 2022.11.28 |
Amazon FSx - Overview (0) | 2022.11.28 |