Kako povezati korisnike iz različitih regija: pozivi koji ostaju blizu svima

Videopoziv koji dobro radi tijekom testiranja može se doimati drukčije kad su vaši korisnici raspršeni po svijetu. Dvije osobe u Singapuru upadaju jedna drugoj u riječ, grupni poziv s nekim u Kanadi zamrzava se samo toj osobi, a prijenos uživo stalno zastaje i učitava se gledateljima s druge strane oceana. Kod je za sve njih isti. Razlikuje se udaljenost između svake osobe i poslužitelja preko kojeg poziv ide.
Ovaj članak objašnjava zašto je udaljenost važna u pozivu, što je potrebno da svaka osoba bude blizu poslužitelja, u pozivima između dviju osoba, grupnim pozivima i prijenosima uživo, te što može ostati na jednom mjestu.
Zašto je udaljenost važna u pozivu
Svjetlost u optičkom vlaknu prijeđe oko 200 kilometara u milisekundi, a stvarne su rute dulje od ravne crte. Paketu od Singapura do Frankfurta i natrag treba oko 160 milisekundi, a od Sydneyja do Frankfurta i natrag oko 280.
Razgovor je na to osjetljiv. Kad ono što netko kaže do drugog uha putuje dulje od otprilike 150 milisekundi, ljudi počnu upadati jedni drugima u riječ i čekati odgovore koji su već na putu. Kodiranje, mreža i jitter buffer na svakom uređaju dodaju svoj udio i prije nego što se uopće ubroji udaljenost.
Poziv koji ide preko poslužitelja prolazi dvije dionice: od prve osobe do poslužitelja, zatim od poslužitelja do druge. Stavite poslužitelj u Frankfurt i dvije osobe u Singapuru šalju sve u Europu i natrag, pa ono što kažu stiže daleko iza te ugodne granice, iako žive u istom gradu. Stavite poslužitelj u Singapur i isti poziv traje nekoliko milisekundi.
Zato se za svaku aplikaciju s korisnicima u više od jedne regije postavlja pitanje preko kojeg poslužitelja ide svaki poziv i koliko je on blizu njegovim sudionicima.
Pozivi između dviju osoba
Poziv između dviju osoba ide izravno između njihovih uređaja kad god može, bez poslužitelja u sredini. Udaljenost između njih dvoje tada je jedino kašnjenje i ništa ga ne skraćuje.
Kad vatrozid blokira izravni put, poziv ide preko TURN releja (zašto, objašnjava članak STUN i TURN poslužitelji). S jednim relejem u jednoj regiji svaki poziv preko releja ide onamo, pa dvije osobe u Aziji čije mreže trebaju relej razgovaraju preko Europe.
Rješenje je relej u svakoj regiji u kojoj su vaši korisnici, pri čemu svaki uređaj koristi onaj koji mu je najbliži:
- Jedno ime, s odgovorom prema regiji. Ime releja za svaki se uređaj razrješava u najbližu regiju, prema kašnjenju ili prema tome odakle zahtjev dolazi. Uređaju ne treba nikakva postavka, a nova regija služi svoje korisnike čim njezini releji počnu odgovarati na to ime.
- Pristupni podaci koje prihvaća svaka regija. Pristupne podatke za releje obično izrađuje vaš poslužitelj iz tajnog ključa koji dijeli s relejima. Svaka ih regija provjerava na isti način, pa uređaj može koristiti bilo koji relej do kojeg dođe.
- Portovi weba u svakoj regiji. Port 3478 preko UDP-a za većinu mreža i 443 s TLS-om za mreže koje dopuštaju samo web promet, s certifikatom za svako ime.
S relejem blizu svakog uređaja poziv preko releja ostaje blizu izravnom pozivu, koje god dvije zemlje povezivao.
Grupni pozivi: jedan medijski poslužitelj ili po jedan u svakoj regiji
Grupni poziv radi na medijskom poslužitelju: svaka osoba šalje mu svoj glas i sliku jednom, a on ih prosljeđuje svima ostalima, u kvaliteti u kojoj ih prikazuje svaki zaslon (to objašnjava članak kako rade grupni videopozivi). Najjednostavnije ga je pokretati s jednim poslužiteljem po pozivu: poziv se otvara na poslužitelju u regiji onoga tko se prvi pridružio i svi se spajaju na taj poslužitelj.
To radi dok su svi u pozivu u istom dijelu svijeta. Kad su ljudi na dva kontinenta, jedna je strana daleko od poslužitelja, a svaki glas i svaka slika koje ta strana šalje i prima idu dugim putem.
Rješenje je rasporediti jedan poziv na poslužitelje u više regija:
- Svaka se osoba spaja na poslužitelj u svojoj regiji, onaj najbliži, i onamo jednom šalje svoj glas i sliku.
- Poslužitelji međusobno prosljeđuju svaki tok. Slika prelazi između regija jednom za svaki poslužitelj koji je treba, a ne jednom za svaku osobu koja je gleda, i do svakoga stiže s poslužitelja njegove regije.
- Putuje samo ono što se gleda. Tok koji nitko u nekoj regiji ne gleda ne prelazi u nju, a svaka regija dobiva samo kvalitetu u kojoj ga njezini ljudi prikazuju.
- Poslužitelji održavaju jedan poziv. Tko je u njemu, tko govori, tko dijeli zaslon i kad završava jednako je na svakom poslužitelju, pa sudionici vide jedan poziv, a ne nekoliko spojenih.
- Veze između regija koje izdržavaju. Tokovi između regija putuju privatnim vezama ili šifriranim tunelima, a izgubljeni paketi preko njih se ponovno traže, pa se veza između kontinenata ne pretvara u zamrznute slike.
Dvije osobe u Varšavi i dvije u Montrealu tada razgovaraju svaka preko poslužitelja blizu sebe, a Atlantik prelazi samo jedna kopija svakog toka.
Prijenosi uživo
Prijenos uživo isti je problem s jednim pošiljateljem i mnogo primatelja. Voditelj šalje sliku poslužitelju blizu sebe, a svaki gledatelj gleda s poslužitelja u svojoj regiji, koji prijenos jednom dobiva s voditeljeva poslužitelja i služi sve koji ondje gledaju. Publika raspršena po mnogim zemljama tada se poslužuje blizu svakog gledatelja, a gledatelji ni u jednoj regiji ne čekaju na poslužitelj s drugog kraja svijeta.
Što može ostati u jednoj regiji
Ne mora sve biti blizu. Poruke u chatu, prisutnost, pokazatelji tipkanja i ostali događaji aplikacije su mali, a poruka koja stigne 100 milisekundi kasnije nego što je mogla prolazi neopaženo. Kad su u jednoj regiji, njihov redoslijed i povijest ostaju jednostavni, a to je važnije od milisekundi.
Zato je uobičajena podjela: mediji blizu svake osobe, a događaji na jednom mjestu.
Kako povezati korisnike iz različitih regija: popis za provjeru
- Pogledajte gdje su vaši korisnici. Zemlje iz kojih zovu govore vam koje regije trebate najprije.
- Postavite releje u svaku od tih regija, iza jednog imena s odgovorom prema regiji, s pristupnim podacima koje prihvaća svaka regija, na portu 443 kao i na 3478.
- Rasporedite svaki grupni poziv i prijenos uživo na više regija, tako da je svaka osoba na poslužitelju blizu sebe, a svaki tok prelazi između regija jednom, i to samo dok ga netko gleda.
- Održite pozive dok se poslužitelji mijenjaju. Poslužitelj koji se isključuje radi održavanja najprije premješta svoje pozive na drugi, pa se nijedan poziv ne prekida.
- Držite događaje u jednoj regiji osim ako vaša aplikacija nema razloga za drukčije.
Ništa od toga nije mali posao: svaka regija znači poslužitelje koje treba pokretati, ažurirati, nadzirati i proširivati, a veze između njih same su za sebe mreža.
Kako WordPlus Cloud povezuje vaše korisnike
WordPlus Cloud pokreće sve to, pa vaša aplikacija nikad ne bira regiju:
- Naši relejni i medijski poslužitelji za pozive rade u Njemačkoj, Francuskoj, Ujedinjenom Kraljevstvu, Poljskoj, Kanadi i Singapuru, a uskoro i u Sjedinjenim Američkim Državama, Australiji, Indiji i Italiji. Stranica Kako povezujemo vaše korisnike prikazuje ih na karti.
- Svaki uređaj dolazi do regije koja mu je najbliža, preko jednog imena s odgovorom prema kašnjenju. Poziv između dviju osoba ide izravno između uređaja kad god može, preko releja najbližeg svakoj osobi kad to blokira vatrozid, a preko naših medijskih poslužitelja kad ni releji ne mogu proći, bez prekidanja poziva.
- Svaka osoba u grupnom pozivu ili prijenosu uživo spaja se na medijski poslužitelj u svojoj regiji, a naši poslužitelji prosljeđuju svaki tok između regija privatnim vezama, jednom za svaki poslužitelj koji ga treba, i to samo dok ga netko ondje gleda.
- Poslužitelj koji se isključuje radi održavanja najprije premješta svoje pozive na drugi, a ljudi u njima nastavljaju razgovarati.
- Poruke i događaji idu preko naših poslužitelja za rad u stvarnom vremenu u Njemačkoj, koji rastu s prometom. Stižu i rubni poslužitelji u više regija, koji će i događaje približiti vašim korisnicima.
Pozivi između dviju osoba šifrirani su s kraja na kraj na svakom putu, a vaš poslužitelj i dalje odlučuje tko smije zvati koga. Sve to radi jednako u Better Messagesu na WordPressu i u vašim vlastitim aplikacijama, na Next.js, Laravelu, Djangu i drugim stackovima, s našim SDK-ovima. Stranica Videopozivi i grupni pozivi za vašu aplikaciju pokazuje što vam SDK-ovi daju.