#Backend

합성 테스트를 넘어서: 에어비앤비의 실제 데이터베이스 워크로드 캡처 및 재생 시스템

합성 테스트를 넘어서: 에어비앤비의 실제 데이터베이스 워크로드 캡처 및 재생 시스템
01

Summary

"가짜 데이터는 가라!" 에어비앤비가 수백만 QPS의 실제 DB 트래픽을 그대로 복제해 테스트하는 방법

ProxySQL과 자체 개발한 재생 엔진으로 대규모 MySQL 업그레이드와 용량 산정의 리스크를 완벽하게 제거한 엔지니어링 스토리

에어비앤비가 합성 벤치마크 테스트의 한계를 극복하기 위해 프로덕션 데이터베이스의 실제 워크로드를 무중단으로 캡처하고 오프라인에서 재현하는 시스템을 구축한 과정을 상세히 소개합니다. 이 시스템은 무중단 트래픽 캡처, 시차 정렬 처리, 분산 리플레이 기술을 통해 서비스 장애 없이 대규모 MySQL 8.0 마이그레이션을 안전하게 완수한 핵심 열쇠였습니다.

  • 01ProxySQL 프록시 계층을 활용하여 애플리케이션 수정이나 성능 저하 없이 완전한 데이터베이스 트래픽을 중앙에서 캡처
  • 02동시성을 보존하기 위해 스케줄러가 작업자들에게 동일한 시작 시간을 부여하여 실제 트래픽의 속도와 경합 상황을 완벽 재현
  • 03MySQL 8.0 업그레이드 과정에서 쿼리 캐시 제거로 인해 지연 시간이 0.03초에서 2.6초로 급증한 쿼리 패턴을 미리 탐지하여 조치
  • 04ORDER BY 절이 불명확해 결과 순서가 달라지는 호환성 오류와 트랜잭션 오류를 사전에 '비교 재생' 모드로 감지
  • 05목표 QPS를 2배 이상 높여 부하를 가하는 시뮬레이션을 통해 트래픽 정점 기간의 데이터베이스 한계치를 안전하게 조기 식별

RECOMMENDATION

대규모 마이그레이션이나 DB 버전 업그레이드를 앞두고 실 트래픽 기반의 정밀한 호환성 검증이 필요한 백엔드 및 인프라 엔지니어들에게 ProxySQL 기반의 트래픽 재생 아키텍처 도입을 강력히 추천합니다.

The Problem

에어비앤비의 기존 데이터베이스 쿼리 캡처 시스템은 클라이언트 애플리케이션 단에서 언어별로 파편화되어 동작하여 유지보수 부담이 컸고, 트랜잭션 컨텍스트가 누락되어 새 데이터베이스에서 쿼리 실행 결과를 정확히 검증하고 재생하기 어려웠습니다.

The Solution

애플리케이션 수정 없이 ProxySQL 프록시 계층에서 쿼리를 캡처하고, 이진 로그를 파싱 및 트랜잭션 단위로 재정렬하는 Log Processor와 분산된 작업 서버를 통해 원본 트래픽의 동시성과 타이밍을 모방하여 대상 데이터베이스에 실행하는 Log Replayer 시스템을 자체 구축했습니다.

The Result

이 시스템을 통해 서비스 장애 없이 MySQL 5.7에서 8.0으로 전사 업그레이드를 완료했으며, 비결정적 정렬 쿼리 및 성능 저하 패턴(지연 시간이 0.03초에서 2.6초로 급증한 사례 등)을 사전 감지하고 실제 트래픽의 2배 규모로 부하 테스트를 수행하여 용량 산정 정밀도를 높였습니다.

Trade-off

일관성 있는 트랜잭션 재현을 위해 INSERT 쿼리의 자동 생성 ID(last_insert_id)를 고정하도록 쿼리를 재작성함에 따라, 대상 데이터베이스 고유의 네이티브 자동 증가(auto-increment) 생성 엔진 기능은 테스트 중에 검증할 수 없는 한계가 있습니다.

03

Key Concepts

Concept · 01

ProxySQL

MySQL 프로토콜을 완벽하게 이해하고 애플리케이션과 데이터베이스 레이어 사이에서 라우팅 및 쿼리 캐싱 등을 처리하는 고성능 오픈소스 프록시 서버입니다.

  • 에어비앤비 인프라 전체에 이미 도입되어 있어 별도의 소스코드 수정 없이 중앙 집중식으로 데이터베이스 트래픽 로그를 캡처하는 단일 진입점으로 사용되었습니다.
Concept · 02

Log Processor

캡처된 이진 형태의 혼합 로그들을 파싱하여 데이터베이스 클러스터별로 분류하고, 동일 세션 내 트랜잭션 쿼리를 정렬 및 시간 대역별 파일로 분할하는 데이터 가공 처리 장치입니다.

  • 트랜잭션 실행 순서를 맞추고, 재현 결과 보장을 위해 INSERT 문의 last_insert_id를 명시적인 고정값으로 강제 치환하는 쿼리 변환을 담당합니다.
Concept · 03

Log Replayer

가공된 데이터베이스 로그를 활용해 대상 데이터베이스에 직접 트래픽을 흘려보내는 부하 및 호환성 테스팅용 제어 프레임워크입니다.

  • 단순 재생(부하 테스트) 모드와 두 타겟 DB에 동일 쿼리를 날려 결과 데이터를 상호 비교하는 비교 재생(호환성 검증) 모드를 지원합니다.