애플리케이션 개발자는 종종 루즈 커플링(loose coupling)
이라는 설계 원칙을 이용해 애플리케이션의 확장성 및 신뢰성을 높인다. 불필요한 요소를 최소화해 하나의 서버에서 실행되는 단일 애플리케이션을 구현하되, 각 컴포넌트를 마이크로서비스(microservices)
라 부르는 요소로 세분화한다. 마이크로서비스는 서로 다른 서버에서 실행되지만, 서로에게 메시지를 전송하며 긴밀하게 소통할 수 있다.
SQS는 처리해야 할 메시지를 담는 큐를 생성하며, 큐에 메시지를 넣는 프로듀서 컴포넌트와 큐에 있는 메시지를 읽는 컨슈머 컴포넌트로 구성된다. 메시지의 크기는 256KB
이며 다음과 같은 방식으로 메시지를 처리한다.
- 프로듀서가
SendMessage 액션
을 통해 큐에 하나 이상의 메시지를 넣는다. 큐에 입력된 메시지는이동중 메시지
또는인플라이트(in-flight)메시지
라 부른다.- 컨슈머가 큐에 담긴 새 메시지를 처리할지 확인한다.
ReceiveMessage 액션
을 통해 큐에서 하나 이상의 메시지를 소비한다.- 컨슈머는 메시지를 처리한 뒤
DeleteMessage 액션
을 통해 큐에서 삭제한다.
SQS로 전송되는 API 호출 횟수를 줄이기 위해 최대 10개의 메시지를 묶어서 일괄적으로 처리할 수 있다.
DBMS의 Lock과 같은 개념으로 SQS에는 가시성 중지기간(visibility timeout)
이 존재한다. 특정 컨슈머 객체가 메시지를 확인하면, SQS는 이후 일정 시간동안 해당 메시지를 다른 컨슈머가 확인할 수 없게 하며, 이를 가시성 중지기간(visibility timeout)
이라 부른다. 기본 가시성 중지기간은 30초
이며, 최소 0초에서 최대 12시간
까지 설정할 수 있다.
메시지는 큐에 영구적으로 있을 수 없으며 메시지의 기본 보유기간(retention period)은 4일
이며, 최소 1분에서 최대 14일
까지 설정할 수 있다.
SQS의 큐 타입은 스탠다드 큐와 FIFO 큐, 두 가지 타입의 큐를 제공한다.
스탠다드 큐는 거의 무제한의 처리성능을 제공한다. 메시지는 순서와 무관하게 전달되고 떄론 동일한 메시지가 중복해서 전달되기도 한다.
FIFO(First-In, First-Out) 큐는 초당 3천개의 메시지를 큐에 전달할 수 있다. 메시지는 도착 순서대로 큐에 전달되며, 각 메시지는 단 한 번만 기록되므로 중복 메시지 문제를 피할 수 있다. FIFO 큐는 약 2만개의 인플라이트 메시지를 처리할 수 있다.
큐에서 메시지를 확인할 때 메시지 도착 여부 조회 옵션인 숏폴링 또는 롱폴링 중 하나를 선택할 수도 있다. 기본값인 숏폴링(short polling)
은 일부 메시지 누락이 있더라도 즉시 메시지를 확인해야 할 때 사용하고, 롱폴링(long polling)
은 약간의 지연이 있더라도 큐에 있는 모든 메시지를 정확하게 확인해야 할 때 사용한다.
때로는 컨슈머가 제대로 처리하지 못한 메시지가 큐에 남기도 한다. 즉, 하나의 컨슈머가 메시지를 처리하려 했지만 실패하고, 또 다른 컨슈머가 또 해당 메시지를 처리하려다 실패하는 상황이 발생할 수 있다. 이러한 메시지는 큐에서 벗어날 수 없으며, 이를
데드레터(dead letter)
라고 한다.
Amazon Kinesis는 스트리밍 데이터의 수집
, 처리
, 저장
, 전송
을 위한 서비스 모음이며, 수천 개의 소스로부터 초당 수 기가바이트 수준으로 유입되는 오디오, 비디오, 애플리케이션 로그, 원격측정 데이터 등 다양한 스트리밍 데이터를 처리할 수 있다.
Kinesis 서비스에는 다음과 같은 서비스들이 있다.
- Kinesis Video Streams
- Kinesis Data Streams
- Kinesis Data Firehose
Kinesis Video Streams는 웹캠, 보안용 카메라, 스마트폰 카메랑 등 다양한 스트리밍 비디오 데이터를 거의 무한대로 처리 및 분류할 수 있는 실시간 비디오 처리 서비스이며, 다음과 같은 목적으로 자주 활용된다.
이미지 인식 등 컴퓨터 비전 애플리케이션
스트리밍 비디오 애플리케이션
양방향 비디오 회의 애플리케이션
Kinesis Data Streams는 프로듀서가 생성한 데이터의
수집
,처리
,저장
을 위한 스트리밍 데이터 파이프라인 서비스이며, MapReduce와 같은 빅데이터 분석 애플리케이션이 컨슈머가 될 수 있다. 주요 바이너리 데이터 타입은 다음과 같다.
애플리케이션 로그
주식 거래 데이터
소셜 미디어 피드
금융 거래 데이터
위치 추적 데이터
Kinesis Data Firehose
는 스트리밍 데이터를 수집하고, 목적지로 전송하기 전 해당 데이터를 변환한다. 데이터 변환 작업에는 데이터 정렬, 다른 포맷으로의 변환 등이 포함된다.
Kinesis Data Firehose는 Redshift, S3, Splunk 등 서비스에 스트리밍 데이터를 전송하는 데 적합한 반면 Kinesis Data Streams는 커스텀 애플리케이션에 스트리밍 데이터를 전송하는 데 적합하다.
서비스 | 데이터 변환 | 최대 보유기간 | 데이터 관리 모델 |
---|---|---|---|
Simple Queue Service | 불가 | 14일 | 프로듀서-컨슈머 |
Kinesis Video Streams | 불가 | 7일 | 프로듀서-컨슈머 |
Kinesis Data Streams | 불가 | 7일 | 프로듀서-컨슈머 |
Kinesis Data Firehose | 가능 | 24시간 | 소스-데스티네이션 |
Kinesis Video Streams
는 비디오, 오디오, 레이더 이미지 등 모든 형태의 타임-인코딩 처리에 적합하고,Kinesis Data Streams
는 모든 형태의 바이너리 데이터 수집 및 저장에 적합하며,Kinesis Data Firehose
는 스트리밍 데이터의 수집, 변환 및 특정 목적지로 전송하는 데 적합하다.