Netflix, 실시간 서비스 토폴로지 구축 노하우 공개

by DD
3시간 전
조회수 12

Netflix 엔지니어들은 실시간 서비스 종속성 맵 구축에 필요한 실시간 가시성 확보를 위해 기존 배치 처리 방식의 한계를 인식함

스트리밍 우선 아키텍처(Streaming-First Architecture)리액티브 스트림(Reactive Streams)을 도입하여 대규모 데이터 처리 시에도 백프레셔(Backpressure)를 통한 안정적인 실시간 업데이트를 구현함

3단계 분산 집계 파이프라인(3-Stage Distributed Aggregation Pipeline)일관된 해싱(Consistent Hashing)을 통해 핫 노드(Hot Node) 문제를 해결하고 데이터 격리 아키텍처(Data Isolation Architecture)를 구축함

메모리 압력(Memory Pressure)가비지 컬렉션(Garbage Collection) 문제 해결을 위해 가변 데이터 구조(Mutable Data Structures)를 도입하고, 시간 여행(Time-Travel) 쿼리 기능을 통해 과거 토폴로지 재구성을 가능하게 함

스트리밍 우선 아키텍처와 백프레셔의 역할

기존 배치 처리 방식의 데이터 신선도(Data Freshness) 한계를 극복하기 위해 Netflix는 스트리밍 우선(Streaming-First) 아키텍처를 채택했습니다. 이는 대규모 트래픽 상황에서 다운스트림 시스템의 속도 저하 시에도 데이터 유실 없이 안정적으로 처리하기 위한 백프레셔(Backpressure) 메커니즘을 핵심으로 합니다. 시스템은 부하가 증가하면 자동으로 처리 속도를 늦추어 점진적 성능 저하(Graceful Degradation)를 유도하며, 이는 실시간 토폴로지 업데이트의 신뢰성을 보장하는 핵심 요소입니다. 이 접근 방식은 복잡성을 증가시키지만, Netflix 규모에서는 필수적인 선택입니다.

3단계 분산 집계 파이프라인의 필요성

네트워크 플로우 로그는 개별 네트워크 홉만 보여주므로, 로드 밸런서와 같은 네트워크 중개자(Network Intermediaries)를 거치는 트래픽을 실제 애플리케이션 간의 논리적 연결(App A → App B)로 재구성하는 것이 중요합니다. 이를 위해 3단계 파이프라인은 각 단계에서 데이터 재분배(Data Redistribution)를 수행합니다. Stage 1은 초기 집계를, Stage 2는 중개자 기반의 그래프 해상도(Graph Resolution)를, Stage 3는 최종 집계 및 외부 데이터 강화(Enrichment)를 담당합니다. 이 단계적 재분배는 특정 인스턴스에 부하가 집중되는 핫 노드(Hot Node) 현상을 방지하고 데이터 증폭(Data Amplification) 문제를 해결하는 데 결정적인 역할을 합니다.

핫 노드 및 GC 문제 해결을 위한 아키텍처 개선

초기 아키텍처는 인기 서비스의 트래픽 집중으로 인한 핫 노드(Hot Node) 문제와 이로 인한 메모리 압력(Memory Pressure)가비지 컬렉션(Garbage Collection) 지연에 직면했습니다. 해결책으로 도입된 3단계 파이프라인은 각 단계에서 데이터를 압축하고 재분배함으로써 부하를 분산시켰습니다. 또한, 불변 데이터 구조(Immutable Data Structures) 대신 가변 데이터 구조(Mutable Data Structures)를 핫패스에 적용하고, 불필요한 객체 변환을 제거하여 힙 할당(Heap Allocation)을 50% 이상 감소시키고 GC 시간을 크게 단축했습니다. 이는 성능 최적화(Performance Optimization)를 위해 관례를 깨는 실용적인 접근이 필요함을 보여줍니다.

리액티브 스트림의 복잡성과 학습 곡선

리액티브 스트림은 백프레셔(Backpressure)를 통한 부하 처리 능력은 뛰어나지만, 비동기 경계와 수요 기반 처리 방식은 이해하기 어려운 복잡성(Complexity)을 야기합니다. 예상치 못한 스트림 멈춤 현상과 디버깅의 어려움은 팀의 학습 곡선을 높였습니다. 이를 극복하기 위해 심층적인 개념 학습, 단순화된 스트림 패턴 적용, 경계별 모니터링 강화, 그리고 팀 교육 투자가 이루어졌습니다. 이 경험은 강력한 추상화 도구를 효과적으로 사용하기 위한 지속적인 학습과 투자의 중요성을 강조합니다.

시간 여행 쿼리를 위한 데이터 저장 및 재구성

과거 시점의 서비스 종속성을 조회하는 시간 여행(Time-Travel) 기능은 효율적인 데이터 저장 및 재구성 아키텍처를 요구했습니다. Netflix는 5분 단위의 불변 집계 스냅샷(Immutable Aggregator Snapshots)과 그래프 데이터베이스의 속성 수준 변경 추적(Property-Level Mutation Tracking)을 결합했습니다. 이 방식은 저장 공간 효율성(Storage Efficiency)을 높이고, 쿼리 시점 재집계(Query-Time Re-Aggregation)를 통해 사전 계산되지 않은 차원으로도 탐색적 분석을 가능하게 합니다. 이는 데이터 모델링(Data Modeling)쿼리 최적화(Query Optimization)의 중요한 사례입니다.

Building Service Topology at Scale: Architecture, Challenges, and Lessons Learned