Amazon Web Services 한국 블로그

Amazon Kinesis Data Streams, 고속 스트리밍을 위해 향상된 팬아웃 및 HTTP/2 지원 추가

몇 주 전 Amazon Kinesis Data Streams(KDS)를 위한 두 가지의 중요한 성능 개선 기능, 즉 향상된 팬 아웃 및 HTTP/2 데이터 검색 API를 출시했습니다. 향상된 팬아웃을 사용하면 개발자가 각 스트림 소비자(실시간으로 스트림에서 데이터를 읽는 애플리케이션)에게 개별 읽기 처리량을 제공함으로써 스트림 소비자 수를 확대할 수 있습니다. 한편, HTTP/2 데이터 검색 API를 사용하면 전형저인 시나리오에서 제작자가 소비자에게 70밀리초 이하의 속도로 데이터를 제공할 수 있습니다(65% 개선된 속도). 이러한 새 기능을 통해 개발자는 Kinesis Data Streams에 기반한 더 빠르고, 더 상호 대화적이고, 고도로 병렬식이고, 지연 시간에 민감한 애플리케이션을 구축할 수 있습니다.

Amazon Kinesis는 실시간 데이터 서비스로 구성된 제품군으로서, Kinesis Video Streams, Kinesis Data Firehose, Kinesis Data Analytics 및 이번 블로그 주제인 Kinesis Data Streams(KDS)를 포함합니다.

Kinesis Data Streams를 사용하면 개발자가 완전히 관리되며 대규모로 확장 가능한 서비스를 통해 쉽고 연속적으로 실시간 스트리밍 데이터를 수집, 처리 및 분석할 수 있습니다. KDS는 웹 사이트 클릭 스트림에서 소셜 미디어 피드, 금융 거래 및 위치 추적 이벤트에 이르는 수십만 개의 소스에서 초당 기가바이트의 데이터를 캡처할 수 있습니다.

Kinesis Data Streams는 샤드 개념을 사용하여 확장됩니다. 한 개의 샤드는 초당 1MB 또는 초당 레코드 1000개의 수집 용량과 초당 2MB의 출력 용량을 제공합니다. 고객이 수십만 개의 샤드를 통해 초당 수십 기가바이트의 수집 및 송신 용량을 지원하는 경우도 드물지 않습니다. 향상된 팬아웃 용량 기능이 출시되기 전에는 스트림에서 데이터를 소비하는 모든 애플레케이션이 이 샤드당 초당 2MB의 출력을 공유했습니다.

향상된 팬아웃을 사용하면 개발자는 스트림 소비자가 향상된 팬아웃을 사용하여 자체의 샤드당 초당 2MB의 읽기 처리량 파이프를 할당 받도록 등록할 수 있으며 이 처리량은 스트림의 샤드 수에 따라 자동 확장됩니다. 향상된 팬아웃 출시 전에는 고객이 다운스트림 애플리케이션에 원하는 읽기 처리량을 지원하기 위해 수시로 데이터를 여러 스트림으로 팬아웃해야 했습니다. AWS에서는 이를 불필요하고 번거로운 작업이라고 판단하여 고객의 부담을 없애기로 결정하였습니다. 고객은 향상된 팬아웃을 사용하여 검색한 데이터 양과 샤드당 등록된 고객 수를 기반으로 향상된 팬아웃 요금을 지불합니다. 추가 정보는 요금 페이지를 참조하십시오.

새 API의 설명으로 넘어가기 전에 HTTP/2에 대한 몇 가지 참고 사항을 살펴보고 이를 새 SubscribeToShard API에 사용하는 방법을 알아보겠습니다.

HTTP/2

HTTP/2는 HTTP 네트워크 프로토콜의 중요 개정판 중 하나로서, 클라이언트와 서버 간의 데이터 프레임화 및 전송을 위한 새로운 방식을 제공하는 바이너리 프로토콜입니다. 이 프로토콜을 사용하면 지연 시간 단축 및 처리량 증가에 초점을 맞춘 다양한 신규 기능을 사용할 수 있습니다. 그 중 하나는 헤더를 압축하는 HPACK의 사용입니다. 또다른 유용한 기능으로는 여러 병렬 비차단 요청에 단일 TCP 연결을 사용할 수 있게 해 주는 연결 다중화가 있습니다. 그뿐 아니라 HTTP가 사용하던 기존의 요청-응답 시맨틱 대신 통신 파이프가 양방향으로 구성됩니다.

HTTP/2를 사용하는 서버는 클라이언트의 리소스 요청을 기다리지 않고 여러 응답을 클라이언트에 푸시할 수 있습니다. Kinesis의 SubscribeToShard API는 이 서버 푸시 기능을 활용하여 새 레코드를 수신하고 흐름 제어라는 또다른 HTTP/2 기능을 활용합니다. Kinesis는 데이터를 소비자에게 푸시하고 인식되지 않은 바이트 수를 추적합니다. 클라이언트는 서버에 WINDOW_UPDATE 프레임을 전송하여 수신된 파이트를 인식합니다. 클라이언트가 데이터 양을 처리할 수 없는 경우에는 Kinesis가 새로운 WINDOW_UPDATE 프레임을 수신하거나 5분 구독 기간이 만료될 때까지 데이터 흐름을 일시 중지합니다.

이제 SubscribeToShard 및 HTTP/2의 개념을 확인했으므로 이를 사용하여 향상된 팬아웃 기능을 활용하는 방법을 알아보겠습니다!

향상된 팬아웃 사용

향사된 팬아웃을 활용하는 가장 쉬운 방법은 업데이트된 Kinesis Client Library 2.0(KCL)을 사용하는 것입니다. KCL은 스스로를 스트림 소비자로 자동 등록합니다. 그런 다음 KCL은 샤드를 열거하고 새로운 SubscribeToShard API를 사용하여 이를 구독합니다. 또한 KCL은 연결이 종료될 때마다 SubscribeToShard를 계속 호출합니다. 이 배경에서는 KCL이 AWS 계정에 생성한 Amazon DynamoDB 테이블을 사용하여 배포된 앱의 중간 확인 및 상태 관리를 처리하고 있습니다. 이의 예시는 설명서를 참조하십시오.

향상된 팬아웃을 사용하는 일반적인 절차는 다음과 같습니다.

  1. RegisterStreamConsumer를 호출하고 StreamARN 및 ConsumerName(일반적으로 애플리케이션 이름)을 제공합니다. 이 API 호출이 반환한 ConsumerARN을 저장합니다. 소비자가 등록되는 즉시, 향상된 팬아웃이 활성화되며 소비자-샤드-시간에 대한 청구가 시작됩니다.
  2. 스트림 샤드를 열거하고 RegisterStreamConsumer에서 반환한 ConsumerARN을 통해 각 샤드에 대한 SubscribeToShard를 호출합니다. 이렇게 하면 HTTP/2 연결이 설정되고 KDS는 SubscribeToShardEvents를 수신 클라이언트에 푸시합니다. 이 연결은 5분마다 KDS에 의해 종료되므로 클라이언트가 계속 이벤트를 수신하려면 SubscribeToShard를 다시 호출해야 합니다. 향상된 팬아웃을 사용하여 클라이언트에 푸시된 바이트는 향상된 팬아웃 데이터 검색 요금에 따라 청구됩니다.
  3. 마지막으로, 관련 비용이 발생하므로 소비자를 더 이상 사용하지 않을 경우에는 잊지 말고 DeregisterStreamConsumer를 호출하십시오.

이 절차를 안내하는 일부 예제 코드는 설명서를 참조하십시오.

콘솔에서 Amazon CloudWatch 지표를 보면 등록을 취소하는 등 소비자 애플리케이션을 관리할 수 있습니다.

지금 사용 가능

향상된 팬아웃 및 새 HTTP/2 SubscribeToShard API는 새 스트림 및 기존 스트림에 대해 모든 리전에서 지금 이용 가능합니다. 설명서를 참조하면 제가 이 블로그 게시물에서 다룬 것보다 훨씬 많은 정보를 얻을 수 있습니다. 모든 샤드를 읽을 수 있는 소비자 애플리케이션이 스트림당 5개(즉, 5개의 서로 다른 KCL 애플리케이션)로 제한되어 있으나 이 한도는 지원 티켓을 통해 늘릴 수 있습니다. 고객 여러분은 이러한 새 기능들을 활용하여 다중 스트림 소비자의 관리에 따르는 복잡성을 감소하고 실시간 애플리케이션의 속도와 병렬성을 증가시킬 수 있을 것입니다.

Randall;