
안정성과 성능을 모두 잡은 Java 기반 사이드카 sitar-agent의 설계 노하우와 SQLite 마이그레이션 전략
에어비앤비의 핵심 동적 구성 시스템인 Sitar의 진화 과정을 다룹니다. 대규모 트래픽 환경에서 설정 전파의 신뢰성을 확보하기 위해 사이드카 아키텍처를 선택하고, 로컬 스토리지 최적화를 통해 성능 한계를 극복한 엔지니어링 여정을 소개합니다.
대규모 마이크로서비스 환경에서 설정 관리 시스템을 설계하거나, 성능과 운영 단순성 사이에서 고민하는 인프라 엔지니어에게 적극 추천합니다.
수만 개의 서비스 인스턴스가 운영되는 에어비앤비 환경에서 서비스 재배포 없이 실시간으로 동적 설정을 빠르고 안정적으로 전달해야 하는 과제가 있었습니다. 특히 설정 서버의 장애 상황에서도 서비스 가동성을 유지하고 수초 내에 모든 노드에 설정을 전파하는 성능이 요구되었습니다.
Ruby에서 Java로 재작성된 경량 Kubernetes 사이드카 'sitar-agent'를 도입하여 S3 스냅샷 프리로딩 기능을 구현했습니다. 또한 로컬 데이터스토어를 기존 Sparkey에서 동시성 제어가 우수한 SQLite로 교체하고, 서버 부하를 줄이기 위해 캐싱 최적화된 풀(Pull) 모델을 채택했습니다.
S3 스냅샷을 통해 포드 시작 시 부트스트랩 속도를 높이고 서버 의존성을 낮추었으며, SQLite 도입으로 멀티 언어 지원 및 읽기/쓰기 성능을 대폭 개선했습니다. 결과적으로 수만 개의 포드에 수십 초 내로 설정을 안전하게 전파할 수 있는 확장성을 확보했습니다.
Trade-off
비용 절감을 위해 메인 컨테이너 내 라이브러리 방식을 고려했으나, 다국어 지원의 복잡성과 리소스 격리 부족으로 인해 사이드카 방식을 유지하기로 결정했습니다. 실시간성을 위해 푸시 모델을 고려할 수 있었으나 운영 단순성을 위해 최적화된 풀 모델을 선택했습니다.
기본 컨테이너와 동일한 포드 내에서 실행되는 보조 컨테이너로, 메인 서비스 로직과 독립적으로 기능을 수행합니다.
설정 상태를 압축하여 S3에 저장하고 포드 시작 시 이를 로드하여 서버 부하를 줄이는 기술입니다.
Write-Ahead Logging 기술을 사용하여 데이터베이스의 읽기와 쓰기 작업을 동시에 수행할 수 있도록 지원하는 모드입니다.




