OpenAI-ingeniørene Yi Zhang og William McDonald beskriver i et innlegg på OpenAIs Engineering Blog hvordan de håndterer sanntids-stemme i stor skala. Tre krav kolliderte: 900 millioner ukentlige aktive brukere, rask sesjonsoppstart, og lav, stabil latens for at samtaleturer skal føles naturlige.
Den vanlige WebRTC-modellen, én UDP-port per sesjon, fungerer dårlig i Kubernetes. Cloud-load-balancere er ikke designet for titusenvis av offentlige UDP-porter, og pods som flyttes rundt kan ikke holde stabile portranger. Løsningen ble å splitte arkitekturen i to: et tynt forwarding-lag (relay) som eksponerer en liten, fast UDP-overflate, og en stateful transceiver som eier ICE, DTLS, SRTP og hele sesjonens livssyklus.
«Den beste plassen å legge kompleksitet er i et tynt rutinglag, ikke i hver backend-tjeneste, og ikke i tilpasset klient-atferd.» — Yi Zhang og William McDonald, OpenAI Engineering
Nøkkelen er hvordan reléet ruter den aller første pakken, før noen sesjon eksisterer. WebRTC har allerede en innebygd kandidat: ICE username fragment («ufrag»), en kort identifikator som utveksles under signalering. OpenAI genererer ufrag-en på server-siden slik at den koder hvilken transceiver-cluster som eier sesjonen. Reléet leser STUN-headeren, dekoder ufrag, og videresender pakken. Resten av flyten cacher mappingen i Redis, slik at en relé-omstart ikke knekker pågående sesjoner.
Go-implementasjonen bruker SO_REUSEPORT for å la flere workers binde samme UDP-port, og runtime.LockOSThread for å pinne hver lese-goroutine til én CPU-kjerne. Det holdt pakkerate-budsjettet uten å gå til kernel-bypass-rammeverk som DPDK. Signalering rutes via Cloudflare geo-steering slik at både setup og media treffer en relé i nærheten av brukeren.
Hva bør du gjøre?
- Hvis du bygger sanntids-stemme med Pion eller LiveKit: vurder om du faktisk trenger en SFU. For 1:1-trafikk gir transceiver-modellen langt enklere skalering, slik OpenAI viser.
- Lær ICE-ufrag-trikset hvis du kjører WebRTC bak en Kubernetes-load-balancer. Du kan kode rutingmetadata inn i ufrag selv og slippe en hot-path lookup for hver første pakke.
- Mål
time-to-first-audioende-til-ende, ikke bare server-side latens. Geo-steering på signalering kuttet venting før brukeren får snakke.