합성 테스트를 넘어서: 에어비앤비에서 실제 데이터베이스 워크로드를 캡처하고 다시 실행하기
"Airbnb는 운영에 MySQL 호환 데이터베이스에 크게 의존합니다. 이러한 데이터베이스를 대규모로 관리하는 것은 용량 계획, 업그레이드 중 일관성 보장, 프로덕션 인시던트 디버깅과 같은 과제를 안고 있습니다. 이러한 문제를 해결하기 위해 Airbnb는 실제 프로덕션 데이터베이스 트래픽을 캡처하고 재생하는 시스템을 개발했습니다.이전에는 Airbnb의 데이터베이스 쿼리 캡처 및 재생 시스템이 파편화되어 있었고 정확한 재생을 위한 충분한 세부 정보가 부족했습니다. 또한 유지보수 부담이 크고 확장성이 떨어졌습니다. 새로운 시스템은 실제 트래픽을 사용한 부하 테스트, 업그레이드 간 쿼리 호환성 보장, 성능 디버깅 지원이라는 세 가지 주요 목표를 가지고 설계되었습니다.시스템 아키텍처는 애플리케이션과 데이터베이스 사이에 위치하는 기존 프록시인 ProxySQL을 활용합니다. 이를 통해 애플리케이션 변경 없이 단일 클라이언트 비종속적 캡처 지점을 제공합니다. 시스템은 세 가지 자체 개발 구성 요소로 구성됩니다: Log Mover, Log Processor, Log Replayer.Log Mover는 ProxySQL의 사이드카로 배포되어 쿼리 로그를 수집하고 클라우드 객체 스토리지로 전송합니다. Log Processor는 오프라인 작업으로, 각 클러스터에 대해 재생 가능한 데이터셋으로 이러한 로그를 파싱, 그룹화 및 정렬합니다. 또한 세밀한 제어를 위해 타임스탬프별로 쿼리를 버킷팅하고 자동 증가 동작의 일관성을 유지하기 위해 쿼리를 다시 작성합니다.Log Replayer는 캡처된 트래픽을 대상 데이터베이스에 대해 재생합니다. 사용자는 소스 클러스터, 시간 범위, 대상 엔드포인트 및 재생 모드를 지정합니다. 리플레이어는 부하 테스트 및 용량 계획을 위한 "Replay only"와 호환성 테스트를 위한 "Replay and compare"를 지원합니다.Replay Task Scheduler는 작업을 태스크로 분할하고 원래 타이밍 및 동시성을 보존하기 위해 실행을 관리합니다. Replay Task Worker는 대상 데이터베이스에 대해 로깅된 쿼리를 실행하기 위해 수평적으로 확장됩니다. 이 프레임워크는 성능 회귀 및 정확성 문제를 조기에 식별하여 MySQL 5.7에서 8.0으로의 데이터베이스 업그레이드 테스트에 중요했습니다. 이를 통해 팀은 프로덕션 배포 전에 성능 기준선이 유지되고 하위 호환 동작이 보장됨을 확인할 수 있습니다."