같은 질문에 두 번 답하지 마세요: 넷플릭스 규모의 Druid를 위한 간격 인식 캐싱
넷플릭스는 대규모 환경에서 Druid 쿼리 성능을 향상시키기 위해 실험적인 캐싱 레이어를 구현했습니다. 이 캐싱 시스템은 특히 대규모 이벤트 발생 시 대시보드에서 발생하는 중복 쿼리 문제를 해결합니다. 핵심 아이디어는 결과의 일부를 캐싱하고, 가장 최신 데이터에 대해서만 Druid에 쿼리하여 약간의 오래된 데이터(staleness)를 감수하는 것입니다. 지수 시간-생존(TTL) 값을 사용하여, 늦게 도착하는 이벤트를 처리하기 위해 오래된 데이터는 더 오래 캐싱됩니다. 캐싱 시스템은 캐시된 데이터의 효율적인 범위 스캔을 위해 맵-오브-맵 구조를 사용합니다. 캐시는 Druid 라우터에서 요청을 가로채 필요에 따라 결과를 제공하거나 Druid에 쿼리합니다. 이 솔루션은 캐시된 데이터와 최신 데이터를 결합하여 완전한 결과를 반환하고, 최신 데이터를 비동기적으로 캐싱합니다. 빈 버킷에 대한 부정 캐싱(negative caching)이 사용되며, 후행 빈 버킷을 캐싱하는 것에 대한 예방 조치가 취해집니다. 이 시스템은 넷플릭스의 키-값 데이터 추상화 계층(KVDAL)을 사용하며, Cassandra를 기반으로 하여 각 데이터 포인트에 대해 독립적인 TTL을 제공합니다. 캐싱 레이어는 Druid 쿼리 부하를 크게 줄이고 쿼리 시간을 개선했으며, 특히 대량의 이벤트 발생 시 효과가 컸습니다. 이 캐싱 시스템은 아직 실험 단계에 있으며, 향후 목표는 Druid 자체에 통합하는 것입니다.