9장 자동화: SQS, Kinesis

GonnabeAlright·2022년 3월 24일
0
post-thumbnail
AWS Certified Solutions Architect STUDY GUIDE 도서를 읽고 정리한 내용입니다.

애플리케이션 개발자는 종종 루즈 커플링(loose coupling)이라는 설계 원칙을 이용해 애플리케이션의 확장성 및 신뢰성을 높인다. 불필요한 요소를 최소화해 하나의 서버에서 실행되는 단일 애플리케이션을 구현하되, 각 컴포넌트를 마이크로서비스(microservices)라 부르는 요소로 세분화한다. 마이크로서비스는 서로 다른 서버에서 실행되지만, 서로에게 메시지를 전송하며 긴밀하게 소통할 수 있다.

SQS는 처리해야 할 메시지를 담는 큐를 생성하며, 큐에 메시지를 넣는 프로듀서 컴포넌트와 큐에 있는 메시지를 읽는 컨슈머 컴포넌트로 구성된다. 메시지의 크기는 256KB이며 다음과 같은 방식으로 메시지를 처리한다.

SQS 메시지 처리방식

  • 프로듀서가 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 큐

FIFO(First-In, First-Out) 큐는 초당 3천개의 메시지를 큐에 전달할 수 있다. 메시지는 도착 순서대로 큐에 전달되며, 각 메시지는 단 한 번만 기록되므로 중복 메시지 문제를 피할 수 있다. FIFO 큐는 약 2만개의 인플라이트 메시지를 처리할 수 있다.

큐에서 메시지를 확인할 때 메시지 도착 여부 조회 옵션인 숏폴링 또는 롱폴링 중 하나를 선택할 수도 있다. 기본값인 숏폴링(short polling)은 일부 메시지 누락이 있더라도 즉시 메시지를 확인해야 할 때 사용하고, 롱폴링(long polling)은 약간의 지연이 있더라도 큐에 있는 모든 메시지를 정확하게 확인해야 할 때 사용한다.

데드레터

때로는 컨슈머가 제대로 처리하지 못한 메시지가 큐에 남기도 한다. 즉, 하나의 컨슈머가 메시지를 처리하려 했지만 실패하고, 또 다른 컨슈머가 또 해당 메시지를 처리하려다 실패하는 상황이 발생할 수 있다. 이러한 메시지는 큐에서 벗어날 수 없으며, 이를 데드레터(dead letter)라고 한다.

Kinesis

Amazon Kinesis는 스트리밍 데이터의 수집, 처리, 저장, 전송을 위한 서비스 모음이며, 수천 개의 소스로부터 초당 수 기가바이트 수준으로 유입되는 오디오, 비디오, 애플리케이션 로그, 원격측정 데이터 등 다양한 스트리밍 데이터를 처리할 수 있다.

Kinesis 서비스에는 다음과 같은 서비스들이 있다.

  • Kinesis Video Streams
  • Kinesis Data Streams
  • Kinesis Data Firehose

Kinesis Video Streams

Kinesis Video Streams는 웹캠, 보안용 카메라, 스마트폰 카메랑 등 다양한 스트리밍 비디오 데이터를 거의 무한대로 처리 및 분류할 수 있는 실시간 비디오 처리 서비스이며, 다음과 같은 목적으로 자주 활용된다.

  • 이미지 인식 등 컴퓨터 비전 애플리케이션
  • 스트리밍 비디오 애플리케이션
  • 양방향 비디오 회의 애플리케이션

Kinesis Data Streams

Kinesis Data Streams는 프로듀서가 생성한 데이터의 수집, 처리, 저장을 위한 스트리밍 데이터 파이프라인 서비스이며, MapReduce와 같은 빅데이터 분석 애플리케이션이 컨슈머가 될 수 있다. 주요 바이너리 데이터 타입은 다음과 같다.

  • 애플리케이션 로그
  • 주식 거래 데이터
  • 소셜 미디어 피드
  • 금융 거래 데이터
  • 위치 추적 데이터

Kinesis Data Firehose

Kinesis Data Firehose는 스트리밍 데이터를 수집하고, 목적지로 전송하기 전 해당 데이터를 변환한다. 데이터 변환 작업에는 데이터 정렬, 다른 포맷으로의 변환 등이 포함된다.
Kinesis Data FirehoseRedshift, S3, Splunk 등 서비스에 스트리밍 데이터를 전송하는 데 적합한 반면 Kinesis Data Streams커스텀 애플리케이션에 스트리밍 데이터를 전송하는 데 적합하다.

Kinesis Video Streams vs Kinesis Data Streams, Kinesis Data Firehose
서비스데이터 변환최대 보유기간데이터 관리 모델
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는 스트리밍 데이터의 수집, 변환 및 특정 목적지로 전송하는 데 적합하다.

0개의 댓글