Sitar-agent: 안정적인 동적 구성 사이드카를 대규모로 구축하기
Airbnb는 수천 개의 서비스 인스턴스에 동적 구성 변경 사항을 안정적으로 전달하기 위해 경량 Kubernetes 사이드카인 sitar agent를 개발했습니다. 구성 전달은 개발자가 Git 또는 UI를 통해 값을 생성하거나 업데이트하는 것으로 시작되며, 이 값은 Sitar Service에 저장됩니다. 주기적으로 구성의 전체 상태가 압축된 스냅샷으로 패키징되어 AWS S3에 업로드됩니다. 서비스 pod가 시작되면 sitar agent는 먼저 이 S3 스냅샷을 마운트된 디스크로 다운로드하여 빠른 부트스트랩을 가능하게 합니다. 그런 다음 스냅샷 생성 이후의 변경 사항에 대해 Sitar Service와 동기화하고 메인 애플리케이션 컨테이너에 준비 상태를 알립니다. 시작 후 에이전트는 몇 초마다 Sitar Service를 폴링하여 업데이트를 지속적으로 확인합니다. 메인 애플리케이션 컨테이너는 값을 캐싱하고 파일 변경을 감지하는 Sitar 클라이언트 라이브러리를 사용하여 마운트된 디스크에서 구성을 읽습니다. 주요 설계 결정은 사소한 비용 절감보다 안정성, 운영 안전성 및 다국어 지원을 우선시하여 sitar agent를 메인 컨테이너에 통합하는 대신 별도의 사이드카 컨테이너로 유지하는 것이었습니다. 이 시스템은 에이전트가 Sitar Service를 폴링하는 풀 모델을 사용하며, 로드 감소를 위해 서버 측 캐시 및 토큰 기반 데이터베이스 액세스로 최적화되었습니다. 로컬 온디스크 키-값 저장소에 대해 Airbnb는 SQLite의 우수한 동시성, 성능 및 다국어 지원으로 인해 레거시 Sparkey 기반 구현 대신 SQLite를 선택했습니다. SQLite의 내장 Write-Ahead Logging은 쓰기 중 동시 읽기를 허용하며, RocksDB의 높은 성능이지만 더 복잡한 모델보다 더 간단한 운영 모델이 선호되었습니다. 이 견고한 사이드카 설계는 Airbnb의 방대한 서비스 플릿 전반에 걸쳐 중요한 구성이 빠르고 안정적으로 전달되도록 보장합니다.