WebRTC w skali: jak Mandraki obsługuje masowe połączenia grupowe
Jak architektura SFU Mandraki zapewnia szyfrowane połączenia wideo grupowe o niskich opóźnieniach — i jak skaluje się do setek równoczesnych sesji w europejskiej infrastrukturze.
Grupowe rozmowy wideo to jedna z tych funkcji, które wydają się proste dla użytkowników, lecz pod powierzchnią wiążą się ze znaczną złożonością inżynieryjną. Połączenie jeden na jeden jest stosunkowo proste — dwóch uczestników wymienia media bezpośrednio. Jednak gdy tylko dodać trzeciego uczestnika, decyzje architektoniczne się mnożą, a gdy dochodzi się do pięćdziesięciu uczestników w wielu równoczesnych sesjach, mamy do czynienia z naprawdę trudnym problemem systemów rozproszonych.
Ten wpis wyjaśnia, jak architektura mediów w czasie rzeczywistym Mandraki jest zaprojektowana z myślą o masowej skali — bez kompromisów w zakresie szyfrowania ani suwerenności danych.
Dlaczego nie peer-to-peer
W topologii mesh peer-to-peer każdy uczestnik wysyła swój strumień mediów bezpośrednio do każdego innego uczestnika. Dla połączenia z N uczestnikami każda osoba wysyła N-1 strumieni i odbiera N-1 strumieni. Całkowita liczba połączeń wynosi N*(N-1), a wymagana przepustowość uploadu każdego uczestnika rośnie liniowo z liczbą uczestników.
Działa to zadowalająco dla trzech lub czterech uczestników z dobrymi łączami internetowymi. Powyżej tego rozpada się. Uczestnik z uploadem 5 Mb/s wysyłający strumień wideo 1,5 Mb/s może obsłużyć tylko trzech odbiorców, zanim wysyci swój upload. Zużycie CPU do kodowania wielu strumieni gwałtownie rośnie. Warunki sieciowe między dowolnymi parami uczestników są nieprzewidywalne.
Topologia mesh jest elegancka w teorii i niepraktyczna w skali.
Podejście SFU
Jednostka selektywnego przekazywania (SFU) zasiada w centrum topologii połączenia. Każdy uczestnik wysyła jeden strumień uploadowy do SFU. SFU przekazuje następnie ten strumień wszystkim pozostałym uczestnikom. Przepustowość uploadu uczestnika jest stała niezależnie od liczby uczestników — zawsze wysyła jeden strumień. SFU obsługuje rozdystrybuowanie.
Część „selektywna” jest istotna. SFU nie po prostu rozgłasza każdego strumienia do każdego uczestnika. Podejmuje inteligentne decyzje przekazywania w oparciu o warunki sieciowe, widoczność uczestnika i dostępną przepustowość. Jeśli połączenie pobierania uczestnika jest ograniczone, SFU może przekazywać warstwy o niższej rozdzielczości. Jeśli uczestnik nie jest aktualnie widoczny w interfejsie (na przykład w dużej rozmowie, gdzie pełnym rozmiarem jest pokazywany tylko aktywny mówca), SFU może zmniejszyć lub wstrzymać przekazywanie jego strumienia.
To zasadniczo różni się od jednostki sterowania wielopunktowego (MCU), która dekoduje wszystkie strumienie przychodzące, składa je w jeden zmieszany strumień, ponownie go koduje i wysyła kompozyt do każdego uczestnika. MCU są intensywne pod względem CPU, dodają opóźnienie kodowania i — co kluczowe — wymagają dostępu do mediów w postaci zwykłego tekstu, co czyni je niezgodnymi z szyfrowaniem end-to-end.
SFU przekazuje zaszyfrowane pakiety bez ich dekodowania. To właśnie umożliwia szyfrowanie end-to-end oparte na SFrame w połączeniu grupowym. SFU kieruje szyfrogramem.
Architektura SFU Mandraki
Mandraki używa biblioteki SFU open source zintegrowanej bezpośrednio z naszą infrastrukturą. Zamiast polegać na monolitycznym serwerze multimediów firmy trzeciej, osadzamy SFU jako bibliotekę w naszym własnym kodzie. Daje nam to pełną kontrolę nad sposobem, w jaki integruje się z warstwą aplikacji, protokołem sygnalizacji i systemem uwierzytelniania.
SFU wykorzystuje architekturę wieloprocesową. Każdy worker jest oddzielnym natywnym procesem, który obsługuje rzeczywisty routing mediów z niemal natywną wydajnością. Warstwa koordynacyjna zarządza workerami, transportami i interfejsami z naszą logiką aplikacji. Ten podział utrzymuje ścieżkę mediów szybką, a ścieżkę sterowania elastyczną.
SFU obsługuje simulcast i SVC (Scalable Video Coding), które są niezbędne do przekazywania dostosowanego do przepustowości. Przeglądarki uczestników kodują wideo na wielu poziomach jakości jednocześnie. SFU wybiera odpowiedni poziom dla każdego odbiorcy w oparciu o jego dostępną przepustowość i kontekst interfejsu.
Skalowanie do setek sesji
Dla wdrożeń na dużą skalę architektura została zaprojektowana wokół skalowania poziomego z inteligentnym routingiem sesji.
Wieloinstancyjne wdrożenie SFU. Wiele instancji SFU działa w różnych strefach dostępności. Każda instancja rejestruje swoją pojemność w warstwie koordynacji. Gdy tworzone jest nowe połączenie, system wybiera instancję SFU z największą dostępną pojemnością. Uczestnicy tego samego połączenia są zawsze kierowani do tej samej instancji SFU dla optymalnego routingu mediów.
Równoległość na poziomie workerów. Każdy proces SFU uruchamia wiele natywnych workerów — zazwyczaj odpowiadających liczbie dostępnych rdzeni CPU. Każdy worker może obsługiwać niezależnie wiele pokoi połączeń. Oznacza to, że pojedynczy serwer SFU z 16 rdzeniami może efektywnie zarządzać dziesiątkami równoczesnych połączeń, każde z maksymalnie 50 uczestnikami.
Przekazywanie dostosowane do przepustowości. Dla połączeń z wieloma uczestnikami automatycznie włącza się kilka optymalizacji. Wykrywanie aktywnego mówcy zmniejsza liczbę strumieni wysokiej jakości, które trzeba przekazać. Selekcja warstwy simulcast staje się bardziej agresywna, preferując niższe warstwy dla niewidocznych uczestników. Przełączenie na tryb tylko audio jest dostępne dla uczestników o poważnie ograniczonej przepustowości.
Wielostrefowe wdrożenie europejskie. Infrastruktura Mandraki działa w wielu strefach dostępności w UE na europejskiej infrastrukturze hyperscale. Instancje SFU są wdrażane blisko użytkowników, co zmniejsza opóźnienie typu round-trip dla pakietów mediów. Cały routing mediów pozostaje w granicach europejskich — żadne media nigdy nie są przekazywane przez infrastrukturę spoza UE.
Przechodzenie przez NAT
Największa siła WebRTC — bezpośrednia łączność peer-to-peer — jest też jego największym wyzwaniem. Większość urządzeń znajduje się za zaporami NAT (Network Address Translation), które uniemożliwiają bezpośrednie połączenia przychodzące. WebRTC używa ICE (Interactive Connectivity Establishment), aby odkryć wykonalną ścieżkę sieciową, próbując kolejno: połączenia bezpośredniego, połączenia pośredniczonego przez STUN i przekaźnika TURN.
Mandraki uruchamia dedykowane serwery TURN obok infrastruktury SFU. TURN działa jako przekaźnik ostatniej szansy — gdy uczestnik nie może nawiązać bezpośredniego połączenia z SFU (z powodu restrykcyjnych zapór, symetrycznego NAT lub korporacyjnych serwerów proxy), media przepływają przez serwer TURN. Dodaje to nieco opóźnienia, lecz zapewnia łączność.
Serwery TURN obsługują zarówno UDP, jak i TCP, a także TLS dla środowisk, które dopuszczają wyłącznie ruch HTTPS. Tak jak wszystko inne w naszym stosie, działają w całości w UE.
Szyfrowanie end-to-end w skali
Architektura SFU została specjalnie wybrana, ponieważ zachowuje zgodność z szyfrowaniem end-to-end. Wykorzystując WebRTC Encoded Transforms i protokół SFrame (RFC 9605), ramki mediów są szyfrowane na urządzeniu nadawcy przed dotarciem do SFU. SFU przekazuje zaszyfrowane ramki odbiorcom, którzy odszyfrowują je lokalnie.
SFU nigdy nie ma dostępu do mediów w postaci zwykłego tekstu. Kieruje szyfrogramem. Oznacza to, że nawet w skali — z dziesiątkami uczestników i wieloma równoczesnymi połączeniami — gwarancje szyfrowania pozostają w mocy. Żaden serwer w naszej infrastrukturze nigdy nie widzi ani nie przetwarza niezaszyfrowanego dźwięku lub wideo.
To fundamentalny wybór architektoniczny. Wiele platform deklaruje szyfrowanie, lecz używa architektur opartych na MCU, które wymagają dekodowania po stronie serwera. Podejście SFU Mandraki sprawia, że szyfrowanie nie jest jedynie funkcją — jest gwarancją strukturalną.
Monitorowanie i niezawodność
Problemy z WebRTC są notorycznie trudne do zdiagnozowania. Zbieramy telemetrię po stronie klienta, w tym przejścia stanu połączenia ICE, typy wybranych par kandydatów, szacunki czasu round-trip, wskaźniki utraty pakietów i szacunki przepustowości. Te metryki są agregowane wsadowo i wysyłane do naszego punktu końcowego telemetrii w celu agregacji.
Po stronie serwera SFU rejestruje zdarzenia transportu, cykl życia producentów i konsumentów oraz oszacowanie przepustowości. W połączeniu z telemetrią po stronie klienta zapewnia to kompleksowy obraz jakości połączeń, który pozwala nam systematycznie identyfikować i rozwiązywać problemy.
Komunikacja w czasie rzeczywistym na masową skalę jest głębokim wyzwaniem inżynieryjnym. Nadal inwestujemy w infrastrukturę mediów, dzięki której połączenia Mandraki są niezawodne, mają niskie opóźnienia i są szyfrowane end-to-end — wszystko w suwerennej europejskiej infrastrukturze.