저번 포스팅에서는 루스커플링 원칙에따라 여러컴포넌트로 나눈 마이크로서비스에서 각 컴포넌트가 서로 통신할 수 있게 해주는 SQS에 대해서 다루어 보았다. 이번 포스팅에서는 마이크로서비스간 실시간으로 데이터를 수집하고 데이터를 다른 컴포넌트에 전달해주는 역할을 하는 Kinesis에 대해서 다루어보겠다.
Kinesis는 보다 '실시간' 이 중점인 서비스이다. 스트리밍 데이터의 수집,처리,저장,전송을 위한 서비스이며 오디오,비디오,로그등 다양한 데이터를 매우 빠른 속도로 처리할 수 있다.
이전에 다룬 SQS와 Kinesis는 컴포넌트간의 통신에 있어서 유사한점이 많다. 그렇다면 차이점은 무엇이 있을까?
- SQS : 단기간의 데이터 , 경량의 데이터 , 하나의 컨슈머를 대상
- Kinesis : 장기간의 데이터, 대규모의 데이터, 다수의 컨슈머를 대상
다양한 스트리밍 비디오 데이터를 거의 무한대로 처리할 수 있는 서비스
타임스탬프를 이용해 비디오 스트림 데이터를 분류(인덱싱)한다.
📌데이터의 보유기간 default : 24시간, 최대 7일
프로듀서가 생성한 데이터의 실시간 수집,처리,저장을 위한 스트리밍 데이터 파이프라인 서비스.
파티션 키 및 시퀀스번호를 통해 데이터를 분류(인덱싱)한다. 따라서 타임스탬프를 이용해 데이터를 분류하는, 즉 시간순으로 데이터를 저장하는 Video Streams와 달리 Data Streams는 시퀀스번호를 이용해 데이터를 고유의 순서대로 저장한다.
📌데이터의 보유기간 default : 24시간, 최대 7일
다수의 컨슈머가 하나의 스트림을 동시에 읽게 하는 것을 가능하게 해주며, 각 컨슈머가 각기 다른 일을 수행한다. 예를 들어, 하나의 컨슈머가 로그에서 의심스러운 행동을 분석하고 다른 객체는 해당 로그를 압축해 S3에 아카이브용으로 저장할 수 있다. 당연히 Fan-out을 사용하면 속도가 빨라진다.
실시간 스트리밍 데이터를 처리할 수 있는 처리용량은 샤드값에 따라 결정된다.
1샤드당 5회의 읽기작업, 초당 2MB의 데이터 처리율을 제공한다.
Kinesis Data Streams가 실시간 서비스라면 ,Firehose는 '거의 실시간' 서비스이다.
완전 관리형 서비스, 즉 서버리스이다. 주로 데이터를 수집해서 S3,Redshift,ElasticSearch 를 타겟으로 지정해서 데이터를 전송하는데 중점인 서비스다.
즉 다른 Kinesis와 달리 데이터를 다른 스토리지 서비스에 저장하는것이 차이점이다.
💡 추가로 Data Streams, Video Streams의 최대 보유기간을 원하는 기간만큼 늘릴 수 있다.
-> Data Streams가 데이터를 수집해 Data Firehose로 보내면 Firehose는 S3를 타깃으로 지정해 실제로 데이터가 들어오면 Lambda를 호출해 데이터를 변환 후 S3로 보낸다. 이렇게 되면 보유기간을 원하는 기간만큼 설정 할 수 있다.
📌Lambda에 대해서는 추후의 포스팅에서 자세하게 다룰 예정이다.
다른 Kinesis와 달리 수집,전송이 목적이 아닌 '실시간 분석' 에 초점을 둔 서비스이다.
Kinesis Data Streams에서 실시간으로 데이터를 수집하면 Kinesis Data Analytics는 실시간으로 이 데이터를 분석해 실시간 통찰력 을 제공해준다. 실시간으로 통찰력을 제공해주기에 사용자가 원할 때마다 시기 적절하게 분석을 제공받을 수 있다.
이번 포스팅을 마지막으로 마이크로서비스에서 각 서비스(컴포넌트)간 어떻게 서로 통신할 수 있는지에 대해서 다루어 보았다.실제로 공부를 하다보니 실시간 서비스는 대부분이 Kinesis와 관련이 있었다. 또한 '실시간'과 '거의 실시간'의 차이점도 명확하게 아는것이 사용자의 요구사항에 더 효율적이고 적합한 서비스를 찾는데 중요할 것 같다. 다음 포스팅에서는 서비스들간의 트래픽의 흐름, 즉 로그기록을 어떻게 수집하고 보관하고 전송 할 것인지에 대해서 다루어 볼 예정이다.