애플리케이션 커뮤니케이션은 두 가지 패턴으로 나뉘어짐
1) Synchronous communications (application to application)
2) Asynchronous Event based (application to queue to application)
1)의 경우 쇼핑몰에서 주문을 하면 바로 배송 서비스가 시작됨
2)의 경우 쇼핑몰에서 주문을 하면 주문 내역을 대기열에 넣어두고 배송 서비스에서 내역을 물어보면 주문 내역을 전달
2)을 사용하는 이유는 갑작스럽게 트래픽이 증가해 쇼핑몰 주문이 많아질 경우 부하가 많이 될 수 있기 때문에
일반적으로 애플리케이션을 분리하고 분리 계층을 확장하는 것
decouple 하는 케이스
SQS : queue model
SNS : pub/sub model
Kinesis : real-time streaming model
SQS
SQS는 간단한 대기 서비스
SQS 대기열에는 메세지를 포함
메세지를 담기 위해서는 SQS 대기열에 메세지를 전송해야 하는데 SQS 대기열에 메세지를 보내는 주체를 생산자라고 함
수신해야 하는 대상을 소비자 라고 함
소비자는 대기열에서 메세지를 폴링하는데 이는 대기열에서 소비자 앞으로 온 메세지가 있는 지 물어보는 것
그 메세지로 처리를 하고 대기열에서 그 메세지를 삭제
대기열 서비스는 생산자와 소비자 사이를 분리하는 버퍼 역할을 함
SQS는 AWS에서 제공하는 가장 오래된 서비스
완전 관리형 서비스이며 애플리케이션을 분리하는데 사용
특별한 점
무제한 처리량을 얻을 수 있음. 즉 초당 원하는 만큼 메세지를 보낼 수 있고 대기열에도 원하는 만큼 메세지를 포함시킬 수 있음
메세지는 기본값으로 4일 동안 대기열에 남아 있고 대기열에 있을 수 있는 최대 기간은 14일
지연 시간이 짧아서 SQS는 메세지를 보내거나 SQS에서 메세지를 읽을 때마다 publish 와 receive 하는데 10ms 이내로 매우 빠르게 응답을 받게 됨
SQS는 전송된 메세지당 256KB 미만이어야 함
SQS는 대기열 서비스이므로 높은 처리량, 높은 볼륨 등이 있어서 중복 메세지가 있을 수 있음 (예를 들어 메세지가 두 번 전송되는 경우가 있으므로 적어도 한 번의 전송이라고 함)
품절 메세지도 보낼 수 있음 (best effort ordering)
SQS - Producing Messages
생산자는 SDK를 사용하여 SQS로 메세지를 보냄 (SQS에 메세지를 보내는 API를 SendMessage라고 함)
소비자가 해당 메세지를 읽고 삭제할 때까지 SQS 대기열에 유지됨
메세지 보존 기간 : 기본 4일, 최대 14일까지
예를 들어 패킷과 같은 오더를 처리한 다음 센터로 배송하려고 할 때 아래 정보를 포함해 메세지 전달
Order id
Customer id
Any attributes you want
SQS standard : 무제한 처리량
SQS - Cunsuming Messages
소비자는 일부 코드로 작성해야 하는 애플리케이션이고, EC2 같은 AWS 상의 가상 서버에서 실행될 수 있음 (이 외에도 온프램 servers or Lamda 등등)
Poll SQS for messages (소비자는 한번에 최대 10개정도 메세지를 받음)
메세지를 받으면 rds에 데이터를 넣는 듯 작업이 있음
DeleteMessage API로 소비자가 이 메세지들을 삭제함
SQS - Multiple EC2 Instance Consumers
소비자들은 동시에 여러 메세지를 수신받음
적어도 한번은 전송이 됨
Best-effort 메세지 전송 방법
소비자들이 메세지를 전달 받은 뒤 메세지를 삭제해야 함(그렇지 않으면 다른 소비자가 메세지를 또 전달 받을 수 있음)
SQS 대기열에 더 많은 메세지가 있어서 처리량을 늘려야 하면 소비자를 추가하고 수평 확장해서 처리량을 개선할 수 있음
SQS with Auto Scaling Group (ASG)
가장 완벽한 활용 사례
소비자가 ASG 내부에서 EC2 인스턴스를 실행하고 SQS 대기열에서 메세지를 폴링함
ASG는 일종의 지표에 따라 확장되어야 하는데 대기열의 길이를 보고 판단할 수 있음 (ApproximateNumberOfMessages라고 함)
모든 SQS 대기열에서 쓸 수 있는 CloudWatch 지표
대기열의 길이가 특정 수준을 넘어가면 CloudWatch Alarm을 설정할 수도 있음
알람을 받으면 ASG의 용량을 X만큼 증가시킴
웹사이트가 폭주하는 상황을 대처할 수 있음
SQS to decouple between application tiers
탁월하고 효과적인 SQS 대기열의 사용 사례
Amazon SQS - Security
암호화
HTTPS API를 사용히야 메세지를 보내고 생성 전송 중 암호화 함
KMS 키를 사용하여 미사용 암호화를 얻음
원한다면 클라이언트 측 암호화를 할 수도 있음. 이는 클라이언트가 자체적으로 암호화 및 암호 해독을 수행해야 함
액세스 제어
IAM 정책으로 SQS API에 대한 액세스를 규제할 수 있음
SQS 액세스 정책
S3 버켓 정책과 비슷
SQS 대기열에 대한 교차 계정 액세스를 수행하려는 경우
곧 배울 SNS 혹은 S3 같은 다른 서비스가 SQS 대기열에 S3 이벤트 같은 것을 쓸 수 있도록 허용하려는 경우 매우 유용
AWS Integration & Messaging
섹션 소개
1)의 경우 쇼핑몰에서 주문을 하면 바로 배송 서비스가 시작됨 2)의 경우 쇼핑몰에서 주문을 하면 주문 내역을 대기열에 넣어두고 배송 서비스에서 내역을 물어보면 주문 내역을 전달
2)을 사용하는 이유는 갑작스럽게 트래픽이 증가해 쇼핑몰 주문이 많아질 경우 부하가 많이 될 수 있기 때문에 일반적으로 애플리케이션을 분리하고 분리 계층을 확장하는 것
decouple 하는 케이스
SQS
SQS - Producing Messages
SQS - Cunsuming Messages
SQS - Multiple EC2 Instance Consumers
SQS with Auto Scaling Group (ASG)
SQS to decouple between application tiers
Amazon SQS - Security
암호화
액세스 제어
SQS 액세스 정책