AI 요약
Kent C. Dodds는 자신의 'Call Kent' 팟캐스트 서비스를 위해 Fly.io 인스턴스에서 직접 FFmpeg를 실행하여 오디오를 처리해 왔습니다. 226회 분량까지는 큰 문제 없이 운영되었으나, 2026년 3월 6일 대용량 녹음 파일을 처리하던 중 CPU 부하 평균이 400-500%에 도달하며 전체 웹사이트(kentcdodds.com) 성능이 저하되는 장애가 발생했습니다. 공유 CPU의 할당 쿼터가 소진되어 스레드가 제한되는 상황이 발생하자, 그는 성능 중심 CPU로 긴급 업그레이드를 단행하며 상황을 수습했습니다. 이번 사건은 '단순하게 시작하고 현실의 필요에 따라 개선한다'는 그의 철학을 다시 확인하는 계기가 되었으며, 결국 메인 서버의 부하를 줄이기 위해 Cloudflare의 최신 인프라로 작업을 분리하기로 했습니다.
핵심 인사이트
- 장애 발생 데이터: 2026년 3월 6일, 대용량 오디오 처리 중 CPU Load Average가 평소 대비 극심한 400~500%까지 치솟으며 서버가 마비됨.
- 기존 성과: 별도의 큐 시스템 없이 인라인 FFmpeg 처리 방식으로 226개의 에피소드를 성공적으로 발행하며 단순한 설계의 효율성을 증명함.
- 인프라 제약: Fly.io의 공유 CPU(Shared CPU) 환경에서 할당된 CPU 예산이 소진되면서 스케줄러에 의한 강제 스로틀링(Throttling)이 발생함.
- 해결 방안: 메인 서버의 CPU 포화 문제를 해결하기 위해 Cloudflare Queues와 Cloudflare Containers를 활용한 외부 워크로드 오프로딩을 채택함.
주요 디테일
- FFmpeg 파이프라인: 사용자 오디오와 응답 오디오 합성, 무음 트리밍, 음량 정규화(Normalizing), 인트로/아웃로 삽입 등 복잡한 연산 과정을 포함함.
- 구조적 문제: 기존에는 HTTP 요청 중에 FFmpeg가 직접 실행되어 작업이 끝날 때까지 요청이 차단(Blocking)되는 구조였음.
- 서버 아키텍처: kentcdodds.com은 Fly.io에서 쓰기 전용 Primary 인스턴스와 읽기 전용 Replicas로 운영되며, Primary 서버에서 FFmpeg와 DB 쓰기가 경쟁하는 문제가 있었음.
- 전략적 타이밍: Cloudflare Queues와 Containers 같은 서비스가 성숙해진 현재 시점에 전환함으로써, 과거보다 더 쉽고 효율적인 구현이 가능해짐.
- 비용 효율성: 장애 발생 전까지는 메인 서버의 유휴 자원을 활용하는 '피기배킹(Piggybacking)' 방식을 통해 추가 비용 없이 안정적으로 운영함.
향후 전망
- 안정성 확보: FFmpeg 작업을 외부 컨테이너로 분리함으로써 대규모 오디오 파일 처리 시에도 메인 웹 서비스의 가용성이 100% 유지될 것으로 기대됨.
- 확장성 개선: Cloudflare 기반의 서버리스/컨테이너 아키텍처를 통해 향후 트래픽 증가나 작업량 확대에 유연하게 대응할 수 있는 발판을 마련함.
출처:hackernews
