LINE 광고의 대용량 스트리밍 파이프라인
스트리밍 처리의 기술 포인트
LINE 광고 플랫폼은 하루에도 수십억 건 이상의 광고를 송출합니다. 그 속에서 데이터 파이프라인은 실시간으로 광고 결과 데이터를 수집하고, 재가공하며, 저장하고, 재전송하는 등의 역할을 수행합니다. 대표적으로 실시간으로 이벤트 적합성 여부를 판단한 뒤 역시 실시간으로 머신러닝 알고리즘에 활용하는 사례가 있겠습니다. 이런 역할을 수행하기 위해 데이터 파이프라인, 특히 실시간 스트리밍에서는 다음과 같은 기술적인 문제를 해결해야 합니다.
- 하루에 수십억 건 이상, 초당 수십만 건 이상의 이벤트를 실시간으로 처리할 수 있어야 한다.
- 플랫폼 성장에 맞춰 더 많은 양, 더 많은 건수의 데이터 처리 요청에 대응할 수 있어야 한다.
- 데이터 지연 시간을 최소화하며 처리해야 한다.
- 장애 발생 시 자동으로 복구돼야 한다.
- 다운 타임이 없어야 한다.
대용량 스트리밍 파이프라인의 특징
대용량 스트리밍 파이프라인을 구현하기 위해서는 필연적으로 분산 시스템을 사용해야 합니다. 한 대 또는 몇 대의 정해진 서버의 스케일 업만으로는 많은 데이터를 지연 없이 처리할 수 없기 때문인데요. 대용량 스트리밍 파이프라인을 분산 시스템으로 구현할 때에는 다음과 같은 어려움이 있습니다.
- 분산 시스템을 사용하면 필연적으로 전체 데이터의 순서 보장이 어려워진다.
- 분산 시스템은 구성 요소별로 성능의 차이가 있습니다. 구성 요소는 논리적/물리적 요구 사항에 따라 애플리케이션마다 달라진다.
- 2번의 이유로 트래픽이 늘었을 때 필요한 리소스를 산정해서 대응하기가 어렵다.
- 2번의 이유로 병목이나 부하, 장애 지점 등이 다양해진다.
- 4번의 이유로 실시간 처리 지연이나 시스템 장애에 대응하기가 어렵다.
- 실시간 데이터 처리 과정은 한 번 지나가버리면 똑같은 상황을 재연하기가 어렵다.
- 실시간 처리 로직에 상태 데이터가 필요하다면 위 문제들을 해결하기가 더욱 어렵다.
이번 글에서는 위 2번에서 7번까지에 해당하는 문제들이 LINE 광고 스트리밍 파이프라인에서 어떤 식으로 나타났고, 이를 해결하기 위해 어떤 고민을 했는지 공유하겠습니다. 참고로 LINE 광고 스트리밍 파이프라인에는 위 1번에 해당하는 순서 보장과 관련된 요구 사항은 없었기에 이와 관련된 내용은 이 글에서 다루지 않습니다.
LINE 광고 스트리밍 파이프라인의 특징
이번 글에서 다룰 시스템의 특징을 간단히 살펴보겠습니다. 현재 LINE 광고 플랫폼에서는 크게 아래와 같은 구조로 실시간 데이터 파이프라인을 구성했습니다.
위 데이터 파이프라인의 작동 흐름을 간단히 설명하면 다음과 같습니다.
- SDK(LINE 앱, 웹 등)에서 발생한 이벤트를 이벤트 수신기(event receiver)를 통해 받아서 HTTP 관련 처리를 한 뒤 Apache Kafka로 최대한 빠르게 전송
- 전처리기(preprocessor)에서 실시간으로 데이터 변환 및 데이터 유효성 검사 로직 수행
- 후처리기(postprocessor)에서 데이터 조인 또는 집계해서 다른 스토리지에 저장
위 파이프라인 구조에서 이번 글에서 주로 다룰 시스템은 전처리기입니다. 전처리기는 Apache Heron(이하 Heron) 프레임워크로 구현했으며, 소스와 목적지(destination)로는 Apache Kafka(이하 Kafka)를 사용했습니다.
Kafka는 '