Come collegare utenti in regioni diverse: chiamate che restano vicine a tutti

Una videochiamata che funziona bene nei test può comportarsi in modo diverso quando i tuoi utenti sono sparsi per il mondo. Due persone a Singapore si parlano sopra, una chiamata di gruppo con qualcuno in Canada si blocca solo per quella persona, e una diretta va in buffering per gli spettatori dall’altra parte di un oceano. Il codice è lo stesso per tutti. Quello che cambia è la distanza tra ogni persona e il server da cui passa la chiamata.
Questo articolo spiega perché la distanza conta in una chiamata, cosa serve per tenere ogni persona vicina a un server, nelle chiamate tra due persone, nelle chiamate di gruppo e nelle dirette, e cosa può restare in un unico posto.
Perché la distanza conta in una chiamata
In una fibra ottica la luce percorre circa 200 chilometri al millisecondo, e i percorsi reali sono più lunghi di una linea retta. Un pacchetto da Singapore a Francoforte e ritorno impiega circa 160 millisecondi, e da Sydney a Francoforte e ritorno circa 280.
La conversazione ne risente. Quando ciò che qualcuno dice impiega più di circa 150 millisecondi per arrivare all’orecchio dell’altro, le persone cominciano a parlarsi sopra e ad aspettare risposte che sono già in arrivo. La codifica, la rete e il jitter buffer di ogni dispositivo aggiungono la loro parte prima ancora che conti la distanza.
Una chiamata che passa da un server fa due tratte: dalla prima persona al server, poi dal server alla seconda. Metti il server a Francoforte, e due persone a Singapore mandano ciascuna tutto in Europa e ritorno, così ciò che dicono arriva ben oltre quel limite confortevole, anche se vivono nella stessa città. Metti il server a Singapore, e la stessa chiamata richiede pochi millisecondi.
Quindi la domanda, per qualsiasi app con utenti in più di una regione, è da quale server passa ogni chiamata, e quanto è vicino alle persone che vi partecipano.
Chiamate tra due persone
Una chiamata tra due persone va direttamente tra i loro dispositivi quando può, senza nessun server in mezzo. L’unico ritardo è allora la distanza tra le due, e niente può accorciarla.
Quando un firewall blocca il percorso diretto, la chiamata passa da un relay TURN (server STUN e TURN spiega perché). Con un solo relay in una sola regione, ogni chiamata che ha bisogno del relay passa da lì, così due persone in Asia le cui reti richiedono un relay parlano passando per l’Europa.
La soluzione è un relay in ogni regione in cui si trovano i tuoi utenti, con ogni dispositivo che usa quello più vicino:
- Un solo nome, risolto per regione. Il nome del relay porta ogni dispositivo alla regione più vicina, in base alla latenza o al luogo da cui arriva la richiesta. Il dispositivo non ha bisogno di alcuna impostazione, e una nuova regione serve i suoi utenti appena i suoi relay rispondono a quel nome.
- Credenziali accettate da ogni regione. Le credenziali dei relay di solito le crea il tuo server a partire da un segreto che condivide con i relay. Ogni regione le verifica allo stesso modo, così un dispositivo può usare qualunque relay raggiunga.
- Le porte del web in ogni regione. La porta 3478 su UDP per la maggior parte delle reti, e la 443 con TLS per le reti che consentono solo il traffico web, con un certificato per ogni nome.
Con un relay vicino a ogni dispositivo, una chiamata tramite relay impiega quasi quanto una diretta, quali che siano i due paesi che collega.
Chiamate di gruppo: un media server, o uno per regione
Una chiamata di gruppo gira su un media server: ogni persona gli invia la sua voce e la sua immagine una volta sola, e il server le inoltra a tutti gli altri, nella qualità che mostra ogni schermo (come funzionano le videochiamate di gruppo lo spiega). Il modo semplice di gestirne una è un server per chiamata: la chiamata si apre su un server, nella regione di chi è entrato per primo, e tutti si collegano a quel server.
Funziona finché tutti nella chiamata si trovano nella stessa parte del mondo. Con persone su due continenti, qualcuno è lontano dal server, e ogni voce e immagine che invia e riceve fa il giro lungo.
La soluzione è distribuire una sola chiamata su server in più regioni:
- Ogni persona si collega a un server della propria regione, il più vicino, e ci invia la sua voce e la sua immagine una volta sola.
- I server si passano ogni traccia tra loro. Un’immagine passa da una regione all’altra una volta per ogni server che ne ha bisogno, non una volta per ogni persona che la guarda, e raggiunge tutti dal server della loro regione.
- Viaggia solo ciò che viene guardato. Una traccia che nessuno guarda in una regione non ci arriva, e ogni regione riceve solo la qualità con cui la mostrano le sue persone.
- I server tengono un’unica chiamata. Chi c’è, chi parla, chi condivide lo schermo e quando finisce sono uguali su ogni server, così chi partecipa vede una sola chiamata, non diverse chiamate unite insieme.
- Collegamenti tra regioni che reggono. Le tracce tra le regioni viaggiano su collegamenti privati o tunnel cifrati, e i pacchetti persi vengono richiesti di nuovo attraverso di essi, così un collegamento tra continenti non si trasforma in immagini bloccate.
Due persone a Varsavia e due a Montréal parlano così ciascuna tramite un server vicino, e solo una copia di ogni traccia attraversa l’Atlantico.
Live streaming
Una diretta è lo stesso problema con un solo mittente e molti destinatari. Chi trasmette invia l’immagine a un server vicino a sé, e ogni spettatore guarda da un server della propria regione, che riceve la diretta una volta sola dal server di chi trasmette e la serve a tutti quelli che la guardano lì. Un pubblico sparso in molti paesi viene così servito vicino a ogni spettatore, e nessuno spettatore resta in attesa di un server dall’altra parte del mondo.
Cosa può restare in una sola regione
Non tutto deve essere vicino. I messaggi di chat, la presenza, gli indicatori di scrittura e gli altri eventi di un’app sono piccoli, e un messaggio che arriva 100 millisecondi più tardi di quanto potrebbe passa inosservato. Tenerli in una sola regione mantiene semplici il loro ordine e la loro cronologia, e questo conta più dei millisecondi.
Quindi di solito la divisione è questa: i media vicino a ogni persona, e gli eventi in un unico posto.
Come collegare utenti in regioni diverse: una checklist
- Guarda dove sono i tuoi utenti. I paesi da cui chiamano ti dicono di quali regioni hai bisogno per prime.
- Metti dei relay in ognuna di quelle regioni, dietro un solo nome risolto per regione, con credenziali accettate da ogni regione, sulla porta 443 oltre che sulla 3478.
- Distribuisci ogni chiamata di gruppo e ogni diretta su più regioni, con ogni persona su un server vicino e ogni traccia che passa da una regione all’altra una volta sola, e solo finché qualcuno la guarda.
- Tieni vive le chiamate mentre i server cambiano. Un server messo in manutenzione sposta prima le sue chiamate su un altro, così nessuna chiamata cade.
- Tieni gli eventi in una sola regione, a meno che la tua app non abbia un motivo per fare diversamente.
Nessuno di questi è un lavoro da poco: ogni regione sono server da gestire, aggiornare, monitorare e far crescere, e i collegamenti tra loro sono una rete a sé.
Come WordPlus Cloud collega i tuoi utenti
WordPlus Cloud gestisce tutto questo, così la tua app non deve mai scegliere una regione:
- I nostri relay e media server per le chiamate sono attivi in Germania, Francia, Regno Unito, Polonia, Canada e Singapore, e i prossimi saranno Stati Uniti, Australia, India e Italia. Come colleghiamo i tuoi utenti li mostra su una mappa.
- Ogni dispositivo raggiunge la regione più vicina, tramite un solo nome risolto in base alla latenza. Una chiamata tra due persone va direttamente tra i dispositivi quando può, tramite il relay più vicino a ciascuno quando un firewall lo impedisce, e tramite i nostri media server quando nemmeno i relay arrivano, senza riagganciare.
- Ogni persona in una chiamata di gruppo o in una diretta si collega a un media server della propria regione, e i nostri server si passano ogni traccia tra le regioni su collegamenti privati, una volta per ogni server che ne ha bisogno, e solo finché lì qualcuno la guarda.
- Un server messo in manutenzione sposta prima le sue chiamate su un altro, e chi vi partecipa continua a parlare.
- Messaggi ed eventi passano per i nostri server in tempo reale in Germania, che crescono con il traffico. Arriveranno server edge in altre regioni, per avvicinare anche gli eventi ai tuoi utenti.
Le chiamate tra due persone sono cifrate end-to-end su ogni percorso, ed è sempre il tuo server a decidere chi può chiamare chi. Funziona allo stesso modo in Better Messages su WordPress e nelle tue app, da Next.js, Laravel, Django e altri stack con i nostri SDK. Videochiamate e chiamate di gruppo per la tua app mostra cosa ti danno gli SDK.