Skip to content

방송 녹화 시 CPU 과부하 문제를 해결해보자

Seungheon Han edited this page Dec 5, 2024 · 3 revisions

사용자가 방송 송출

Pasted image 20241205115213

방송 송출하면서 녹화 진행

Pasted image 20241205114714

1. 방송 송출 중 CPU 과부하 발생

  • 약 10명의 사용자가 방송을 송출할 경우 CPU 사용량이 약 20%까지 상승.
  • 방송 중 녹화 작업을 시작하면 CPU 사용량이 급격히 상승하여 100%에 도달

2. CPU 과부하로 인한 문제

  • 녹화 영상 품질 저하: HLS로 변환하는 과정에서 CPU 과부하로 인해 패킷 손실 발생.
  • 방송 송출 및 시청에 영향: CPU 사용량이 높아져 실시간 스트리밍 품질에도 부정적인 영향을 미침.

원인 분석

  • FFmpeg로 WebM 영상을 HLS로 변환하는 작업은 실시간 인코딩이 필요하기 때문에 매우 높은 CPU 리소스를 요구
  • 특히, 실시간으로 변환을 진행할 경우 CPU 사용량이 급격히 증가   

해결 방안

핵심 아이디어: HLS 변환 작업을 지연처리

  • 현재 서비스의 주요 목적은 실시간 스트리밍이지 녹화 영상의 실시간 제공이 아님.
  • 녹화 영상을 실시간으로 변환할 필요가 없기 때문에, 불필요하게 CPU 리소스를 낭비.
  • 녹화 영상을 실시간으로 변환하지 않고, CPU 사용량이 안정된 시점에 변환을 진행하여 시스템 성능을 최적화.

1. 녹화 영상의 저장

  • 녹화를 시작하면 HLS로 변환하지 않고, 원본 WebM 영상을 로컬 저장소에 우선 저장.

2. 변환 작업 큐 관리

  • 녹화 종료 시점에 변환 작업 요청을 큐(redis)에 저장.
  • 요청 정보: videoId, title, 녹화 시간, 파일 경로 등.

3. CPU 사용량 기반의 작업 스케줄링

  • 주기적으로 CPU 사용량을 확인.
  • CPU 사용량이 일정 수준 이하(예: 30%)일 때, 큐에서 하나씩 작업을 꺼내 HLS로 변환.

4. 변환 작업 완료 후 업로드

  • 변환 작업 완료 시 HLS 파일을 Object Storage에 업로드.
  • 이후 사용자에게 제공 가능.

결과

CPU 사용량 안정화

  • 녹화 시 CPU 과부하 문제 해결: 녹화 영상을 HLS로 변환하는 작업을 지연 처리함으로써 CPU 사용량을 효과적으로 제어.
  • 방송 송출 중 CPU 사용량이 20% 수준으로 유지되어 안정적인 서비스 제공 가능.

패킷 손실 감소

  • HLS 변환 작업이 지연 처리됨에 따라, 패킷 손실이 현저히 줄어들어 녹화 영상 품질이 개선됨.

실시간 스트리밍 품질 향상

  • CPU 과부하로 인한 스트리밍 품질 저하 문제 해결.
  • 방송 송출 및 시청에 영향을 미치지 않도록 안정적인 성능을 유지.

시스템 확장성 확보

  • 변환 작업을 큐로 관리함으로써 동시 사용자 수 증가에도 안정적으로 대응 가능.
  • CPU 사용량 기반 스케줄링을 통해 효율적으로 리소스를 사용하며, 서비스 확장에도 유연하게 대처.
image

PR 바로가기

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally