Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Mikhail Salosin (mĂ« tej – MS): – TĂ« gjithĂ« pĂ«rshĂ«ndetje! Jam Mikhail. Punoj si zhvillues backend nĂ« kompaninĂ« MC2 Software dhe do tĂ« flas pĂ«r pĂ«rdorimin e Go nĂ« backend-in e aplikacionit mobil “Shiko+.”

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ka ndonjë nga të pranishmit që e do hokeun?

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Atëherë ky aplikacion është për ju. Ai është për Android dhe iOS, shërben për të parë transmetimet e ngjarjeve të ndryshme sportive në kohë reale dhe në regjistrim. Gjithashtu, aplikacioni përmban statistikë të ndryshme, transmetime tekstuale, tabela për konferenca, turne dhe informacione të tjera të dobishme për tifozët.

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Po ashtu, në aplikacion ka një funksion si momente video, domethënë mund të shihni momentet më interesante të ndeshjeve (gola, përleshje, gjuajtje penalltie etj.). Nëse nuk dëshironi të shihni tërë transmetimin, mund të shihni vetëm më të rëndësishmet.

ÇfarĂ« kemi pĂ«rdorur nĂ« zhvillim?

Pjesa kryesore ishte shkruar në Go. API-i me të cilin komunikuan klientët mobilë ishte shkruar në Go. Po ashtu, një shërbim për dërgimin e njoftimeve push për mobilë është shkruar në Go. Na duhej të shkruanim një ORM tonin, për të cilin ndoshta do të flasim ndonjëherë. Dhe gjithashtu, disa shërbime të vogla janë shkruar në Go: ndryshimi i madhësisë dhe ngarkimi i imazheve për anën e redaktorëve


Si bazë të dhënash kemi përdorur PostgreSQL. Ndërfaqja për redaktorët ishte shkruar në Ruby on Rails me ndihmën e gem-it ActiveAdmin. Edhe importimi i statistikës nga ofruesi i statistikave ishte shkruar në Ruby.

Për testet sistemore të API-t, ne përdorëm unittest-in e Python-it. Memcached përdoret për kufizimin e thirrjeve në API-në e pagesës, Chef për kontrollin e konfigurimeve, Zabbix për mbledhjen dhe monitorimin e të dhënave statistikore të brendshme të sistemit. Graylog2 përdoret për mbledhjen e log-eve, Slate është dokumentacioni i API-t për klientët.

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Zgjedhja e protokollit

Problemi i parë me të cilin u përballëm: duhej të zgjidhnim një protokoll të ndërveprimit midis backend-it dhe klientëve mobilë, duke u bazuar në pikat e mëposhtme


  • Kushti mĂ« i rĂ«ndĂ«sishĂ«m: tĂ« dhĂ«nat nĂ« klientĂ« duhet tĂ« pĂ«rditĂ«sohen nĂ« kohĂ« reale. Pra, tĂ« gjithĂ« ata qĂ« janĂ« duke parĂ« transmetimin nĂ« atĂ« moment duhet tĂ« marrin pĂ«rditĂ«simet pothuajse nĂ« çast.
  • PĂ«r t'u thjeshtuar, ne pranuam se tĂ« dhĂ«nat qĂ« sinkronizohen me klientĂ«t nuk fshihen, por fshehen pĂ«rmes flamujve tĂ« veçantĂ«.
  • KĂ«rkesat e rralla (si statistikat, pĂ«rbĂ«rja e skuadrave, statistikat e skuadrave) kryhen me kĂ«rkesa tĂ« zakonshme GET.
  • PĂ«r mĂ« tepĂ«r, sistemi duhej tĂ« pĂ«rballonte qetĂ« 100,000 pĂ«rdorues njĂ«kohĂ«sisht.

Duke u bazuar në këtë, ne kishim dy opsione protokolli:

  1. Websocket. Por ne nuk kishim nevojë për kanale nga klienti në server. Na duhet vetëm të dërgojmë azhurnime nga serveri në klient, prandaj websockets janë një opsion i tepruar.
  2. Ngjarjet e Dërguara nga Serveri (SSE) ishin perfekte për ne! Ato janë mjaft të thjeshta dhe përmbushin gjithçka që na nevojitet.

Ngjarjet e Dërguara nga Serveri

Disa fjalë rreth mënyrës se si funksionon kjo gjë...

Ajo funksionon mbi një lidhje http. Klienti dërgon një kërkesë, serveri përgjigjet me Content-Type: text/event-stream dhe nuk e mbyll lidhjen me klientin, por vazhdon të shkruajë të dhëna në lidhje:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

TĂ« dhĂ«nat mund tĂ« dĂ«rgohen nĂ« njĂ« format tĂ« pĂ«rshtatur me klientĂ«t. NĂ« rastin tonĂ«, dĂ«rgonim nĂ« kĂ«tĂ« mĂ«nyrĂ«: nĂ« fushĂ«n event shkonte emri i strukturĂ«s sĂ« ndryshuar (njeri, lojtar), ndĂ«rsa nĂ« fushĂ«n data – JSON me fushat e reja, tĂ« ndryshuara pĂ«r lojtarin.

Tani për mënyrën e funksionimit të bashkëpunimit.

  • SĂ« pari, klienti pĂ«rcakton kur Ă«shtĂ« kryer hera e fundit pĂ«rditĂ«simi me shĂ«rbimin: ai shikon nĂ« DB-nĂ« e tij lokale dhe pĂ«rcakton datĂ«n e ndryshimit tĂ« fundit tĂ« regjistruar.
  • Ai dĂ«rgon njĂ« kĂ«rkesĂ« me kĂ«tĂ« datĂ«.
  • NĂ« pĂ«rgjigje, i dĂ«rgojmĂ« tĂ« gjitha pĂ«rditĂ«simet qĂ« ndodhĂ«n nga ajo datĂ«.
  • Pas kĂ«saj, ai tregton lidhjen me kanalin live dhe nuk e mbyll derisa tĂ« ketĂ« nevojĂ« pĂ«r kĂ«to azhurnime:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ne i dĂ«rgojmĂ« atij njĂ« listĂ« ndryshimesh: nĂ«se dikush shĂ«non njĂ« gol – ndryshojmĂ« rezultatin e ndeshjes, nĂ«se ndodhin lĂ«ndime – gjithashtu dĂ«rgohet nĂ« kohĂ« reale. KĂ«shtu, nĂ« rrjedhĂ«n e ngjarjeve tĂ« ndeshjes, klientĂ«t menjĂ«herĂ« marrin tĂ« dhĂ«na aktuale. Periodikisht, pĂ«r t'i treguar klientit se serveri nuk Ă«shtĂ« ndalur, se nuk ka ndodhur ndonjĂ« gjĂ« me tĂ«, ne dĂ«rgojmĂ« çdo 15 sekonda njĂ« timestamp – pĂ«r ta siguruar qĂ« gjithçka Ă«shtĂ« nĂ« rregull dhe nuk ka nevojĂ« pĂ«r ri-lidhje.

Si menaxhohet lidhja live?

  • SĂ« pari, krijojmĂ« njĂ« kanal, ku do tĂ« vijnĂ« azhurnimet me njĂ« buffer.
  • MĂ« pas, e subscribojmĂ« kĂ«tĂ« kanal pĂ«r tĂ« marrĂ« azhurnime.
  • Vendosim titullin e duhur, nĂ« mĂ«nyrĂ« qĂ« klienti tĂ« dijĂ« se gjithçka Ă«shtĂ« nĂ« rregull.
  • DĂ«rgojmĂ« pingun e parĂ«. Thjesht regjistrojmĂ« timestamp-in aktual tĂ« lidhjes.
  • Pas kĂ«saj, nĂ« cikĂ«l lexojmĂ« nga kanali derisa kanali i azhurnimeve tĂ« mbyllet. NĂ« kanalin periodikisht vjen ose timestampi aktual, ose ndryshimet qĂ« ne tashmĂ« i regjistrojmĂ« nĂ« lidhjet e hapura.

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Problemi i parë me të cilin u përballëm ishte se për çdo lidhje të hapur me klientin krijonim një timer që tik-takonte çdo 15 sekonda - pra, nëse kishim 6 mijë lidhje të hapura me një makinë (me një API-server), krijoheshin 6 mijë timer-a. Kjo çonte në atë që makina nuk mbante ngarkesën e nevojshme. Problemi nuk ishte aq i dukshëm për ne, por na ndihmoi pak dhe e zgjidhem atë.

Si rrjedhojë, tani ping-u vjen nga i njëjti kanal nga i cili vjen azhurnimi.

Prandaj, ka vetëm një timer që tik-takonte çdo 15 sekonda.

KĂ«tu janĂ« disa funksione ndihmĂ«se – dĂ«rgimi i titullit, pingut dhe vetĂ« strukturĂ«s. Pra, kĂ«tu kalon emri i tabelĂ«s (person, ndeshje, sezon) dhe vetĂ« informata pĂ«r kĂ«tĂ« regjistrim:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Mekanizmi i dërgimit të azhurnimeve

Tani pak për atë se nga vijnë ndryshimet. Kemi disa persona, redaktorë, të cilët në kohë reale shikojnë transmetimin. Ata krijojnë të gjitha ngjarjet: dikush është fshirë, dikush ka marrë një lëndim, një zëvendësim


Me ndihmën e CMS, të dhënat kalojnë në bazë. Më pas, baza me mekanizmin Listen/Notify njofton për këtë API-serverat. API-serverat tashmë shpërndajnë këtë informacion tek klientët. Kështu, në thelb, vetëm disa serverë janë lidhur me bazën dhe nuk ka ndonjë ngarkesë të veçantë në bazë, sepse klienti nuk ndërvepron në asnjë mënyrë drejpërdrejt me bazën:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

PostgreSQL: Listen/Notify

Mekanizmi Listen/Notify në «Postgres» lejon njoftimin e abonentëve për ngjarjet se diçka ka ndryshuar - është krijuar një regjistrim në bazë. Për këtë shkruam një trigger të thjeshtë dhe një funksion:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Për insertim ose ndryshim regjistrimi, ne thërrasim funksionin notify në kanalin data_updates, duke kaluar emrin e tabelës dhe identifikuesin e regjistrimit që është ndryshuar ose futur.

Për të gjitha tabelat që duhet të sinkronizohen me klientin, ne përcaktojmë një trigger, i cili pas ndryshimit/azhurnimit të regjistrimit thërret funksionin e caktuar në slajdin më poshtë.
Si nënshkruan API këto ndryshime?

Krijohet mekanizmi Fanout – ai shpĂ«rndan mesazhe pĂ«r klientĂ«t. Ai mbledh tĂ« gjitha kanalet e klientĂ«ve dhe dĂ«rgon pĂ«rditĂ«simet qĂ« merr nĂ« kĂ«to kanale:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Këtu është biblioteka standarde pq, e cila lidhet me bazën dhe thotë se dëshiron të dëgjojë kanalin (data_updates), kontrollon nëse lidhja është e hapur dhe gjithçka është në rregull. Po e lë pas kontrollin e gabimeve, për të kursyer hapësirë (moskontrollimi është i rrezikshëm).

Më pas ne caktojmë asinkronisht Ticker, i cili do të dërgojë ping çdo 15 sekonda, dhe fillojmë të dëgjojmë kanalin, në të cilin jemi abonuar. Nëse merrni një ping, e publikoni atë. Nëse merrni një regjistër, atëherë e publikoni këtë regjistër për të gjithë abonentët e këtij Fanout.

Si funksionon Fan-out?

Në shqip, kjo përkthehet si "çakëll". Ne kemi një objekt të vetëm, i cili regjistron abonentët që duan të marrin disa përditësime. Dhe sa herë që një përditësim i këtij objekti arrin, ai e shpërndan këtë përditësim për të gjithë abonentët që ka. Mjafton e thjeshtë:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Si është realizuar në Go:

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ka njĂ« strukturĂ«, e cila sinkronizohet me ndihmĂ«n e Mutex-eve. Ajo ka njĂ« fushĂ«, e cila ruan gjendjen e lidhjes Fanout me bazĂ«n, pra, nĂ« kĂ«tĂ« moment ajo Ă«shtĂ« duke dĂ«gjuar dhe do tĂ« marrĂ« pĂ«rditĂ«sime, si dhe njĂ« listĂ« tĂ« tĂ« gjitha kanaleve ekzistuese – njĂ« map, ku çelĂ«si Ă«shtĂ« kanali dhe njĂ« struct nĂ« formĂ« vlerash (nĂ« thelb nuk pĂ«rdoret fare).

Dy metoda – Connected dhe Disconnected – lejojnĂ« tĂ« shpjegohet Fanout-it se kemi njĂ« lidhje me bazĂ«n, ajo Ă«shtĂ« krijuar dhe se lidhja me bazĂ«n Ă«shtĂ« shkĂ«putur. NĂ« rastin e dytĂ«, duhet tĂ« çaktivizoni tĂ« gjithĂ« klientĂ«t dhe t'u thoni atyre se nuk mund tĂ« dĂ«gjojnĂ« mĂ« asgjĂ« dhe tĂ« rikthehen, pasi lidhja me ta Ă«shtĂ« mbyllur.

Ka gjithashtu një metodë Subscribe, e cila shton kanal në "dëgjuesit":

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ka një metodë Unsubscribe, e cila heq kanalin nga dëgjuesit, nëse klienti është shkëputur, si dhe një metodë Publish, që lejon të shpërndajë një mesazh për të gjithë abonentët.

Pyetje: - ÇfarĂ« transmetohet nĂ« kĂ«tĂ« kanal?

MS: - Transmetohet modeli, i cili është ndryshuar ose ping (në thelb është vetëm një numër, integer).

MS: - Mund tĂ« dĂ«rgoni çfarĂ«do, çdo strukturĂ« – ajo thjesht shndĂ«rrohet nĂ« JSON dhe mbaroi.

MS: – Ne marrim njĂ« notifikuese nga "PostgreSQL" - nĂ« tĂ« pĂ«rmban emrin e tabelĂ«s dhe identifikuesin. Sipas emrit tĂ« tabelĂ«s dhe identifikuesit ne marrim regjistrimin qĂ« kemi nevojĂ«, dhe kĂ«to struktura i dĂ«rgojmĂ« pĂ«r publikim.

Infrastruktura

Si duket kjo nga kĂ«ndvĂ«shtrimi i infrastrukturĂ«s? Ne kemi 7 serverĂ« fizikĂ«: njĂ«ri prej tyre Ă«shtĂ« plotĂ«sisht i dedikuar pĂ«r bazĂ«n, ndĂ«rsa nĂ« gjashtĂ« tĂ« tjerĂ« nuk janĂ« duke funksionuar virtualizime. Ka 6 kopje API: secila virtualizim me API funksionon nĂ« njĂ« server fizik tĂ« veçantĂ« – kjo Ă«shtĂ« pĂ«r besueshmĂ«ri.

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ne kemi dy frontend-e, tĂ« cilat kanĂ« tĂ« instaluar Keepalived pĂ«r tĂ« pĂ«rmirĂ«suar disponueshmĂ«rinĂ«, nĂ« mĂ«nyrĂ« qĂ« nĂ« rast tĂ« ndonjĂ« problemi njĂ« frontend tĂ« mund tĂ« zĂ«vendĂ«sojĂ« tjetrin. Gjithashtu – dy kopje CMS.

Ka gjithashtu njĂ« importer statistike. Ka njĂ« DB Slave, nga e cila herĂ« pas here bĂ«hen kopje rezervĂ«. Ka Pigeon Pusher – ajo aplikacioni qĂ« dĂ«rgon njoftimet pĂ«r klientĂ«t, si dhe gjĂ«rat infrastrukturore: Zabbix, Graylog2 dhe Chef.

NĂ« tĂ« vĂ«rtetĂ«, kjo infrastrukturĂ« Ă«shtĂ« e tejkaluar, sepse 100 mijĂ« mund tĂ« shĂ«rbehen edhe me njĂ« numĂ«r mĂ« tĂ« vogĂ«l serverĂ«sh. Por kishte pajisje – ne e pĂ«rdorĂ«m (na thanĂ« qĂ« ishte e mundur – pse jo).

Avantazhet e Go

Pas punës në këtë aplikacion, dolën disa avantazhe evidente të Go.

  • Biblioteka http Ă«shtĂ« e shkĂ«lqyer. Me tĂ«, mund tĂ« krijosh mjaft gjĂ«ra "nga kutia".
  • Gjithashtu, kanalet na lejuan tĂ« realizojmĂ« shumĂ« lehtĂ« mekanizmin e dĂ«rgimit tĂ« njoftimeve pĂ«r klientĂ«t.
  • NjĂ« gjĂ« e shkĂ«lqyer si Race detector na lejoi tĂ« eliminojmĂ« disa bogĂ« kritike (infrastruktura staging). TĂ« gjitha qĂ« funksionojnĂ« nĂ« staging janĂ« nisur, kompiluar me çelĂ«sin Race; dhe ne, pĂ«rkatĂ«sisht, mund tĂ« shohim nĂ« infrastrukturĂ«n staging, cilat janĂ« problemet tona potenciale.
  • Minimalizmi dhe thjeshtĂ«sia e gjuhĂ«s.

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

Ne po kĂ«rkojmĂ« zhvillues! NĂ«se dikush Ă«shtĂ« i interesuar – lutem.

Pyetje

Pyetja nga audienca (mĂ« pas – P): – MĂ« duket se ju e keni humbur njĂ« pikĂ« tĂ« rĂ«ndĂ«sishme nĂ« lidhje me Fan-out. A e kuptoj saktĂ« se kur ju dĂ«rgoni njĂ« pĂ«rgjigje pĂ«r klientin, bllokoheni, nĂ«se klienti nuk dĂ«shiron tĂ« lexojĂ«?

MS: – Jo, ne bllokohemi. SĂ« pari, tĂ« gjitha kĂ«to ndodhin pĂ«rmes nginx, çka do tĂ« thotĂ« se nuk ka probleme me klientĂ«t e ngadaltĂ«. SĂ« dyti, klienti ka njĂ« kanal me tampon – nĂ« thelb mund tĂ« dĂ«rgojmĂ« deri nĂ« njĂ«qind azhurnime atje... NĂ«se nuk mund ta shkruajmĂ« nĂ« kanal, ai e fshin atĂ«. NĂ«se shohim qĂ« kanali Ă«shtĂ« bllokuar, thjesht e mbyllim kanalin dhe gjithçka – klienti lidhet pĂ«rsĂ«ri nĂ«se ndodh ndonjĂ« problem. Prandaj, nĂ« kĂ«tĂ« rast nuk ka bllokim.

P: – A nuk do tĂ« ishte mĂ« mirĂ« tĂ« dĂ«rgonit menjĂ«herĂ« regjistrimin nĂ« Listen/Notify, e jo tabelĂ«n-identifikues?

MS: – Listen/Notify ka njĂ« kufi prej 8 mijĂ« bajtĂ«sh pĂ«r preload-in qĂ« dĂ«rgon. NĂ« thelb, do tĂ« ishte e mundur tĂ« dĂ«rgonte, nĂ«se do tĂ« kishim tĂ« bĂ«nim me njĂ« sasi tĂ« vogĂ«l tĂ« dhĂ«nash, por mĂ« duket se kĂ«shtu [sa e bĂ«jmĂ« ne] Ă«shtĂ« thjesht mĂ« e sigurt. Kufizimet janĂ« nĂ« vetĂ« "Postgres".

P: – A marrin klientĂ«t azhurnime pĂ«r ndeshjet qĂ« nuk i interesojnĂ«?

MS: – Po, nĂ« tĂ« vĂ«rtetĂ«. Zakonisht, ka 2-3 ndeshje qĂ« zhvillohen paralelisht, dhe kjo ndodh mjaft rrallĂ«. NĂ«se klienti po shikon diçka, zakonisht ai zakonisht shikon ndeshjen qĂ« po zhvillohet. Pastaj, nĂ« klient ekziston njĂ« bazĂ« lokale, nĂ« tĂ« cilĂ«n ruhet tĂ« gjitha kĂ«to azhurnime, dhe madje pa lidhjen me internetin, klienti mund tĂ« shikojĂ« tĂ« gjitha ndeshjet e kaluara pĂ«r tĂ« cilat ka azhurnime. NĂ« thelb, ne e sinkronizojmĂ« bazĂ«n tonĂ« nĂ« server me bazĂ«n lokale tĂ« klientit, nĂ« mĂ«nyrĂ« qĂ« ai tĂ« mund tĂ« punojĂ« edhe nĂ« offline.

P: – Pse krijuat ORM tuaj?

Aleksei (njĂ« nga zhvilluesit e "Shiko+"): – NĂ« atĂ« kohĂ« (kjo ishte njĂ« vit mĂ« parĂ«) kishte mĂ« pak ORM se tani, kur ato janĂ« mjaft tĂ« shumta. Nga shumica e ORM-ve ekzistuese, mĂ« shumĂ« mĂ« pengon se shumica e tyre punojnĂ« me interface tĂ« zbrazĂ«ta. Do tĂ« thotĂ« se metodat qĂ« kanĂ« kĂ«to ORM janĂ« gati tĂ« pranojnĂ« gjithçka: strukturĂ«, tregues strukture, numĂ«r, diçka qĂ« nuk ka lidhje fare me kĂ«tĂ«...

ORM-ja jonë gjeneron struktura në bazë të modelit të të dhënave. Vetë. Dhe prandaj të gjitha metodat janë specifike, nuk përdorin refleksionin etj. Ato pranojnë struktura dhe presin të përdorin ato struktura që do të vijnë.

P: – Sa njerĂ«z morĂ«n pjesĂ«?

MS: – NĂ« fazĂ«n fillestare morĂ«n pjesĂ« dy njerĂ«z. Diku nĂ« qershor filluam, nĂ« gusht nĂ«ndesa principale ishte e gatshme (versioni i parĂ«). NĂ« shtator ishte lĂ«shimi.

P: – Aty ku pĂ«rshkruani SSE, nuk pĂ«rdorni timeout. Pse kĂ«shtu?

MS: – NĂ«se flasim hapur, SSE Ă«shtĂ« nĂ« tĂ« vĂ«rtetĂ« njĂ« protokoll html5: standardi SSE Ă«shtĂ« i destinuar pĂ«r komunikimin me shfletuesit, sa kuptoj. Ka disa funksione shtesĂ« qĂ« lejojnĂ« shfletuesit tĂ« risigurohen (dhe tĂ« tjera), por ato nuk na duhen, sepse kemi pasur klientĂ« qĂ« kanĂ« qenĂ« tĂ« aftĂ« tĂ« implementonin çdo logjikĂ« lidhjeje dhe marrjeje informacioni. Kemi bĂ«rĂ« mĂ« shumĂ« se SSE, ndoshta diçka e ngjashme me SSE. Nuk Ă«shtĂ« vetĂ« protokolli.
Nuk kishte nevojë. Sa kuptoj, klientët e implementuan mekanizmin e lidhjes praktikisht nga zero. Në thelb, nuk e kishin problem.

P: – ÇfarĂ« mjete shtesĂ« keni pĂ«rdorur?

MS: – PĂ«rdorĂ«m mĂ« aktivisht govet dhe golint, qĂ« tĂ« kishim njĂ« stil tĂ« njĂ«jtĂ«, si dhe gofmt. Nuk kemi pĂ«rdorur asgjĂ« tjetĂ«r.

P: – Me çfarĂ« e keni bĂ«rĂ« debugimin?

MS: – Debugimi kryesisht ka ndodhur pĂ«rmes testeve. Nuk kemi pĂ«rdorur asnjĂ« debagger, GOP.

P: – Mund tĂ« ktheni sklin ku Ă«shtĂ« implementuar funksioni Publish? A ju duken emrat e variablave me njĂ« shkronjĂ« tĂ« çuditshĂ«m?

MS: – Jo. Ata kanĂ« njĂ« fushĂ« tĂ« mjaftueshme "tĂ« ngushtĂ«" shikimi. Nuk pĂ«rdoren askund tjetĂ«r, pĂ«rveç kĂ«tu (pĂ«rveç brendĂ«sisĂ« sĂ« kĂ«saj klase), dhe Ă«shtĂ« shumĂ« kompakte – zĂ« vetĂ«m 7 rreshta.

P: – Duket paksa jo intuitiv...

MS: – Jo-jo, kjo Ă«shtĂ« njĂ« kod i vĂ«rtetĂ«! Nuk Ă«shtĂ« çështje stili. ËshtĂ« thjesht njĂ« klasĂ« utilitare, shumĂ« e vogĂ«l – vetĂ«m 3 fusha brenda klasĂ«s...

Mikhail Salosin. Golang Meetup. Përdorimi i Go në backend-in e aplikacionit «Smotri+»

MS: – NĂ« thelb, tĂ« gjitha ato tĂ« dhĂ«na qĂ« sinkronizohen me klientĂ«t (ndeshjet sezonale, lojtarĂ«t), nuk ndryshojnĂ«. NĂ« thelb, nĂ«se do tĂ« bĂ«jmĂ« njĂ« sport tjetĂ«r, ku do tĂ« jetĂ« e nevojshme tĂ« ndryshojmĂ« ndeshjen, do ta parashikojmĂ« thjesht nĂ« versionin e ri tĂ« klientit, ndĂ«rsa versionet e vjetra tĂ« klientit do tĂ« bllokohen.

P: – A ka ndonjĂ« paketĂ« tĂ« jashtme pĂ«r menaxhimin e varĂ«sive?

MS: – Ne kemi pĂ«rdorur go dep.

P: – NĂ« temĂ«n e referatit kishte diçka pĂ«r video, por nuk ka nĂ« referat.

MS: – Jo, unĂ« nuk kam asgjĂ« nĂ« temĂ«n time pĂ«r video. Quhet "Shiko+" – ashtu e quajnĂ« aplikacionin.

P: – TĂ« keni thĂ«nĂ« se transmetohet pĂ«r klientĂ«t?..

MS: – Me video streaming nuk merreshim. Kjo e bĂ«nte plotĂ«sisht "Megafoni". Po, nuk thashĂ« se aplikacioni Ă«shtĂ« nga Megafoni.

MS: – Go – pĂ«r dĂ«rgimin e tĂ« gjitha tĂ« dhĂ«nave – pĂ«r llogarinĂ«, pĂ«r ngjarjet e ndeshjes, statistikĂ«n
 Go – Ă«shtĂ« krejtĂ«sisht backend pĂ«r aplikacionin. Klienti duhet tĂ« dijĂ« se cila lidhje tĂ« pĂ«rdorĂ« pĂ«r lojtarin, nĂ« mĂ«nyrĂ« qĂ« pĂ«rdoruesi tĂ« mund tĂ« shikojĂ« ndeshjen. Ne kemi lidhje pĂ«r video dhe transmetime, qĂ« janĂ« pĂ«rgatitur.

Luaj videon

Pak reklamĂ« 🙂

Faleminderit që po qëndroni me ne. Ju pëlqen artikujt tanë? Doni të shihni më shumë materiale interesante? Na mbështesni duke bërë një porosi ose duke rekomanduar tek miqtë tuaj, VPS cloud për zhvillues nga $4.99, një analog unik i serverëve entry-level që e kemi shpikur për Ju: E gjithë e vërteta në lidhje me VPS (KVM) E5-2697 v3 (6 Bërthama) 10GB DDR4 480GB SSD 1Gbps nga $19 ose si ta ndajmë saktësisht serverin? (opcionet me RAID1 dhe RAID10, deri në 24 bërthama dhe deri në 40GB DDR4 janë të disponueshme).

Dell R730xd dyfish mĂ« i lirĂ« nĂ« qendĂ«r tĂ« tĂ« dhĂ«nave Equinix Tier IV nĂ« Amsterdam? VetĂ«m te ne 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB nga $199 nĂ« HolandĂ«! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — nga $99! Lexoni rreth Si tĂ« ndĂ«rtoni njĂ« infrastrukturĂ« tĂ« klasĂ«s korporative me pĂ«rdorimin e serverĂ«ve Dell R730xd E5-2650 v4 me çmim 9000 euro pĂ«r pak para?

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster