WebRTC 시스템 구축 시 서버 아키텍처

WebRTC 서버 아키텍처

WebRTC 서버 구성요소

SFU 클라이언트가 보낸 영상/음성 등 미디어 스트림을 받아서, 각 스트림을 필요로 하는 구독자 클라이언트들에게 선택적으로 전달하는 중계 서버입니다.
CPU/메모리/네트워크 대역폭 등 리소스를 많이 사용하므로, 인스턴스 유형은 r6g.large 이상이 권장됩니다.
시그널링 서버 WebRTC에서 클라이언트 간 연결을 준비하는 서버입니다.
SDP 정보 (미디어 종류, 코텍 정보 등), ICE 후보 정보 (클라이언트가 통신 가능한 네트워크 IP/포트/프로토콜 목록) 를 교환하며, 실제 미디어 스트림 데이터는 전달하지 않습니다.
인스턴스 유형은 t4g.medium 정도면 충분합니다.
STUN 서버 클라이언트 공인 IP 및 포트를 확인하여 P2P 연결을 도와주는 보조 서버입니다.
P2P 연결 시 서버를 거치지 않고 클라이언트끼리 데이터를 교환할 수 있습니다.
서버에 오픈소스 coturn을 설치해 구축하거나, Google 공개 STUN 서버를 사용하여 비용을 절감할 수 있습니다.
TURN 서버 NAT 장비 또는 방화벽 때문에 STUN 서버를 통한 P2P 연결 불가 시, 미디어 스트림 데이터를 대신 전달하는 중계 서버입니다.
서버에 오픈소스 coturn을 설치해 구축할 수 있습니다.

SFU 및 시그널링 서버 역할을 하는 LiveKit 서버 구축은 Docker Compose 실행으로도 가능합니다.

트래픽 분산 및 서버 자동 확장

ELB (Elastic Load Balancer) 로드밸런서는 각 서버에 요청 트래픽을 분산합니다.
ASG (Auto Scaling Group) 부하/장애 시 서버 인스턴스를 자동으로 추가하고, 부하가 낮으면 서버를 자동 삭제하는 그룹입니다.

모니터링 및 장애 알림

AWS CloudWatch 또는 NCP Cloud Insight 서버 CPU, 메모리, 네트워크, 애플리케이션 상태 모니터링 및 로그 수집
CPU 과부하 및 오류 시 알람 발생
Lambda CloudWatch 알람, API 요청 등 발생 시 자동 실행되는 함수
Slack 알림 전송, 이메일 발송, 자동 복구 등 가능