Netflix, Druid 쿼리 성능 개선을 위한 똑똑한 캐싱 기술 도입

by DD
1개월 전
조회수 32

Druid 기반 실시간 데이터 분석 시스템의 쿼리 부하 증가로 인해 확장성(Scalability) 문제 발생

인터벌(Interval) 기반 캐싱 기술을 도입하여 쿼리 구조를 이해하고, 중복 쿼리(Duplicate Query)를 캐싱하여 Druid 부하 감소

캐싱 도입 후 Druid 쿼리량 33% 감소, 전체 쿼리 응답 시간(Query Response Time) 66% 개선, 성능 향상(Performance Improvement)을 확인

최신 데이터(Fresh Data)의 지연 시간(Latency)을 최소화하기 위해, 데이터의 시간에 따라 지수적 TTL(Exponential TTL) 적용

향후 Druid 내장 기능으로 통합하여 오픈소스 커뮤니티(Open Source Community)에 기여할 계획

인터벌(Interval) 기반 캐싱 아키텍처

본문에서는 넷플릭스(Netflix)가 Druid 쿼리 성능 개선을 위해 인터벌(Interval) 기반 캐싱을 도입한 아키텍처를 설명한다. 기존 Druid의 캐싱 방식은 쿼리 전체를 캐싱하여, 시간 범위가 조금만 변경되어도 캐시 미스(Cache Miss)가 발생하는 문제가 있었다. 이를 해결하기 위해 쿼리 구조를 이해하고, 시간 간격(Time Interval)을 기준으로 데이터를 독립적인 버킷(Bucket)으로 분할하여 캐싱한다. 특히, 쿼리 해시(Query Hash)를 캐시 키(Cache Key)로 사용하고, 시간 단위(Time Granularity)로 버킷을 나누어 부분적인 캐시 적중(Partial Cache Hit)을 가능하게 했다. 이러한 아키텍처는 쿼리 재사용성을 높이고, Druid의 부하를 줄이는 데 기여한다.

지수적 TTL(Exponential TTL) 적용

넷플릭스(Netflix)는 캐싱된 데이터의 정확성을 보장하기 위해 지수적 TTL(Exponential TTL)을 적용했다. 데이터의 연령에 따라 TTL을 다르게 설정하여, 최신 데이터는 짧은 TTL을, 오래된 데이터는 긴 TTL을 부여한다. 구체적으로, 2분 미만의 데이터는 5초, 이후 매 분마다 TTL을 2배로 늘려 최대 1시간까지 설정한다. 이러한 방식은 최신 데이터의 지연 시간(Latency)을 최소화하면서, 오래된 데이터의 정확성을 유지한다. 또한, 늦게 도착하는 데이터(Late-arriving Data)로 인한 부정확성을 줄이고, 캐시의 효율성을 높이는 데 기여한다.

캐싱 시스템의 작동 원리

캐싱 시스템은 Druid Router에서 쿼리를 가로채는 인터셉팅 프록시(Intercepting Proxy) 형태로 구현되었다. 캐시 가능한 쿼리가 도착하면, 시간 간격(Time Interval)과 구조를 분석하여 쿼리 해시(Query Hash)를 생성하고, 캐시를 조회한다. 캐시 적중 시에는 캐싱된 데이터를 반환하고, 미스 시에는 Druid에 쿼리를 전송한다. 특히, 부분적인 캐시 적중 시에는 미싱 테일(Missing Tail) 부분만 Druid에 요청하여, Druid의 부하를 줄인다. 또한, Druid에서 반환된 최신 데이터는 비동기적으로 캐시에 저장하여, 응답 지연 시간을 최소화한다. 이러한 구조는 Druid의 성능을 향상시키면서, 기존 시스템에 미치는 영향을 최소화한다.

성능 개선 효과

본문에 따르면, 넷플릭스(Netflix)는 인터벌(Interval) 기반 캐싱 도입을 통해 Druid 쿼리 성능을 크게 개선했다. 특히, 고부하(High-volume) 이벤트 발생 시, 동일한 대시보드를 여러 사용자가 조회하더라도 Druid에 전송되는 쿼리 양은 거의 동일하게 유지되었다. 그 결과, Druid의 쿼리 처리량(Query Throughput) 병목 현상을 완화하고, 전체 쿼리 응답 시간(Query Response Time)을 66% 개선했다. 또한, Druid에 전송되는 쿼리 양을 33% 감소시켰으며, 캐시 응답 시간(Cache Response Time)은 P90 기준 5.5ms로 측정되었다. 이러한 성능 개선은 Druid의 자원 사용량 감소와 사용자 경험 향상에 기여했다.

향후 계획 및 시사점

넷플릭스(Netflix)는 인터벌(Interval) 기반 캐싱 기술을 Druid에 내장하는 방향으로 개발을 진행 중이다. 현재는 외부 프록시 형태로 구현되어, 추가적인 인프라 관리 및 SQL 템플릿(SQL Templating)과 같은 우회 방법이 필요하다. Druid 내부에 통합되면, 쿼리 플래너(Query Planner) 및 세그먼트 메타데이터(Segment Metadata)에 직접 접근하여 더욱 효율적인 캐싱이 가능할 것으로 예상된다. 또한, 오픈소스 커뮤니티(Open Source Community)에 기여하여, Druid 사용자들에게 혜택을 제공할 계획이다. 이러한 시도는 데이터 분석 시스템의 확장성 문제를 해결하고, 오픈소스 생태계에 기여하는 좋은 사례가 될 것이다.

Stop Answering the Same Question Twice: Interval-Aware Caching for Druid at Netflix Scale