Inside the feature store powering real-time AI in Dropbox Dash
Dropbox가 Feast + Go + Dynovault 조합으로 하이브리드 feature store를 구축해 sub-100ms 레이턴시 유지하며 5분 단위 feature 갱신 달성
AI 요약
Context
Dropbox Dash의 검색 랭킹 시스템은 단일 쿼리당 수천 개의 feature 조회를 병렬로 처리해야 하면서 sub-100ms 레이턴시를 충족해야 했다. 기존 클라우드 네이티브 feature store들은 온프레미스 저지연 인프라와 Spark 기반 클라우드 환경의 이원화된 인프라를 동시에 지원하지 못했다. 또한 사용자 행동 변화를 실시간으로 반영하면서 배치와 스트리밍 계산을 모두 효율적으로 처리할 수 있는 통합 프레임워크가 필요했다.
Technical Solution
- Feast 선택 및 커스터마이징: Feast의 orchest계층과 serving API를 기반으로 하되, Python 온라인 serving 경로를 Go 서비스로 교체해 고동시성과 저지연 요구사항 충족
- Dynovault 활용: AWS DynamoDB 호환 스토리지로 인프라의 on-premises 영역에 co-locate되어 ~20ms 클라이언트 레이턴시를 공급
- 2계층 스토리지 아키텍처: 클라우드 기반 스토리지가 오프라인 인덱싱과 저장을 담당하고, Dynovault가 instant feature lookup을 처리
- Spark 기반 feature 수집 및 계산: 배치 처리 워크로드를 Spark 작업으로 통합
- 선택적 갱신 최적화: 15분 윈도우에서 1~5%의 feature 값만 변경된다는 접근 패턴 분석을 통해 쓰기 볼륨 대폭 감소
Impact
- 배치 사이클 기간: 약 1시간 → 5분 단위 갱신으로 단축
- 클라이언트 측 레이턴시: ~20ms 달성
- 온라인 serving 경로의 언어 변경(Python → Go)으로 Global Interpreter Lock 제약 제거 및 예측 가능한 동시성 확보
Key Takeaway
오픈소스 기초 위에 인프라 제약을 정확히 이해한 선택적 커스터마이징을 결합하면, 단일 벤더 솔루션의 한계를 극복하면서도 풀스택 자체 구축의 복잡성을 피할 수 있다. 접근 패턴 분석(15분 내 변경 비율 1~5%)과 같은 실제 사용 패턴 이해가 시스템 설계의 핵심 최적화 기회를 드러낼 수 있다.
실천 포인트
고처리량 mixed CPU/I/O 워크로드를 제공하는 feature serving 시스템을 구축할 때, Python의 GIL 병목을 제거하기 위해 온라인 serving 경로만 선택적으로 Go로 재구현하면 동시성 제약을 해결하면서 나머지 시스템의 개발 유지보수성을 유지할 수 있다. 또한 feature 갱신 빈도를 설계하기 전에 실제 데이터의 변경 비율을 측정해야 한다. 만약 일정 시간 윈도우에서 변경 비율이 5% 이하라면 전체 배치 사이클을 단축할 수 없더라도 조건부 쓰기 최적화로 쓰기 볼륨을 대폭 줄일 수 있다.