Elasticsearch와 MongoDB를 Rust와 RocksDB로 대체한 과정

1 month ago 11

  • Radar는 대규모 위치 기반 API를 운영함에 따라 성능 및 확장성 문제를 해결하기 위해 기존 Elasticsearch와 MongoDB를 자체 개발한 HorizonDB로 전환함
  • HorizonDB는 Rust로 개발되었으며, RocksDB, S2, Tantivy, FST, LightGBM, FastText 등 다양한 오픈소스 도구를 결합하여 고성능 지리정보 데이터베이스를 제공함
  • 기존 구조에서는 Elasticsearch와 MongoDB의 확장 비용 및 복잡성이 커서 운영에 어려움이 있었음
  • HorizonDB는 단일 멀티스레드 프로세스 기반으로 동작하여 비용 절감, 성능 개선, 높은 신뢰성을 달성함
  • 전체적으로 개발 생산성과 운영 효율이 크게 향상되어, 신규 데이터나 기능의 신속한 적용이 가능해짐

소개 및 배경

Radar는 전 세계 수억 대 기기에서 하루 10억 건 이상의 API 콜을 처리하는 지오로케이션 인프라 플랫폼
Radar에서 제공하는 주요 API에는 Geocoding, Search, Routing, Geolocation compliance 기능이 포함됨

데이터 규모와 제품이 확장됨에 따라 고성능·확장성·비용 문제 해결이 시급해짐
이를 위해 Rust로 작성한 HorizonDB를 도입, 다양한 위치 서비스 기능을 하나의 고성능 바이너리에서 제공함

HorizonDB의 성능 지표:

  • 코어당 1,000 QPS 처리
  • 포워드 지오코딩 중간 지연 50ms, 리버스 지오코딩 <1ms
  • 범용 하드웨어에서 선형 확장 가능

기존 시스템의 한계

HorizonDB 도입 전, Radar의 지오코딩 서비스는 포워드 기능에 Elasticsearch와 마이크로서비스, 리버스 기능에 MongoDB를 사용함
이 구조는 다음과 같은 문제점이 존재함:

  • Elasticsearch는 쿼리를 모든 샤드에 분산, 주기적으로 배치 업데이트 필요
  • MongoDB는 대용량 배치 입력이 어려우며, 과도한 리소스 할당 및 안정적인 롤백 기능 부재

HorizonDB 아키텍처

HorizonDB 개발 목표:

  1. 효율성 - 일반 하드웨어에서 동작, 예측 가능한 오토스케일링, 모든 지오 엔티티의 단일 데이터 소스 역할
  2. 운영성 - 데이터 자산을 하루에도 여러 번 빌드 및 처리, 변경·롤백이 용이, 운영 간소화
  3. 개발 경험 - 로컬 환경에서 실행 가능, 변화 및 테스트 손쉬움

HorizonDB는 RocksDB, S2, Tantivy, FSTs, LightGBM, FastText 등 여러 오픈소스를 활용하며, 데이터는 Apache Spark로 전처리 후 Rust에서 S3에 버전 관리 파일로 저장

Rust

  • 모질라에서 개발한 시스템 프로그래밍 언어
  • 컴파일 및 메모리 안전성 보장, 가비지 컬렉션 없이 예측 가능한 대용량 인덱스 메모리 관리 가능
  • Null 처리, 패턴 매칭 등 고수준 추상화 지원해 복잡한 검색 랭킹 로직을 표현 쉽게 함
  • 멀티스레드 단일 프로세스로 SSD에서 수백 GB의 데이터 처리에 최적화

RocksDB

  • 고성능 LSM 트리 기반 인프로세스 저장소
  • 마이크로초 단위 응답, 대용량 데이터에도 안정적인 속도

S2

  • Google의 공간 인덱싱 라이브러리로 지구를 사분면으로 분할해 점-다각형 조회를 고속화함
  • Radar는 C++ S2 라이브러리의 Rust 바인딩을 자체 개발, 곧 오픈소스 공개 예정

FSTs (Finite State Transducers)

  • 효율적 문자열 압축·접두어 검색 데이터 구조
  • 쿼리의 80%가 규칙적인 “행복 경로(happy-path)”임을 반영, 메모리 수 MB로 수백만 경로 캐시 가능

Tantivy

  • Lucene과 유사한 인프로세스 역색인 라이브러리
  • 기존 Elasticsearch 같은 외부 서비스 대신 도입 이유:
    • 검색 품질 - 동적 키워드 확장 등 고급 검색 처리에 UML 통신 지연 없이 대응
    • 운영 단순화 - 단일 프로세스 내 처리, 대용량 인덱스도 메모리 맵핑으로 손쉬운 확장 가능

FastText

  • 자체 코퍼스와 로그로 학습된 FastText 모델을 이용해 단어의 벡터 표현 생성, ML 응용에 활용
  • 오타 및 미등록어에 강인하며, 인접 벡터의 의미 유사성을 활용해 검색 의미 이해 가능

LightGBM

  • 질의 의도 분류, 질의 내 속성 태깅 등 다수의 LightGBM 모델 활용
  • 예: “New York” 등 지역 질의는 주소 검색 생략, “841 Broadway” 같은 경우 POI/지역 탐색 건너뛰기

Apache Spark

  • 수억 건 데이터 포인트를 1시간 이내 고속 처리, 조인/집계 성능 향상을 위해 작업 지속 개선
  • 최종 데이터는 S3에 저장되어, Amazon Athena나 DuckDB 등으로 SQL 기반 결과 탐색 가능

결과

HorizonDB 도입 결과:

  • 서비스가 대폭 빨라지고 운영이 단순화, 신뢰성 개선
  • 개발팀이 새로운 기능과 데이터 소스를 하루 만에 적용 및 평가 가능
  • Mongo, Elasticsearch 등 대규모 클러스터 및 여러 마이크로서비스 종료로 월 수만 달러 절감

Radar는 향후 대규모 확장에 대응할 준비를 마침
특정 기능 설계 과정에 대해서는 향후 블로그에서 소개 예정

경력 채용 안내

Radar는 API뿐 아니라 SDK, 지도, DB 등 차세대 위치 인프라를 구축하는 기업임
개발자 친화적이며 빠른 위치 서비스를 지향
관심 있다면 채용 페이지에서 채용 정보를 확인 가능

Read Entire Article