
ProxySQL과 자체 개발한 재생 엔진으로 대규모 MySQL 업그레이드와 용량 산정의 리스크를 완벽하게 제거한 엔지니어링 스토리
에어비앤비가 합성 벤치마크 테스트의 한계를 극복하기 위해 프로덕션 데이터베이스의 실제 워크로드를 무중단으로 캡처하고 오프라인에서 재현하는 시스템을 구축한 과정을 상세히 소개합니다. 이 시스템은 무중단 트래픽 캡처, 시차 정렬 처리, 분산 리플레이 기술을 통해 서비스 장애 없이 대규모 MySQL 8.0 마이그레이션을 안전하게 완수한 핵심 열쇠였습니다.
대규모 마이그레이션이나 DB 버전 업그레이드를 앞두고 실 트래픽 기반의 정밀한 호환성 검증이 필요한 백엔드 및 인프라 엔지니어들에게 ProxySQL 기반의 트래픽 재생 아키텍처 도입을 강력히 추천합니다.
에어비앤비의 기존 데이터베이스 쿼리 캡처 시스템은 클라이언트 애플리케이션 단에서 언어별로 파편화되어 동작하여 유지보수 부담이 컸고, 트랜잭션 컨텍스트가 누락되어 새 데이터베이스에서 쿼리 실행 결과를 정확히 검증하고 재생하기 어려웠습니다.
애플리케이션 수정 없이 ProxySQL 프록시 계층에서 쿼리를 캡처하고, 이진 로그를 파싱 및 트랜잭션 단위로 재정렬하는 Log Processor와 분산된 작업 서버를 통해 원본 트래픽의 동시성과 타이밍을 모방하여 대상 데이터베이스에 실행하는 Log Replayer 시스템을 자체 구축했습니다.
이 시스템을 통해 서비스 장애 없이 MySQL 5.7에서 8.0으로 전사 업그레이드를 완료했으며, 비결정적 정렬 쿼리 및 성능 저하 패턴(지연 시간이 0.03초에서 2.6초로 급증한 사례 등)을 사전 감지하고 실제 트래픽의 2배 규모로 부하 테스트를 수행하여 용량 산정 정밀도를 높였습니다.
Trade-off
일관성 있는 트랜잭션 재현을 위해 INSERT 쿼리의 자동 생성 ID(last_insert_id)를 고정하도록 쿼리를 재작성함에 따라, 대상 데이터베이스 고유의 네이티브 자동 증가(auto-increment) 생성 엔진 기능은 테스트 중에 검증할 수 없는 한계가 있습니다.
MySQL 프로토콜을 완벽하게 이해하고 애플리케이션과 데이터베이스 레이어 사이에서 라우팅 및 쿼리 캐싱 등을 처리하는 고성능 오픈소스 프록시 서버입니다.
캡처된 이진 형태의 혼합 로그들을 파싱하여 데이터베이스 클러스터별로 분류하고, 동일 세션 내 트랜잭션 쿼리를 정렬 및 시간 대역별 파일로 분할하는 데이터 가공 처리 장치입니다.
가공된 데이터베이스 로그를 활용해 대상 데이터베이스에 직접 트래픽을 흘려보내는 부하 및 호환성 테스팅용 제어 프레임워크입니다.




