Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Mihails Salosins (turpmāk ā€“ MS): - Sveiki visiem! Mani sauc Maikls. Es strādāju par aizmugursistēmas izstrādātāju uzņēmumā MC2 Software, un es runāŔu par Go izmantoÅ”anu mobilās lietojumprogrammas Look+ aizmugursistēmā.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Vai te kādam patīk hokejs?

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Tad Ŕī lietojumprogramma ir paredzēta jums. Tas ir paredzēts operētājsistēmai Android un iOS, un to izmanto, lai skatÄ«tos dažādu sporta notikumu pārraides tieÅ”saistē un ierakstÄ«tas. Aplikācijā atrodama arÄ« dažāda statistika, teksta pārraides, konferenču, turnÄ«ru tabulas un cita lÄ«dzjutējiem noderÄ«ga informācija.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Arī aplikācijā ir tāda lieta kā video momenti, t.i., var noskatīties maču svarīgākos momentus (vārti, cīņas, sitieni utt.). Ja nevēlaties skatīties visu pārraidi, varat skatīties tikai interesantākos.

Ko izmantojāt attīstībā?

Galvenā daļa tika uzrakstÄ«ta Go. API, ar kuru sazinājās mobilie klienti, tika rakstÄ«ta programmā Go. Go tika rakstÄ«ts arÄ« pakalpojums push paziņojumu nosÅ«tÄ«Å”anai uz mobilajiem tālruņiem. Mums bija arÄ« jāuzraksta savs ORM, par kuru mēs kādreiz varētu runāt. Nu kaut kādi nelieli servisi tika ierakstÄ«ti Go: izmēru maiņa un attēlu ielāde redaktoriem...

Mēs izmantojām PostgreSQL kā datu bāzi. Redaktora saskarne tika uzrakstÄ«ta Ruby on Rails, izmantojot ActiveAdmin dārgakmeni. ArÄ« statistikas importÄ“Å”ana no statistikas nodroÅ”inātāja ir rakstÄ«ta rubÄ«nā.

Sistēmas API testiem mēs izmantojām Python unittest. Memcached tiek izmantots, lai ierobežotu API maksājumu zvanus, "Chef" tiek izmantots konfigurācijas kontrolei, Zabbix tiek izmantots, lai vāktu un uzraudzÄ«tu iekŔējo sistēmu statistiku. Graylog2 ir paredzēts žurnālu apkopoÅ”anai, Slate ir API dokumentācija klientiem.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Protokola izvēle

Pirmā problēma, ar kuru mēs saskārāmies: mums bija jāizvēlas protokols mijiedarbÄ«bai starp aizmugursistēmu un mobilajiem klientiem, pamatojoties uz Ŕādiem punktiem...

  • BÅ«tiskākā prasÄ«ba: dati par klientiem ir jāatjauno reāllaikā. Tas nozÄ«mē, ka visiem, kas paÅ”laik skatās pārraidi, atjauninājumi jāsaņem gandrÄ«z uzreiz.
  • Lai vienkārÅ”otu lietas, mēs pieņēmām, ka dati, kas tiek sinhronizēti ar klientiem, netiek dzēsti, bet tiek paslēpti, izmantojot Ä«paÅ”us karogus.
  • Visu veidu retie pieprasÄ«jumi (piemēram, statistika, komandu sastāvi, komandu statistika) tiek iegÅ«ti ar parastajiem GET pieprasÄ«jumiem.
  • Turklāt sistēmai vienlaikus bija viegli jāatbalsta 100 tÅ«kstoÅ”i lietotāju.

Pamatojoties uz to, mums bija divas protokola iespējas:

  1. Tīmekļa kontaktligzdas. Bet mums nebija vajadzīgi kanāli no klienta uz serveri. Mums vajadzēja tikai nosūtīt atjauninājumus no servera klientam, tāpēc tīmekļa ligzda ir lieka iespēja.
  2. Servera nosūtītie notikumi (SSE) parādījās tieŔi tā! Tas ir diezgan vienkārŔi un būtībā apmierina visu, kas mums nepiecieŔams.

Servera sūtītie notikumi

Daži vārdi par to, kā Ŕī lieta darbojas...

Tas darbojas, izmantojot http savienojumu. Klients nosūta pieprasījumu, serveris atbild ar Content-Type: text/event-stream un nepārtrauc savienojumu ar klientu, bet turpina rakstīt datus savienojumam:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Datus var nosÅ«tÄ«t formātā, kas saskaņots ar klientiem. MÅ«su gadÄ«jumā mēs to nosÅ«tÄ«jām Ŕādā formā: notikuma laukā tika nosÅ«tÄ«ts mainÄ«tās struktÅ«ras nosaukums (persona, spēlētājs), bet datu laukā tika nosÅ«tÄ«ts JSON ar jauniem, mainÄ«tiem laukiem spēlētājam.

Tagad parunāsim par to, kā darbojas pati mijiedarbība.

  • Vispirms klients nosaka pēdējo reizi, kad tika veikta sinhronizācija ar pakalpojumu: tas apskata savu lokālo datu bāzi un nosaka pēdējo reÄ£istrēto izmaiņu datumu.
  • Tā nosÅ«ta pieprasÄ«jumu ar Å”o datumu.
  • Atbildot uz to, mēs viņam nosÅ«tām visus atjauninājumus, kas notikuÅ”i kopÅ” Ŕī datuma.
  • Pēc tam tas izveido savienojumu ar tieÅ”raides kanālu un neaizveras, kamēr tam nav nepiecieÅ”ami Å”ie atjauninājumi:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Mēs viņam nosÅ«tām izmaiņu sarakstu: ja kāds gÅ«st vārtus, mēs mainām mača rezultātu, ja viņŔ gÅ«st traumu, tas tiek nosÅ«tÄ«ts arÄ« reāllaikā. Tādējādi klienti spēles notikumu plÅ«smā uzreiz saņem jaunākos datus. Periodiski, lai klients saprastu, ka serveris nav nomiris, nekas nav noticis, ik pēc 15 sekundēm nosÅ«tām laika zÄ«mogu - lai tas zina, ka viss ir kārtÄ«bā un nav jāpievienojas.

Kā tiek apkalpots tieŔraides savienojums?

  • Pirmkārt, mēs izveidojam kanālu, kurā tiks saņemti buferizētie atjauninājumi.
  • Pēc tam mēs abonējam Å”o kanālu, lai saņemtu jaunumus.
  • Mēs uzstādām pareizo galveni, lai klients zinātu, ka viss ir kārtÄ«bā.
  • NosÅ«tiet pirmo ping. Mēs vienkārÅ”i ierakstām paÅ”reizējo savienojuma laikspiedolu.
  • Pēc tam mēs lasām no kanāla cilpā, lÄ«dz atjaunināŔanas kanāls tiek aizvērts. Kanāls periodiski saņem vai nu paÅ”reizējo laikspiedolu, vai izmaiņas, kuras mēs jau rakstām, lai atvērtu savienojumus.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Pirmā problēma, ar kuru saskārāmies, bija Ŕāda: katram savienojumam, kas tika atvērts ar klientu, mēs izveidojām taimeri, kas atzÄ«mējās reizi 15 sekundēs - izrādās, ja mums bÅ«tu atvērti 6 tÅ«kstoÅ”i savienojumu ar vienu maŔīnu (ar vienu API serveri), 6 tika izveidoti tÅ«kstoÅ”i taimeru. Tas noveda pie tā, ka iekārta neturēja nepiecieÅ”amo slodzi. Problēma mums nebija tik acÄ«mredzama, taču mēs saņēmām nelielu palÄ«dzÄ«bu un to novērsām.

Tā rezultātā tagad mūsu ping nāk no tā paŔa kanāla, no kura nāk atjauninājums.

Attiecīgi ir tikai viens taimeris, kas atzīmē reizi 15 sekundēs.

Å eit ir vairākas palÄ«gfunkcijas - galvenes nosÅ«tÄ«Å”ana, ping un pati struktÅ«ra. Tas ir, tabulas nosaukums (persona, spēle, sezona) un informācija par Å”o ierakstu tiek pārsÅ«tÄ«ta Å”eit:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Atjauninājumu nosūtīŔanas mehānisms

Tagad nedaudz par to, no kurienes nāk izmaiņas. Mums ir vairāki cilvēki, redaktori, kuri skatās pārraidi reāllaikā. Viņi rada visus notikumus: kāds tika izraidīts, kāds tika ievainots, kaut kāds aizvietotājs...

Izmantojot CMS, dati tiek ievadÄ«ti datu bāzē. Pēc tam datu bāze par to informē API serverus, izmantojot Listen/Notify mehānismu. API serveri jau nosÅ«ta Å”o informāciju klientiem. Tādējādi mums bÅ«tÄ«bā ir tikai daži serveri, kas ir pieslēgti datu bāzei, un datu bāzei nav Ä«paÅ”as slodzes, jo klients nekādā veidā tieÅ”i mijiedarbojas ar datu bāzi:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

PostgreSQL: klausieties/paziņojiet

Mehānisms Listen/Notify programmā Postgres ļauj paziņot notikumu abonentiem, ka kāds notikums ir mainÄ«jies ā€“ kāds ieraksts ir izveidots datu bāzē. Lai to izdarÄ«tu, mēs uzrakstÄ«jām vienkārÅ”u trigeri un funkciju:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Ievietojot vai mainot ierakstu, kanālā data_updates izsaucam funkciju notify, nododot tur tabulas nosaukumu un mainītā vai ievietotā ieraksta identifikatoru.

Visām tabulām, kas jāsinhronizē ar klientu, mēs definējam trigeri, kas pēc ieraksta maiņas/atjaunināŔanas izsauc zemāk esoÅ”ajā slaidā norādÄ«to funkciju.
Kā API parakstās uz Ŕīm izmaiņām?

Tiek izveidots Fanout mehānisms - tas sÅ«ta ziņojumus klientam. Tas apkopo visus klientu kanālus un nosÅ«ta atjauninājumus, kas saņemti, izmantojot Å”os kanālus:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Å eit standarta pq bibliotēka, kas pieslēdzas datu bāzei un saka, ka vēlas klausÄ«ties kanālu (data_updates), pārbauda, ā€‹ā€‹vai savienojums ir atvērts un viss ir kārtÄ«bā. Es izlaižu kļūdu pārbaudi, lai ietaupÄ«tu vietu (nepārbaudÄ«t ir bÄ«stami).

Tālāk mēs asinhroni iestatām Ticker, kas ik pēc 15 sekundēm nosÅ«tÄ«s ping un sāksim klausÄ«ties kanālu, kuru abonējām. Ja saņemam ping, mēs to publicējam. Ja mēs saņemam kādu ierakstu, mēs publicējam Å”o ierakstu visiem Ŕī Fanout abonentiem.

Kā darbojas Fan-out?

Krievu valodā tas tiek tulkots kā "sadalÄ«tājs". Mums ir viens objekts, kas reÄ£istrē abonentus, kuri vēlas saņemt kādus atjauninājumus. Un, tiklÄ«dz Å”im objektam pienāk atjauninājums, tas izplata Å”o atjauninājumu visiem saviem abonentiem. Pietiekami vienkārÅ”i:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Kā tas tiek ieviests pakalpojumā Go:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Ir struktÅ«ra, tā tiek sinhronizēta, izmantojot Mutexes. Tam ir lauks, kas saglabā Fanout savienojuma stāvokli ar datu bāzi, t.i., paÅ”laik klausās un saņems atjauninājumus, kā arÄ« visu pieejamo kanālu sarakstu - karte, kuras atslēga ir kanāls un struktÅ«ra vērtÄ«bas (bÅ«tÄ«bā tas nekādā veidā netiek izmantots).

Divas metodes - savienots un atvienots - ļauj mums pateikt Fanout, ka mums ir savienojums ar bāzi, tas ir parādījies un savienojums ar bāzi ir pārtraukts. Otrajā gadījumā jums ir jāatvieno visi klienti un jāpasaka, ka viņi vairs nevar neko klausīties un ka viņi atkal izveido savienojumu, jo savienojums ar viņiem ir beidzies.

Ir arÄ« abonÄ“Å”anas metode, kas pievieno kanālu ā€œklausÄ«tājiemā€:

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Ir Unsubscribe metode, kas noņem kanālu no klausītājiem, ja klients atvienojas, kā arī Publish metode, kas ļauj nosūtīt ziņojumu visiem abonentiem.

Jautājums: ā€“ Kas tiek pārraidÄ«ts pa Å”o kanālu?

JAUNKUNDZE: ā€“ Tiek pārsÅ«tÄ«ts mainÄ«tais modelis vai ping (bÅ«tÄ«bā tikai skaitlis, vesels skaitlis).

JAUNKUNDZE: - JÅ«s varat nosÅ«tÄ«t jebko, nosÅ«tÄ«t jebkuru struktÅ«ru, publicēt to - tas vienkārÅ”i pārvērÅ”as par JSON un viss.

JAUNKUNDZE: ā€“ Mēs saņemam paziņojumu no Postgres ā€“ tajā ir tabulas nosaukums un identifikators. Pamatojoties uz tabulas nosaukumu un identifikatoru, mēs iegÅ«stam vajadzÄ«go ierakstu un pēc tam nosÅ«tām Å”o struktÅ«ru publicÄ“Å”anai.

Infrastruktūra

Kā tas izskatās no infrastruktÅ«ras viedokļa? Mums ir 7 aparatÅ«ras serveri: viens no tiem ir pilnÄ«bā veltÄ«ts datu bāzei, pārējie seÅ”i darbina virtuālās maŔīnas. Ir 6 API kopijas: katra virtuālā maŔīna ar API darbojas atseviŔķā aparatÅ«ras serverÄ« ā€” tas ir paredzēts uzticamÄ«bas labad.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Mums ir divas priekÅ”gals ar Keepalived, kas ir instalētas, lai uzlabotu pieejamÄ«bu, lai, ja kaut kas notiek, viens priekÅ”gals varētu aizstāt otru. Tāpat ā€“ divi CMS eksemplāri.

Ir arī statistikas importētājs. Ir DB Slave, no kura periodiski tiek veidotas dublējumkopijas. Ir Pigeon Pusher, aplikācija, kas sūta push paziņojumus klientiem, kā arī infrastruktūras lietas: Zabbix, Graylog2 un Chef.

Faktiski Ŕī infrastruktÅ«ra ir lieka, jo 100 tÅ«kstoÅ”us var apkalpot ar mazāku serveru skaitu. Bet bija dzelzs ā€“ izmantojām (mums teica, ka var ā€“ kāpēc gan ne).

Go plusi

Pēc tam, kad mēs strādājām pie Ŕīs lietojumprogrammas, parādÄ«jās tādas acÄ«mredzamas Go priekÅ”rocÄ«bas.

  • ForÅ”a http bibliotēka. Ar to jÅ«s varat izveidot diezgan daudz no kastes.
  • Turklāt kanāli, kas ļāva mums ļoti vienkārÅ”i ieviest mehānismu paziņojumu nosÅ«tÄ«Å”anai klientiem.
  • BrÄ«niŔķīgā lieta, sacÄ«kÅ”u detektors, ļāva mums novērst vairākas kritiskas kļūdas (inscenÄ“Å”anas infrastruktÅ«ra). Viss, kas darbojas iestudējumā, tiek palaists, apkopots ar Race taustiņu; un mēs attiecÄ«gi varam aplÅ«kot inscenÄ“Å”anas infrastruktÅ«ru, lai redzētu, kādas mums ir iespējamās problēmas.
  • Minimālisms un valodas vienkārŔība.

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

Meklējam izstrādātājus! Ja kāds vēlas, lūdzu.

jautājumi

KlausÄ«tāju jautājums (turpmāk ā€“ B): ā€“ Man Ŕķiet, ka jÅ«s palaidāt garām vienu svarÄ«gu punktu saistÄ«bā ar Fan-out. Vai es pareizi saprotu, ka, nosÅ«tot atbildi klientam, jÅ«s bloķējat, ja klients nevēlas lasÄ«t?

JAUNKUNDZE: ā€“ Nē, mēs nebloķējam. Pirmkārt, mums tas viss ir aiz nginx, tas ir, ar lēniem klientiem nav problēmu. Otrkārt, klientam ir kanāls ar buferi - patiesÄ«bā tur varam ielikt lÄ«dz simts atjauninājumiem... Ja nevaram uzrakstÄ«t kanālam, tad tas to izdzÄ“Å”. Ja mēs redzēsim, ka kanāls ir bloķēts, mēs vienkārÅ”i aizvērsim kanālu, un tas arÄ« viss - klients atjaunos savienojumu, ja radÄ«sies kāda problēma. Tāpēc principā Å”eit nav bloÄ·Ä“Å”anas.

In: ā€“ Vai nevarētu uzreiz nosÅ«tÄ«t ierakstu uz Listen/Notify, nevis identifikatoru tabulu?

JAUNKUNDZE: - KlausÄ«ties/paziņot ir 8 tÅ«kstoÅ”u baitu ierobežojums nosÅ«tāmajā priekÅ”ielādē. Principā bÅ«tu iespējams nosÅ«tÄ«t, ja bÅ«tu darÄ«Å”ana ar nelielu datu apjomu, bet man Ŕķiet, ka Ŕādi [tā, kā mēs to darām], ir vienkārÅ”i ticamāk. Ierobežojumi ir paŔā Postgresā.

In: ā€“ Vai klienti saņem jaunumus par spēlēm, kas viņus neinteresē?

JAUNKUNDZE: ā€“ Vispār jā. Paralēli notiek 2-3 mači, un arÄ« tad diezgan reti. Ja klients kaut ko skatās, tad parasti viņŔ skatās maču, kas notiek. Pēc tam klientam ir lokālā datu bāze, kurā tiek summēti visi Å”ie atjauninājumi, un pat bez interneta savienojuma klients var skatÄ«t visas iepriekŔējās atbilstÄ«bas, kurām viņam ir atjauninājumi. BÅ«tÄ«bā mēs sinhronizējam savu datu bāzi serverÄ« ar klienta lokālo datu bāzi, lai viņŔ varētu strādāt bezsaistē.

In: ā€“ Kāpēc jÅ«s izveidojāt savu ORM?

Aleksejs (viens no Look+ izstrādātājiem): ā€“ Toreiz (tas bija pirms gada) ORM bija mazāk nekā tagad, kad to ir diezgan daudz. Mana mīļākā lieta par lielāko daļu ORM ir tā, ka lielākā daļa no tiem darbojas tukŔās saskarnēs. Tas ir, metodes Å”ajos ORM ir gatavas uzņemties jebko: struktÅ«ru, struktÅ«ras rādÄ«tāju, numuru, kaut ko pilnÄ«gi neatbilstoÅ”u...

Mūsu ORM ģenerē struktūras, pamatojoties uz datu modeli. Es pats. Un tāpēc visas metodes ir konkrētas, neizmanto refleksiju utt. Viņi pieņem struktūras un sagaida, ka izmantos tās struktūras, kas nāk.

In: ā€“ Cik cilvēku piedalÄ«jās?

JAUNKUNDZE: ā€“ Sākotnējā posmā piedalÄ«jās divi cilvēki. Sākām kaut kur jÅ«nijā, un augustā bija gatava galvenā daļa (pirmā versija). SeptembrÄ« bija izlaidums.

In: ā€“ Ja jÅ«s aprakstāt SSE, jÅ«s neizmantojat taimautu. Kāpēc ir tā, ka?

JAUNKUNDZE: ā€“ GodÄ«gi sakot, SSE joprojām ir html5 protokols: SSE standarts ir paredzēts saziņai ar pārlÅ«kprogrammām, cik es saprotu. Tam ir papildu funkcijas, lai pārlÅ«kprogrammas varētu atkārtoti izveidot savienojumu (un tā tālāk), bet mums tās nav vajadzÄ«gas, jo mums bija klienti, kas varēja ieviest jebkādu savienojuma un informācijas saņemÅ”anas loÄ£iku. Mēs netaisÄ«jām SSE, bet gan kaut ko lÄ«dzÄ«gu SSE. Tas nav pats protokols.
Nebija vajadzības. Cik saprotu, klienti savienojuma mehānismu ieviesa gandrīz no nulles. Viņiem bija vienalga.

In: ā€“ Kādus papildu pakalpojumus izmantojāt?

JAUNKUNDZE: ā€“ Stila vienotÄ«bai visaktÄ«vāk izmantojām govet un golint, kā arÄ« gofmt. Nekas cits netika izmantots.

In: ā€“ Ko jÅ«s izmantojāt atkļūdoÅ”anai?

JAUNKUNDZE: ā€“ AtkļūdoÅ”ana lielākoties tika veikta, izmantojot testus. Mēs neizmantojām atkļūdotāju vai GOP.

In: ā€“ Vai varat atgriezt slaidu, kurā ir ieviesta funkcija Publicēt? Vai viena burta mainÄ«go nosaukumi jÅ«s mulsina?

JAUNKUNDZE: - Nē. Viņiem ir diezgan ā€œÅ”auraā€ redzamÄ«bas joma. Tie netiek izmantoti nekur citur, izņemot Å”eit (izņemot Ŕīs klases iekŔējos elementus), un tas ir ļoti kompakts - tas aizņem tikai 7 rindas.

In: ā€“ Kaut kā tas joprojām nav intuitÄ«vi...

JAUNKUNDZE: - Nē, nē, tas ir īsts kods! Tas nav par stilu. Tā ir tik utilitāra, ļoti maza klase - tikai 3 lauki klasē...

Mihails Salosins. Golangas tikÅ”anās. Izmantojiet Go lietojumprogrammas Look+ aizmugurē

JAUNKUNDZE: ā€“ Kopumā visi dati, kas tiek sinhronizēti ar klientiem (sezonas spēles, spēlētāji), nemainās. Aptuveni runājot, ja mēs veidosim citu sporta veidu, kurā mums ir jāmaina mačs, mēs vienkārÅ”i ņemsim visu vērā klienta jaunajā versijā, un vecās klienta versijas tiks aizliegtas.

In: ā€“ Vai ir kādas treŔās puses atkarÄ«bas pārvaldÄ«bas pakotnes?

JAUNKUNDZE: ā€“ Mēs izmantojām go dep.

In: ā€“ Ziņojuma tēmā bija kaut kas par video, bet ziņojumā par video nebija nekā.

JAUNKUNDZE: ā€“ Nē, man nav nekā tēmā par videoklipu. To sauc par ā€œLook+ā€ ā€” tas ir lietojumprogrammas nosaukums.

In: ā€“ JÅ«s teicāt, ka tas tiek straumēts klientiem?

JAUNKUNDZE: ā€“ Mēs nebijām iesaistÄ«ti video straumÄ“Å”anā. To pilnÄ«bā veica Megafon. Jā, es neteicu, ka lietojumprogramma ir MegaFon.

JAUNKUNDZE: ā€“ Go ā€“ visu datu nosÅ«tÄ«Å”anai ā€“ par rezultātu, spēļu notikumiem, statistiku... Go ir visa lietojumprogrammas aizmugursistēma. Klientam no kaut kurienes ir jāzina, kuru saiti spēlētājam izmantot, lai lietotājs varētu skatÄ«ties spēli. Mums ir saites uz sagatavotajiem videoklipiem un straumēm.

Dažas reklāmas šŸ™‚

Paldies, ka palikāt kopā ar mums. Vai jums patīk mūsu raksti? Vai vēlaties redzēt interesantāku saturu? Atbalsti mūs, pasūtot vai iesakot draugiem, mākoņa VPS izstrādātājiem no 4.99 USD, unikāls sākuma līmeņa serveru analogs, ko mēs jums izgudrojām: Visa patiesība par VPS (KVM) E5-2697 v3 (6 kodoli) 10GB DDR4 480GB SSD 1Gbps no 19$ vai kā koplietot serveri? (pieejams ar RAID1 un RAID10, līdz 24 kodoliem un līdz 40 GB DDR4).

Dell R730xd 2x lētāk Equinix Tier IV datu centrā Amsterdamā? Tikai Å”eit 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV no 199$ NÄ«derlandē! Dell R420 ā€” 2x E5-2430 2.2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbps 100 TB ā€” no 99 USD! LasÄ«t par Kā izveidot infrastruktÅ«ras uzņēmumu klase ar Dell R730xd E5-2650 v4 serveru izmantoÅ”anu 9000 eiro par santÄ«mu?

Avots: www.habr.com

Pievieno komentāru