
gRPC와 비동기 너비 우선 탐색으로 완성한 초저지연 분산 그래프 조회 엔진 설계기
이 아티클은 넷플릭스가 실시간 분산 그래프(RDG) 상에서 수많은 다중 홉 쿼리를 100ms 미만으로 처리하기 위해 설계한 서빙 레이어 구조를 소개합니다. 네트워크 오버헤드를 유발하는 깊이 우선 탐색 대신 비동기 너비 우선 탐색을 선택하고, 캐싱 및 데이터 스트리밍 기법을 조화롭게 결합한 실전 아키처 가이드를 제공합니다.
대규모 분산 그래프 데이터나 복잡하게 얽힌 관계형 데이터를 초저지연으로 조회해야 하는 백엔드 아키텍트와 분산 시스템 엔지니어에게 적극 추천합니다.
넷플릭스는 대규모 실시간 분산 그래프(RDG)를 구축했으나, 대용량 보안 조회부터 탐색적 개인화 추적에 이르는 다양한 접근 패턴을 100ms 미만의 지연 시간 내에 처리해야 하는 조회 계층 설계의 복잡성에 직면했습니다. 특히 순차적인 다중 홉(hop) 조회 시 발생하는 네트워크 오버헤드와 광범위한 팬아웃(fan-out) 처리 문제가 있었습니다.
너비 우선 탐색(Breadth-First Traversal) 방식을 채택하여 각 단계를 병렬화했고, 블로킹 I/O를 방지하기 위해 비동기식 구성(Asynchronous Composition) 기반의 전용 스레드 풀을 도입했습니다. 또한 인접 리스트(Adjacency Lists)를 스트림 형태로 처리하여 대규모 팬아웃 시 데이터 오버페칭을 방지하고 EVCache를 사용해 빈번히 조회되는 정적 데이터를 선택적으로 캐싱했습니다.
이와 같은 구조를 통해 2-홉 이상의 다중 홉 그래프 조회를 100ms 미만의 지연 시간 내에 완벽하게 처리할 수 있게 되었습니다. 또한 수천 개의 동시 쿼리를 소수의 스레드 풀(16~24개 스레드)만으로 지연 없이 안전하게 조율할 수 있었으며 선택적 캐싱을 통해 70~80%의 높은 히트율을 달성했습니다.
Trade-off
너비 우선 탐색의 특성상 그래프의 각 레벨 데이터를 한 번에 메모리에 유지해야 하므로 메모리 사용량이 급증할 수 있어, 각 홉마다 에지 타입별 제한(Limits)을 두어 메모리 부하를 제어해야 했습니다. 또한 강한 일관성 대신 최종 일관성(Eventual Consistency)을 타협안으로 채택하여 성능을 최적화했습니다.
그래프를 탐색할 때 한 경로를 끝까지 쫓아가는 깊이 우선 방식과 달리, 현재 노드와 인접한 모든 노드를 레벨 단위로 먼저 확장하며 탐색하는 방법입니다.
노드 간의 연결 관계(에지)를 저장하는 인접 리스트를 메모리에 한 번에 올리는 대신, 일정한 배치 크기로 스트리밍하며 읽어 들이는 방식입니다.
I/O 작업이 완료될 때까지 실행 스레드를 블로킹하지 않고, 작업 완료 이벤트가 오면 다음 단계를 이어서 실행하도록 작업을 논리적으로 체이닝하는 기법입니다.




