WebRTC op schaal: hoe Mandraki grote groepsgesprekken afhandelt
Hoe de SFU-architectuur van Mandraki versleutelde groepsvideogesprekken met lage latentie levert — en hoe deze schaalt naar honderden gelijktijdige sessies op Europese infrastructuur.
Videogroepsgesprekken zijn een van die functies die voor gebruikers eenvoudig lijken, maar onder de oppervlakte aanzienlijke engineering-complexiteit met zich meebrengen. Een één-op-één-gesprek is relatief eenvoudig — twee peers wisselen direct media uit. Maar zodra u een derde deelnemer toevoegt, vermenigvuldigen de architecturale beslissingen zich, en tegen de tijd dat u vijftig deelnemers over meerdere gelijktijdige sessies bereikt, hebt u te maken met een werkelijk lastig probleem in gedistribueerde systemen.
Dit bericht legt uit hoe de realtime media-architectuur van Mandraki is ontworpen voor enorme schaal — zonder concessies aan versleuteling of gegevenssoevereiniteit.
Waarom geen peer-to-peer
In een peer-to-peer-mesh-topologie stuurt elke deelnemer zijn mediastream direct naar elke andere deelnemer. Voor een gesprek met N deelnemers verzendt elke persoon N-1 streams en ontvangt N-1 streams. Het totale aantal verbindingen is N*(N-1), en de uploadbandbreedte-eis van elke deelnemer schaalt lineair met het aantal deelnemers.
Dit werkt redelijk goed voor drie of vier deelnemers met goede internetverbindingen. Daarbuiten valt het uiteen. Een deelnemer met een 5 Mbps-upload die een 1,5 Mbps-videostream verzendt, kan slechts drie peers bedienen voordat zijn upload verzadigd raakt. CPU-gebruik voor het coderen van meerdere streams stijgt snel. En de netwerkomstandigheden tussen willekeurige paren deelnemers zijn onvoorspelbaar.
Mesh-topologie is elegant in theorie en onpraktisch op schaal.
De SFU-benadering
Een Selective Forwarding Unit (SFU) bevindt zich in het centrum van de gesprekstopologie. Elke deelnemer stuurt één enkele uploadstream naar de SFU. De SFU stuurt die stream vervolgens door naar alle andere deelnemers. De uploadbandbreedte van de deelnemer is constant ongeacht het aantal deelnemers — ze sturen altijd één stream. De SFU verzorgt de fan-out.
Het “selectieve” gedeelte is belangrijk. De SFU zendt niet eenvoudigweg elke stream uit naar elke deelnemer. Hij neemt intelligente doorstuurbeslissingen op basis van netwerkomstandigheden, zichtbaarheid van deelnemers en beschikbare bandbreedte. Als de downloadverbinding van een deelnemer beperkt is, kan de SFU lagen met lagere resolutie doorsturen. Als een deelnemer momenteel niet zichtbaar is in de UI (bijvoorbeeld in een groot gesprek waarin alleen de actieve spreker op volledig formaat wordt weergegeven), kan de SFU het doorsturen van hun stream verminderen of pauzeren.
Dit verschilt fundamenteel van een Multipoint Control Unit (MCU), die alle binnenkomende streams decodeert, ze in één gemengde stream samenstelt, opnieuw codeert en het samengestelde resultaat naar elke deelnemer verzendt. MCU’s zijn CPU-intensief, voegen coderingslatentie toe en — cruciaal — vereisen toegang tot de leesbare media, waardoor ze onverenigbaar zijn met end-to-end-versleuteling.
Een SFU stuurt versleutelde pakketten door zonder ze te decoderen. Dit is wat op SFrame gebaseerde end-to-end-versleuteling in een groepsgesprek mogelijk maakt. De SFU routeert cijfertekst.
De SFU-architectuur van Mandraki
Mandraki gebruikt een open-source SFU-bibliotheek die direct in onze infrastructuur is geïntegreerd. In plaats van te vertrouwen op een monolithische mediaserver van derden, embedden wij de SFU als een bibliotheek binnen onze eigen codebase. Dit geeft ons volledige controle over hoe deze integreert met onze applicatielaag, signaleringsprotocol en authenticatiesysteem.
De SFU gebruikt een multi-worker-architectuur. Elke worker is een afzonderlijk native proces dat de daadwerkelijke mediaroutering uitvoert op bijna-native prestatie. De coördinatielaag beheert workers, transporten en koppelt aan onze applicatielogica. Deze scheiding houdt het mediapad snel terwijl het besturingspad flexibel blijft.
De SFU ondersteunt simulcast en SVC (Scalable Video Coding), die essentieel zijn voor bandbreedte-adaptief doorsturen. De browsers van deelnemers coderen hun video gelijktijdig op meerdere kwaliteitsniveaus. De SFU selecteert het juiste niveau voor elke ontvanger op basis van hun beschikbare bandbreedte en de UI-context.
Opschalen naar honderden sessies
Voor grootschalige implementaties is de architectuur ontworpen rond horizontale schaling met intelligente sessierouting.
Multi-instance SFU-implementatie. Meerdere SFU-instances draaien in availability zones. Elke instance registreert zijn capaciteit bij een coördinatielaag. Wanneer een nieuw gesprek wordt aangemaakt, selecteert het systeem de SFU-instance met de meeste beschikbare capaciteit. Deelnemers aan hetzelfde gesprek worden altijd naar dezelfde SFU-instance gerouteerd voor optimale mediaroutering.
Parallelisme op workerniveau. Elk SFU-proces start meerdere native workers — doorgaans evenveel als het aantal beschikbare CPU-cores. Elke worker kan meerdere gesprekslokalen onafhankelijk afhandelen. Dit betekent dat één enkele SFU-server met 16 cores efficiënt tientallen gelijktijdige gesprekken kan beheren, elk met maximaal 50 deelnemers.
Bandbreedte-adaptief doorsturen. Voor gesprekken met veel deelnemers worden automatisch verschillende optimalisaties geactiveerd. Detectie van de actieve spreker vermindert het aantal hoogwaardige streams dat moet worden doorgestuurd. De selectie van simulcast-lagen wordt agressiever, waarbij lagere lagen worden bevoordeeld voor niet-zichtbare deelnemers. Audio-only-terugval is beschikbaar voor deelnemers met sterk beperkte bandbreedte.
Europese multi-zone-implementatie. De infrastructuur van Mandraki draait in meerdere availability zones binnen de EU op Europese hyperscale-infrastructuur. SFU-instances worden dicht bij gebruikers geïmplementeerd, wat de round-trip-latentie voor mediapakketten vermindert. Alle mediarouting blijft binnen de Europese grenzen — geen media wordt ooit doorgestuurd via niet-EU-infrastructuur.
NAT-traversal
De grootste kracht van WebRTC — directe peer-to-peer-connectiviteit — is ook zijn grootste uitdaging. De meeste apparaten bevinden zich achter NAT-firewalls (Network Address Translation) die directe inkomende verbindingen blokkeren. WebRTC gebruikt ICE (Interactive Connectivity Establishment) om een werkbaar netwerkpad te ontdekken, waarbij achtereenvolgens directe verbinding, STUN-bemiddelde verbinding en TURN-relay worden geprobeerd.
Mandraki exploiteert speciale TURN-servers naast de SFU-infrastructuur. TURN fungeert als relay in laatste instantie — wanneer een deelnemer geen directe verbinding met de SFU tot stand kan brengen (vanwege restrictieve firewalls, symmetrische NAT of bedrijfsproxyservers), loopt de media door de TURN-server. Dit voegt enige latentie toe, maar waarborgt connectiviteit.
De TURN-servers ondersteunen zowel UDP als TCP, plus TLS voor omgevingen die alleen HTTPS-verkeer toestaan. Net als al het andere in onze stack draaien ze volledig binnen de EU.
End-to-end-versleuteling op schaal
De SFU-architectuur is specifiek gekozen omdat deze de compatibiliteit met end-to-end-versleuteling behoudt. Met behulp van WebRTC Encoded Transforms en het SFrame-protocol (RFC 9605) worden media-frames versleuteld op het apparaat van de verzender voordat ze de SFU bereiken. De SFU stuurt de versleutelde frames door naar ontvangers, die ze lokaal ontsleutelen.
De SFU heeft nooit toegang tot leesbare media. Hij routeert cijfertekst. Dit betekent dat zelfs op schaal — met tientallen deelnemers en meerdere gelijktijdige gesprekken — de versleutelingsgaranties standhouden. Geen enkele server in onze infrastructuur ziet of verwerkt ooit niet-versleutelde audio of video.
Dit is een fundamentele architecturale keuze. Veel platforms claimen versleuteling, maar gebruiken op MCU gebaseerde architecturen die server-side decodering vereisen. De SFU-benadering van Mandraki betekent dat versleuteling niet slechts een functie is — het is een structurele garantie.
Monitoring en betrouwbaarheid
WebRTC-problemen zijn notoir moeilijk te diagnosticeren. Wij verzamelen telemetrie aan de clientzijde, waaronder overgangen in de ICE-verbindingsstatus, geselecteerde kandidaatpaartypes, schattingen van de round-trip-tijd, pakketverlieskansen en bandbreedteschattingen. Deze metrieken worden gebundeld en naar ons telemetrie-eindpunt verzonden voor aggregatie.
Aan de serverzijde logt de SFU transportgebeurtenissen, de levenscyclus van producers en consumers, en bandbreedteschatting. Gecombineerd met client-side telemetrie biedt dit een uitgebreid overzicht van de gesprekskwaliteit waarmee we problemen systematisch kunnen identificeren en aanpakken.
Realtime communicatie op enorme schaal is een diepgaande engineering-uitdaging. Wij blijven investeren in de media-infrastructuur die de gesprekken van Mandraki betrouwbaar, met lage latentie en end-to-end versleuteld maakt — allemaal binnen soevereine Europese infrastructuur.