스트리밍 데이터 솔루션: 예
시나리오 1: 위치를 기반으로 한 인터넷 제공
InternetProvider는 전 세계 사용자에게 다양한 대역폭 옵션을 갖춘 인터넷 서비스를 제공하는 회사입니다. 사용자가 인터넷에 가입하면 InternetProvider는 사용자의 지리적 위치에 따라 다양한 대역폭 옵션을 사용자에게 제공합니다. 이러한 요구 사항을 고려하여 InternetProvider는 사용자 세부 정보와 위치를 사용하기 위해 Amazon Kinesis Data Streams를 구현했습니다. 사용자 세부 정보 및 위치는 애플리케이션에 게시되기 전에 다양한 대역폭 옵션으로 보강됩니다. AWS Lambda

AWS Lambda를 사용하여 데이터 스트림 처리
Amazon Kinesis Data Streams
Amazon Kinesis Data Streams
Kinesis Data Streams를 사용하여 솔루션을 구현할 때 Kinesis Data Streams 애플리케이션이라는 사용자 정의 데이터 처리 애플리케이션을 생성합니다. 일반적인 Kinesis Data Streams 애플리케이션은 Kinesis 스트림의 데이터를 데이터 레코드로 읽습니다.
Kinesis Data Streams에 저장되는 데이터는 고가용성과 탄력성을 보장하며, 밀리초 단위로 사용할 수 있습니다. 수십만 개의 소스에서 클릭스트림, 애플리케이션 로그, 소셜 미디어와 같은 다양한 유형의 데이터를 Kinesis 스트림에 지속적으로 추가할 수 있습니다. 그러면 몇 초 안에 Kinesis 애플리케이션
Amazon Kinesis Data Streams는 완전관리형 스트리밍 데이터 서비스입니다. 이 서비스는 데이터 처리량 수준에서 데이터를 스트리밍하는 데 필요한 인프라, 스토리지, 네트워킹 및 구성을 관리합니다.
Amazon Kinesis Data Streams에 데이터 전송
Kinesis Data Streams에 데이터를 전송하는 방법에는 여러 가지가 있으므로 유연하게 솔루션을 설계할 수 있습니다.
-
널리 사용되는 여러 언어에서 지원하는 AWS SDK
중 하나를 사용하여 코드를 작성할 수 있습니다. -
Kinesis Data Streams로 데이터를 전송하기 위한 도구인 Amazon Kinesis 에이전트를 사용할 수 있습니다.
Amazon Kinesis Producer Library(KPL)는 개발자가 하나 이상의 Kinesis 데이터 스트림에 대한 높은 쓰기 처리량을 달성할 수 있도록 지원함으로써 생산자 애플리케이션 개발을 간소화합니다.
KPL은 호스트에 설치하는 사용하기 쉽고 고도로 구성 가능한 라이브러리로, 생산자 애플리케이션 코드와 Kinesis Streams API 작업 간에 중개자 역할을 합니다. KPL과 코드 예제를 사용하여 동기 및 비동기식으로 이벤트를 생성하는 KPL의 기능에 대한 자세한 내용은 Writing to your Kinesis Data Streams Using the KPL(KPL을 사용하여 Kinesis Data Streams에 쓰기) 단원을 참조하세요.
Kinesis Data Streams API에는 스트림에 데이터를 추가하는 두 가지 작업인 PutRecords
와 PutRecord
가 있습니다. PutRecords
작업은 HTTP 요청당 스트림에 여러 레코드를 전송하는 반면 PutRecord
는 HTTP 요청당 하나의 레코드를 제출합니다. 대부분의 애플리케이션에서 PutRecords
를 사용하면 더 높은 처리량을 달성할 수 있습니다.
이러한 API에 대한 자세한 내용은 Adding Data to a Stream(스트림에 데이터 추가)을 참조하세요. 각 API 작업에 대한 세부 정보는 Amazon Kinesis Data Streams API Reference(Amazon Kinesis Data Streams API 참조)에서 확인할 수 있습니다.
Amazon Kinesis Data Streams에서 데이터 처리
Kinesis 스트림에서 데이터를 읽고 처리하려면 소비자 애플리케이션을 생성해야 합니다. Kinesis Data Streams용 소비자를 생성하는 방법에는 여러 가지가 있습니다. 이러한 접근 방식에는 KCL을 사용한 스트리밍 데이터 분석을 위해 Amazon Kinesis Data Analytics
Kinesis Data Streams용 소비자 애플리케이션은 Kinesis Data Streams의 데이터를 사용하고 처리하는 데 도움이 되는 KCL을 사용하여 개발할 수 있습니다. KCL은 여러 인스턴스 간 로드 밸런싱, 인스턴스 장애에 대한 대응, 처리된 레코드에 대한 체크포인트, 리샤딩에 대한 대응과 같이 분산 컴퓨팅과 관련된 여러 가지 복잡한 작업을 처리합니다. KCL을 사용하면 레코드 처리 로직을 작성하는 데 집중할 수 있습니다. 자체 KCL 애플리케이션을 구축하는 방법에 대한 자세한 내용은 Using the Kinesis Client Library(Kinesis Client Library 사용)를 참조하세요.
Lambda 함수를 구독하여 Kinesis 스트림에서 레코드의 배치를 자동으로 읽고 스트림에서 레코드가 탐지되면 이를 처리하도록 할 수 있습니다. AWS Lambda는 새 레코드를 찾기 위해 스트림을 주기적으로(초당 한 번) 폴링하고 새 레코드를 탐지하면 새 레코드를 파라미터로 전달하는 Lambda 함수를 호출합니다. Lambda 함수는 새 레코드가 탐지될 때만 실행됩니다. Lambda 함수를 공유 처리량 소비자(표준 반복기)에 매핑할 수 있습니다.
스트림에서 데이터를 수신하는 다른 소비자와 경쟁하지 않는 전용 처리량이 필요한 경우 향상된 팬아웃이라는 기능을 사용하는 소비자를 구축할 수 있습니다. 이 기능을 사용하면 소비자가 샤드당 1초에 최대 2MB의 데이터 처리량으로 스트림에서 레코드를 수신할 수 있습니다.
대부분의 경우 Kinesis Data Analytics, KCL, AWS Glue 또는 AWS Lambda를 사용하여 스트림의 데이터를 처리해야 합니다. 하지만 원하는 경우 Kinesis Data Streams API를 사용하여 처음부터 소비자 애플리케이션을 생성할 수 있습니다. Kinesis Data Streams API는 스트림에서 데이터를 검색할 수 있는 GetShardIterator
및 GetRecords
메서드를 제공합니다.
이 끌어오기 모델의 경우 코드는 스트림의 샤드에서 직접 데이터를 추출합니다. API를 사용하여 자체 소비자 애플리케이션을 작성하는 방법에 대한 자세한 내용은 Developing Custom Consumers with Shared Throughput Using the AWS SDK for Java(Java용 AWS SDK를 사용하여 공유 처리량으로 사용자 정의 소비자 개발) 단원을 참조하세요. API에 대한 자세한 내용은 Amazon Kinesis Data Streams API Reference(Amazon Kinesis Data StreamsAPI 참조)에서 확인할 수 있습니다.
AWS Lambda를 사용하여 데이터 스트림 처리
AWS Lambda
AWS Lambda는 기본적으로 Amazon Kinesis Data Streams와 통합됩니다. 이 기본 통합을 사용하면 폴링, 체크포인트 및 오류 처리 복잡성이 개념화됩니다. 이를 통해 Lambda 함수 코드는 비즈니스 로직 처리에 집중할 수 있습니다.
Lambda 함수를 공유 처리량(표준 반복기) 또는 향상된 팬아웃 기능이 있는 전용 처리량 소비자에 매핑할 수 있습니다. 표준 반복기를 사용할 경우 Lambda는 HTTP 프로토콜을 사용하여 Kinesis 스트림의 각 샤드를 폴링합니다. 대기 시간을 최소화하고 읽기 처리량을 최대화하기 위해 향상된 팬아웃으로 데이터 스트림 소비자를 생성할 수 있습니다. 이 아키텍처의 스트림 소비자는 동일한 스트림에서 읽는 다른 애플리케이션과 경쟁하지 않고도 각 샤드에 대한 전용 연결을 얻습니다. Amazon Kinesis Data Streams는 HTTP/2를 통해 레코드를 Lambda로 푸시합니다.
기본적으로 AWS Lambda는 스트림에서 레코드를 사용할 수 있게 되는 즉시 함수를 호출합니다. 배치 시나리오의 경우 레코드를 버퍼링하기 위해 이벤트 소스에서 최대 5분 동안 배치 창을 구현할 수 있습니다. 함수가 오류를 반환하면 Lambda는 처리가 성공할 때까지 또는 데이터가 만료될 때까지 배치를 재시도합니다.
요약
InternetProvider는 Amazon Kinesis Data Streams를 활용하여 사용자 세부 정보와 위치를 스트리밍했습니다. 레코드 스트림은 함수 라이브러리에 저장된 대역폭 옵션으로 데이터를 보강하기 위해 AWS Lambda에서 사용되었습니다. 보강 후 AWS Lambda는 대역폭 옵션을 애플리케이션에 다시 게시했습니다. InternetProvider는 Amazon Kinesis Data Streams와 AWS Lambda로 서버 프로비저닝 및 관리를 처리함으로써 비즈니스 애플리케이션 개발에 더 집중할 수 있었습니다.