Radar, Elasticsearch/MongoDB에서 Rust 기반 HorizonDB로 전환: 고성능 지오로케이션 인프라 구축기
🤖 AI 추천
대규모 위치 기반 API 서비스의 성능 및 확장성 문제 해결을 고려하는 백엔드 개발자, 데이터 엔지니어, 또는 CTO는 물론, Rust를 활용한 시스템 설계 및 최적화에 관심 있는 개발자에게 유용한 인사이트를 제공합니다. 특히 기존 Elasticsearch 및 MongoDB 운영 경험이 있거나, 고성능 데이터베이스 구축을 계획하는 팀에게 도움이 될 것입니다.
🔖 주요 키워드
핵심 기술
Radar는 수억 대 기기에서 하루 10억 건 이상의 API 콜을 처리하는 대규모 위치 기반 API 운영 시 발생하는 성능 및 확장성 문제를 해결하기 위해, 기존 Elasticsearch와 MongoDB 스택을 Rust로 개발된 자체 지리정보 데이터베이스인 HorizonDB로 전환했습니다. HorizonDB는 RocksDB, S2, Tantivy 등 다양한 오픈소스 라이브러리를 통합하여 고성능, 비용 효율성, 운영 간소화를 달성했습니다.
기술적 세부사항
- 기존 아키텍처의 문제점: Elasticsearch와 MongoDB의 높은 확장 비용 및 복잡성, 운영 어려움, 대규모 배치 입력의 비효율성, 과도한 리소스 할당, 안정적인 롤백 기능 부재.
- HorizonDB 구성 요소: Rust 언어 기반, RocksDB (고성능 LSM 트리 인프로세스 저장소), S2 (Google의 공간 인덱싱 라이브러리), Tantivy (효율적 문자열 압축 및 접두어 검색, 인프로세스 역색인 라이브러리), FST (효율적 문자열 압축/접두어 검색), LightGBM (질의 의도 분류, 속성 태깅 등 ML 모델 활용), FastText (단어 벡터 표현 생성, 검색 의미 이해).
- HorizonDB 개발 목표: 예측 가능한 오토스케일링, 단일 데이터 소스, 쉬운 변경/롤백, 운영 간소화, 로컬 개발 및 테스트 용이성.
- 성능 지표: 코어당 1,000 QPS 처리, 포워드 지오코딩 50ms, 리버스 지오코딩 <1ms, 범용 하드웨어에서의 선형 확장성.
- 데이터 처리: Apache Spark로 데이터 전처리 후 Rust에서 S3에 버전 관리 파일로 저장.
- Rust의 장점: 시스템 프로그래밍 언어, 컴파일 및 메모리 안전성 보장, 가비지 컬렉션 없이 예측 가능한 대용량 인덱스 메모리 관리, 고수준 추상화 지원.
- 운영 효율성: 단일 멀티스레드 프로세스 기반 동작으로 비용 절감, 성능 개선, 높은 신뢰성 확보. 개발 생산성 향상으로 신규 데이터 및 기능의 신속한 적용 가능.
개발 임팩트
- 서비스 속도 대폭 향상 및 운영 단순화, 신뢰성 개선.
- 월 수만 달러의 운영 비용 절감 (Mongo, Elasticsearch 등 대규모 클러스터 및 마이크로서비스 종료).
- 개발팀이 새로운 기능과 데이터 소스를 하루 만에 적용 및 평가 가능.
커뮤니티 반응
- 일부 사용자는 자세한 내용 부족 및 오픈소스 계획 부재에 아쉬움을 표하며 Typesense, DuckDB(Spatial 플러그인 포함)를 대안으로 추천.
- 작성자는 내용 분산을 위해 단계별 블로그 발행 계획을 밝히며, 개인 경험 기반 추천에 감사 표현.
- 오픈소스 통합의 어려움, DuckDB의 샤딩/클러스터링 부재에 대한 논의.
- Typesense의 성능과 개발 경험에 대한 긍정적 평가.
- "오피스 근무 문화"를 첫 번째 혜택으로 강조하는 것에 대한 비판적 시각 및 재택 vs. 통근에 대한 다양한 의견 교환.
- OSM 데이터 처리를 위한 Photon, LMDB 사용에 대한 제안.
- 자체 데이터 저장소/쿼리 엔진 설계에 대한 관심 증가와 함께, NIH 신드롬 및 검증된 제품 선호에 대한 의견.
- Elasticsearch 대체 시도에 대한 흥미와 함께, 시스템 설계의 세부 정보 부족에 대한 지적.
- 작성자는 분산 시스템 문제를 모놀리식 시스템으로 전환하는 동기, RocksDB/Tantivy 채택 이유, ES 클러스터 운영의 부담감, 더 단순하고 안정적인 대안 추구 의사를 밝힘.
- 개별 요구사항에 맞춘 솔루션 조합 사례와 Quickwit에 대한 관심 표현.
- RocksDB의 안정성에 대한 상반된 경험 공유 (LevlelDB와의 차이점 강조).
- Elasticsearch 키워드로 인한 클릭 유입과 Radar 서비스에 대한 관심 표명.
📚 관련 자료
tantivy
Tantivy는 Rust로 작성된 빠른 전체 텍스트 검색 엔진으로, Lucene과 유사한 인프로세스 역색인 라이브러리를 제공합니다. HorizonDB의 검색 기능 구현에 핵심적으로 활용되었으며, 효율적인 문자열 압축 및 접두어 검색 기능을 제공합니다.
관련도: 95%
RocksDB
RocksDB는 Facebook에서 개발한 고성능 임베디드 키-값 저장소로, LSM 트리를 기반으로 합니다. HorizonDB에서 지리 정보 데이터를 저장하고 고속으로 접근하는 데 사용되었으며, 수백 GB의 데이터를 처리하는 데 최적화되어 있습니다.
관련도: 90%
s2-geometry-golang
S2 Geometry Library는 Google에서 개발한 공간 인덱싱 라이브러리로, 지구 표면을 사분면으로 분할하여 점-다각형 조회를 고속화합니다. Radar는 C++ S2 라이브러리의 Rust 바인딩을 자체 개발하여 HorizonDB에 적용했으며, 이는 위치 기반 서비스의 핵심 성능을 좌우합니다. (Rust 바인딩은 별도 프로젝트로 존재할 수 있으나, S2 자체의 중요성을 고려하여 해당 라이브러리를 추천합니다.)
관련도: 70%