OpenAI가 대규모 저지연 음성 AI를 제공하는 방식
OpenAI가 대규모 저지연 음성 AI를 위한 WebRTC 구조를 공개했다.
OpenAI는 ChatGPT voice와 Realtime API처럼 대화 지연이 체감 품질을 좌우하는 음성 제품을 위해 WebRTC 인프라를 다시 설계했다. 주간 활성 사용자 9억 명 이상 규모에서 빠른 연결 설정, 낮은 지터, 낮은 패킷 손실이 필수였다.
핵심은 SFU 대신 transceiver 모델을 택한 점이다. 엣지의 transceiver가 클라이언트 WebRTC 연결을 종료하고, 내부에서는 추론·전사·음성 생성·도구 호출용 단순 프로토콜로 바꾼다. 이 transceiver가 ICE, DTLS, SRTP 같은 세션 상태를 모두 소유한다.
초기 구현은 Go와 Pion 기반의 단일 서비스였지만, Kubernetes에서 전통적인 one-port-per-session 방식은 잘 맞지 않았다.
- 대규모 UDP 포트 범위는 로드밸런서와 방화벽, 헬스체크 운영을 복잡하게 했다.
- ICE와 DTLS는 상태가 있어 패킷이 다른 프로세스로 가면 세션이 깨질 수 있었다.
- pod 증설, 축소, 재스케줄링이 잦아 고정 포트 범위 운영은 탄력성을 해쳤다.
해법은 relay + transceiver 분리였다. relay는 암호화나 코덱 협상 없이 패킷 메타데이터만 읽는 경량 UDP 포워더이고, transceiver는 뒤에서 WebRTC 세션 상태를 완전히 맡는다. 각 transceiver는 shared UDP socket 하나로 여러 세션을 처리하며, signaling은 transceiver가 담당하고 SDP answer에는 공용 relay VIP와 UDP port가 들어간다. 클라이언트의 첫 패킷인 STUN binding request에서 ICE ufrag를 읽어 목적지를 정한다.
relay는 세션을 메모리의 최소 상태와 타이머만으로 유지하고, 재시작 후에는 다음 STUN 패킷으로 다시 복구한다. 필요할 때는 Redis에 <client IP + Port, transceiver IP + Port> 매핑을 저장해 더 빨리 경로를 되찾는다.
전역 배치에서는 Global Relay와 Cloudflare의 geo/proximity steering을 사용해 사용자를 가까운 ingress와 cluster로 보낸다. 공용 UDP 표면은 작게 유지하면서도 첫 홉 지연과 지터, 손실 버스트를 줄여 음성 대화를 더 자연스럽게 만든다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.