Blog

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

· Andrij Tkachenko · 7 min čitanja

Dva udaljena stalka s poslužiteljima, svaki s dva prozora aplikacija pokraj sebe, spojena jednim dugim lukom po kojem putuju podaci

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

  1. Pogledajte gdje su vaši korisnici. Zemlje iz kojih zovu govore vam koje regije trebate najprije.
  2. 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.
  3. 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.
  4. 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.
  5. 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.