Mandraki Mandraki
Începeți acum
Înapoi la blog
webrtc sfu technical infrastructure scale

WebRTC la scară: cum gestionează Mandraki apelurile de grup masive

Cum livrează arhitectura SFU a Mandraki apeluri video de grup criptate, cu latență redusă — și cum se scalează la sute de sesiuni concurente pe infrastructură europeană.

Mandraki Team ·

Apelul video de grup este una dintre acele funcționalități care par simple pentru utilizatori, dar implică o complexitate inginerească considerabilă sub suprafață. Un apel unu-la-unu este relativ direct — doi colegi schimbă media direct. Dar imediat ce adăugați un al treilea participant, deciziile arhitecturale se multiplică, iar până ajungeți la cincizeci de participanți pe mai multe sesiuni concurente, vă confruntați cu o problemă cu adevărat dificilă de sisteme distribuite.

Această postare explică cum arhitectura media în timp real a Mandraki este concepută pentru scară masivă — fără a face compromisuri în privința criptării sau a suveranității datelor.

De ce nu peer-to-peer

Într-o topologie mesh peer-to-peer, fiecare participant trimite fluxul său media direct fiecărui alt participant. Pentru un apel cu N participanți, fiecare persoană trimite N-1 fluxuri și primește N-1 fluxuri. Numărul total de conexiuni este N*(N-1), iar cerința de lățime de bandă de upload pentru fiecare participant se scalează liniar cu numărul de participanți.

Acest lucru funcționează adecvat pentru trei sau patru participanți cu conexiuni bune la internet. Dincolo de aceasta, se prăbușește. Un participant cu un upload de 5 Mbps care trimite un flux video de 1,5 Mbps poate servi doar trei colegi înainte de a-și satura upload-ul. Utilizarea CPU-ului pentru codificarea mai multor fluxuri crește rapid. Iar condițiile de rețea între perechi arbitrare de participanți sunt impredictibile.

Topologia mesh este elegantă în teorie și impractică la scară.

Abordarea SFU

Un Selective Forwarding Unit (SFU) stă în centrul topologiei apelului. Fiecare participant trimite un singur flux de upload către SFU. SFU-ul transmite apoi acel flux către toți ceilalți participanți. Lățimea de bandă de upload a participantului este constantă indiferent de numărul de participanți — întotdeauna trimit un singur flux. SFU-ul gestionează fan-out-ul.

Partea „selectivă” este importantă. SFU-ul nu difuzează pur și simplu fiecare flux către fiecare participant. Ia decizii inteligente de transmitere bazate pe condițiile de rețea, vizibilitatea participanților și lățimea de bandă disponibilă. Dacă conexiunea de descărcare a unui participant este restricționată, SFU-ul poate transmite straturi de rezoluție mai mică. Dacă un participant nu este vizibil în prezent în interfață (de exemplu, într-un apel mare unde doar vorbitorul activ este afișat la dimensiune maximă), SFU-ul poate reduce sau întrerupe transmiterea fluxului său.

Acest lucru este fundamental diferit de un Multipoint Control Unit (MCU), care decodează toate fluxurile primite, le combină într-un singur flux mixt, îl recodifică și trimite compozitul fiecărui participant. MCU-urile sunt intensive în CPU, adaugă latență de codificare și — în mod critic — necesită acces la media în text clar, făcându-le incompatibile cu criptarea end-to-end.

Un SFU transmite pachete criptate fără a le decodifica. Acesta este motivul pentru care criptarea end-to-end bazată pe SFrame este posibilă într-un apel de grup. SFU-ul rutează text cifrat.

Arhitectura SFU a Mandraki

Mandraki folosește o bibliotecă SFU open-source integrată direct în infrastructura noastră. În loc să ne bazăm pe un server media monolitic terț, încorporăm SFU-ul ca o bibliotecă în propriul nostru cod. Acest lucru ne oferă control complet asupra modului în care se integrează cu stratul nostru de aplicație, protocolul de semnalizare și sistemul de autentificare.

SFU-ul folosește o arhitectură multi-worker. Fiecare worker este un proces nativ separat care gestionează rutarea efectivă a media la performanță aproape nativă. Stratul de coordonare gestionează workerii, transporturile și interfața cu logica aplicației noastre. Această separare păstrează calea media rapidă, în timp ce calea de control rămâne flexibilă.

SFU-ul susține simulcast și SVC (Scalable Video Coding), care sunt esențiale pentru transmiterea adaptivă a lățimii de bandă. Browserele participanților codifică video-ul lor la mai multe niveluri de calitate simultan. SFU-ul selectează nivelul potrivit pentru fiecare destinatar pe baza lățimii de bandă disponibile și a contextului interfeței.

Scalare la sute de sesiuni

Pentru implementări la scară mare, arhitectura este proiectată în jurul scalării orizontale cu rutare inteligentă a sesiunilor.

Implementare SFU multi-instanță. Mai multe instanțe SFU rulează în zone de disponibilitate. Fiecare instanță își înregistrează capacitatea cu un strat de coordonare. Când se creează un nou apel, sistemul selectează instanța SFU cu cea mai mare capacitate disponibilă. Participanții din același apel sunt întotdeauna rutați către aceeași instanță SFU pentru rutarea optimă a media.

Paralelism la nivel de worker. Fiecare proces SFU generează mai mulți workeri nativi — care de obicei se potrivesc cu numărul de nuclee CPU disponibile. Fiecare worker poate gestiona mai multe camere de apel independent. Aceasta înseamnă că un singur server SFU cu 16 nuclee poate gestiona eficient zeci de apeluri concurente, fiecare cu până la 50 de participanți.

Transmitere adaptivă la lățimea de bandă. Pentru apelurile cu mulți participanți, mai multe optimizări intră în acțiune automat. Detectarea vorbitorului activ reduce numărul de fluxuri de înaltă calitate care trebuie transmise. Selecția stratului simulcast devine mai agresivă, favorizând straturile inferioare pentru participanții care nu sunt vizibili. Revenirea doar la audio este disponibilă pentru participanții cu lățime de bandă sever restricționată.

Implementare europeană multi-zonă. Infrastructura Mandraki rulează în mai multe zone de disponibilitate în UE, pe infrastructură hyperscale europeană. Instanțele SFU sunt implementate aproape de utilizatori, reducând latența dus-întors pentru pachetele media. Toată rutarea media rămâne în interiorul granițelor europene — nicio media nu este vreodată retransmisă prin infrastructură non-UE.

Traversarea NAT

Cea mai mare forță a WebRTC — conectivitatea directă peer-to-peer — este și cea mai mare provocare a sa. Majoritatea dispozitivelor se află în spatele unor firewall-uri NAT (Network Address Translation) care împiedică conexiunile directe primite. WebRTC folosește ICE (Interactive Connectivity Establishment) pentru a descoperi o cale de rețea viabilă, încercând conexiune directă, conexiune mediată prin STUN și retransmisie TURN în secvență.

Mandraki rulează servere TURN dedicate alături de infrastructura SFU. TURN acționează ca un releu de ultimă instanță — când un participant nu poate stabili o conexiune directă către SFU (din cauza firewall-urilor restrictive, NAT simetric sau servere proxy corporative), media fluxează prin serverul TURN. Acest lucru adaugă o anumită latență, dar asigură conectivitatea.

Serverele TURN susțin atât UDP, cât și TCP, plus TLS pentru medii care permit doar trafic HTTPS. La fel ca toate celelalte componente din stiva noastră, rulează în întregime în UE.

Criptare end-to-end la scară

Arhitectura SFU este aleasă în mod specific deoarece păstrează compatibilitatea cu criptarea end-to-end. Folosind WebRTC Encoded Transforms și protocolul SFrame (RFC 9605), cadrele media sunt criptate pe dispozitivul expeditorului înainte de a ajunge la SFU. SFU-ul transmite cadrele criptate către destinatari, care le decriptează local.

SFU-ul nu are niciodată acces la media în text clar. Rutează text cifrat. Aceasta înseamnă că chiar și la scară — cu zeci de participanți și mai multe apeluri concurente — garanțiile de criptare se mențin. Niciun server din infrastructura noastră nu vede sau prelucrează vreodată audio sau video necriptat.

Aceasta este o alegere arhitecturală fundamentală. Multe platforme pretind criptare, dar folosesc arhitecturi bazate pe MCU care necesită decodificare pe partea serverului. Abordarea SFU a Mandraki înseamnă că criptarea nu este doar o funcționalitate — este o garanție structurală.

Monitorizare și fiabilitate

Problemele WebRTC sunt notorii de dificil de diagnosticat. Colectăm telemetrie pe partea clientului, inclusiv tranzițiile stărilor de conexiune ICE, tipurile de perechi de candidați selectate, estimările timpului dus-întors, ratele de pierdere a pachetelor și estimările de lățime de bandă. Aceste metrici sunt grupate și trimise către punctul nostru final de telemetrie pentru agregare.

Pe partea de server, SFU-ul înregistrează evenimentele de transport, ciclul de viață al producătorilor și consumatorilor și estimarea lățimii de bandă. Combinat cu telemetria pe partea clientului, acest lucru oferă o vedere cuprinzătoare asupra calității apelurilor care ne permite să identificăm și să abordăm problemele sistematic.

Comunicarea în timp real la scară masivă este o provocare inginerească profundă. Continuăm să investim în infrastructura media care face apelurile Mandraki fiabile, cu latență redusă și criptate end-to-end — toate în interiorul infrastructurii europene suverane.