안녕하세요, levin입니다.
AWS study 아홉번 째 시간 SQS,Kinesis 에 대한 내용입니다.
애플리케이션을 구성하는 다양한 컴포넌트가 서로에게 메시지를 전송할 수 있도록 돕는 관리형 메시지 서비스다. SQS는 고가용성 및 고탄력성을 제공하므로, 수십만 건의 메시지를 불과 수초만에 처리할 수 있다.
SQS는 처리해야 할 메시지를 담는 큐를 생성하며, 큐에 메시지를 넣는 프로듀서 컴포넌트와 큐에 있는 메시지를 읽는 컨슈머 컴포넌트로 구성된다. 메시지의 최대 크기는 256KB이며, 기본적인 메시지 처리 방식은 다음과 같다.
컨슈머 객체가 큐에서 메시지를 확인하더라도 메시지는 큐에 그대로 유지한다. 읽은 메시지의 삭제 여부는 컨슈머가 결정할 수 있다. 특정 컨슈머 객체가 메시지를 확인 하면, SQS는 이후 일정 시간동안 해당 메시지를 다른 컨슈머가 확인할 수 없게 하며, 이를 가시성 중지기간이라 부른다. 이는 동일한 메시지를 다른 컨슈머가 중복해서 처리하는 일을 막기 위한 조치인데 이 기능이 항상 바람직한 결과만 가져오지는 않는다. 기본 가시성 중지기간은 30초이며, 최소 0초에서 최대 12시간까지 설정할 수 있다.
메시지는 큐에 영구적으로 있을 수 있다. 메시지의 기본 보유기간은 4일이며, 최소 1분에서 최대 14일까지 설정할 수 있다.
큐에 메시지를 넣을 때 큐마다 지연시간을 설정할 수 있다. 기본 큐별 딜레이 시간은 0초, 최대 15분까지 설정 가능하다. 개별 메시지는 메시지 타이머를 이용해 지연시간을 설정 가능하다. 메시지 타이머를 설정한 경우 딜레이 큐는 무시된다.
큐 기반 애플리케잇연의 경우 큐의 성능 또는 작동 방식에 따라 애플리케이션의 성능도 영향을 받게 된다. 일부 애플리케이션의 경우 초당 수천개의 메시지를 처리해야 하며, 메시지 도착 순서대로 메시지를 처리해야 하는 경우도 있다.
큐에서 메시지를 확인할 때 메시지 도착 여부 조회 옵션인 숏폴링 또는 롱폴링 중 하나를 선택할 수 있다. 기본값인 숏폴링은 일부 메시지 누락이 있더라도 즉시 메시지를 확인해야 할 때 사용하고, 롱폴링은 약간의 지연이 있더라도 큐에있는 모든 메시지를 정확하게 확인해야 할 때 사용된다.
하나의 컨슈머가 메시지를 처리하려 했지만 실패하고, 또 다른 컨슈머가 또 해당 메시지를 처리하려다 실패하는 상황이 발생할 수 있다. 이러한 메시지는 큐에서 벗어날 수 없으며, 이를 데드레터라고 한다. 이런 문제를 처리하기 위해 SQS를 통해 자동으로 이와 같은 메시지를 소스 큐에서 꺼내서 데드레터 큐에 따로 보관하도록 할 수 있다.
Amazon Kinesis는 스트리밍 데이터의 수집, 처리, 저장, 전송을 위한 서비스 모음이며, 수천 개의 소스로부터 초당 수 기가바이트 수준으로 유입되는 오디오, 비디오, 애플리케이션 로그, 원격측정 데이터 등 다양한 스트리밍 데이터를 처리할 수 있다.
웹캠, 보안용 카메라, 스마트폰 카메라 등 다양한 스트리밍 비디오 데이터를 거의 무한대로 처리 및 분류할 수 있는 실시간 비디오 처리 서비스이며, 다음과 같은 목적으로 자주 활용된다.
프로듀서가 생성한 데이터의 수집, 처리, 저장을 위한 스트리밍 데이터 파이프라인 서비스이며, MapReduce와 같은 빅데이터 분석 애플리케이션이 컨슈머가 될 수 있다. Kinesis Data Streams가 신속하게 처리 및 저장할 수 있는 주요 바이너리 데이터 타입은 다음과 같다.
스트리밍 데이터를 수집하고, 목적지로 전송하기 전 해당 데이터를 변환한다. 데이터 변환 작업에는 데이터 정련, 다른 포맷으로의 변환 등이 포함된다. 예를 들어, 데이터를 Hadoop에 전송하기 전 JSON 포맷 데이터를 Apache Parquet으로 변환할 수 있다. Kinesis Data Firehose는 Lambda 함수를 이용해 데이터를 변환하며, 커스텀 변환 작업의 유연성을 제공한다. Kinesis Data Firehose 의 원본 데이터는 변환 작업 실패에 대비해 S3에 전송할 수 있으며, 전송 데이터의 버퍼 수준 또한 설정할 수 있다.