AI Vibe Craft
← Назад к AI Vibe News

Редакция 4 мая 2026 г.

Новости

OpenAI ужала UDP под WebRTC: relay, transceiver и маршрут по ICE ufrag

OpenAI ужала UDP под WebRTC: relay, transceiver и маршрут по ICE ufrag

Более 900 млн пользователей в неделю получают голос ChatGPT и Realtime API — задержка сети моментально превращается в неловкие паузы и обрывы перебивания. OpenAI переложила классический WebRTC под связку relay и transceiver, чтобы не держать модель «один публичный UDP-порт на сессию», которая ломает автомасштабирование в Kubernetes и раздувает поверхность атаки.

Для большинства сессий это 1:1 — один человек или клиент против одной модели, а не многопользовательский зал, где логичен SFU. Поэтому edge-трансивер завершает клиентский WebRTC, переводит медиапоток во внутренние протоколы для распознавания, инференса и оркестрации, а бэкенды больше не притворяются WebRTC-пирами.

Три ограничения, которые столкнулись в проде

  • Футпринт портов: десятки тысяч UDP-портов на сервис плохо дружат с балансировщиками, фаерволами и пересадкой подов.
  • Липкость состояния: ICE и DTLS требуют, чтобы пакеты сессии попадали в тот же процесс, который поднял рукопожатие и расшифровку SRTP.
  • Первый хоп по миру: без близкого ingress клиент теряет миллисекунды ещё до входа в магистраль OpenAI.

Relay + transceiver без подмены семантики WebRTC

Relay — тонкий UDP-слой с малой публичной точкой входа: он не расшифровывает RTP и не гоняет state machine ICE, а по первому STUN-пакету читает серверный ICE username fragment и пересылает поток на владеющий трансивер. Трансивер по-прежнему видит обычный WebRTC-пайплайн с DTLS и SRTP; клиент не замечает подмены маршрута внутри облака.

  • Демультиплексирование: несколько трансиверов слушают общий UDP-сокет на внутреннем IP:port, relay держит минимальный in-memory NAT-сессию между клиентским адресом и целевым процессом.
  • Восстановление маршрута: после установления соответствия его подстраховывают Redis-кэшем, чтобы пережить рестарт relay быстрее, чем прилетит следующий STUN.
  • Прод-производительность: сервис relay написан на Go, использует SO_REUSEPORT, закрепление читающих горутин через runtime.LockOSThread и заранее выделенные буферы, чтобы не упираться в сборку мусора на горячем пути.

Глобальный вход и сигналинг

Fleet Global Relay развёрнут географически: первый пакет попадает в близкий ingress, что режет RTT, дрожь и потери до того, как аудио попадёт на backbone. Для сигналинга применяют geo- и proximity-steering Cloudflare — HTTP или WebSocket доходят до ближайшего кластера трансиверов, SDP отдаёт адрес relay, а ufrag несёт достаточно метаданных, чтобы Global Relay отправил медиа в нужный регион и процесс.

Урок для любых realtime-сценариев с моделями: сложность держать в узком маршрутизаторе, а не размазывать по каждому сервису инференса и не ломать клиентский стек WebRTC ради облачной эластичности.

Источник: How OpenAI delivers low-latency voice AI at scale.