Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Alexey Naydenov, CEO ITooLabs, inotaura nezvekuvandudzwa kwenzvimbo yekufambisa nhare yevashandisi venhare mumutauro weGo (Golang). Alexey anogoverawo ruzivo rwake mukutumira nekushanda kwepuratifomu mune imwe yeAsia telecom operators, iyo yakashandisa chikuva kupa izwi mail masevhisi (VoiceMail) uye Virtual PBX (Cloud PBX).

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Alexey Naydenov (pano - AN): - Mhoroi mose! Zita rangu ndinonzi Alexey Naydenov. Ini ndiri director weItooLabs. Chekutanga ndinoda kupindura zvandiri kuita pano uye kuti ndasvika sei pano.

Kana iwe ukatarisa iyo Bitrix24 Musika (chikamu "Telephony"), ipapo gumi nemana maapplication uye makumi matatu nematanhatu aripo (14%) isu:

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Kunyanya, ava ndivo vatinoshanda navo, asi kuseri kwezvose izvi ipuratifomu yedu (Platform seSevhisi) - izvo zvatinovatengesera nepeni diki. Chaizvoizvo, ndinoda kutaura nezve kuvandudzwa kwepuratifomu iyi uye kuti takauya sei kuGo.

Nhamba dzepuratifomu yedu izvozvi:

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

44 vanobatana navo, kusanganisira Megafon. Kazhinji kutaura, isu tinoda chaizvo kuenda kune akasiyana adventures, uye isu tine mukana chaiwo kune zana remamiriyoni vanyoreri ve100 vanoshanda pano muRussia. Naizvozvo, kana paine chero munhu ane chero mazano ebhizinesi, isu tichagara tichifara kuvateerera.

  • 5000 makambani evashandisi.
  • 20 vanyoreri vese. Izvi zvese b000b - isu tinoshanda chete nemakambani.
  • 300 mafoni paminiti mukati mezuva.
  • 100 miriyoni yekufona maminetsi gore rapfuura (takapemberera). Izvi hazvitarise nhaurirano dzemukati dziripo papuratifomu yedu.

Zvakatanga sei?

Ko iwo madhiri chaiwo anotanga sei kugadzira chikuva chavo? Isu tinofanirawo kufunga kuti isu tine nhoroondo ye "hardcore bhizinesi" budiriro, uye kunyangwe panguva chaiyo yegore yebhizinesi! Yakanga iri nguva iyoyo yekufara paunouya kumutengi woti: "Tinoda mamwe maseva akati wandei." Uye mutengi: "Hapana mubvunzo! Tine gumi muraki."

Saka takaita Oracle, Java, WebSphere, Db2 uye zvese izvo zvinhu. Naizvozvo, isu takatora, hongu, mhinduro dzakanakisa dzemutengesi, takadzibatanidza uye takaedza kubvisa nayo. Takafamba zvedu. Uku kungava kutanga kwemukati kwakadaro.

Zvese izvi zvakatanga muna 2009. Kubva 2006, tave takabatana zvakanyanya mumhinduro dzevashandisi, neimwe nzira kana imwe. Isu takagadzira akati wandei echinyakare maPBX (seya yatinayo ikozvino pakurongeka): takaitarisa, tikafunga kuti yaive yakanaka, uye takafunga kutanga yemukati yekutanga.

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Takatora VMWare. Sezvo taive tiri toga, taifanira kubva tasiya inotonhorera yekutengesa Storage. Tinoziva zvose pamusoro pavo: izvo zvipikirwa zvinofanira kugoverwa ne3, uye mari inofanira kuwedzerwa ne 10. Ndicho chikonzero vakaita DirDB nezvimwe zvakadaro.

Yakabva yatanga kukura. Sevhisi yekubhadharisa yakawedzerwa kune izvi nekuti chikuva hachichagona kugona. Ipapo sevha yekubhadhara kubva kuMySQL yakatamira kuMongo. Nekuda kweizvozvo, takawana mhinduro inoshanda iyo inogadzirisa mafoni ese anoenda ikoko:

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Asi pane imwe nzvimbo ipapo, mukati, icho chimwechete chemutengesi chigadzirwa chiri kutenderera - chikuru, nyukireya, yatakambotora. Mukupera kwegore ra2011, takaona kuti bhodhoro guru kwatiri, hongu, raizova ichi chigadzirwa - isu taizomhanya machiri. Takaona kumberi kwedu kuine mudhuri kwatakabva tamhanyira maclients achiuya.
Naizvozvo, taifanira kuita chimwe chinhu. Ehe, takaita tsvakiridzo yakawanda pane dzakasiyana zvigadzirwa - zvese zvakavhurika sosi uye vatengesi. Ini handisi kuzogara pane izvi izvozvi - handizvo zvatiri kutaura nezvazvo. Sarudzo yekupedzisira yekudzokera kumashure yatakafunga yaive kugadzira yedu puratifomu.

Pakupedzisira, takasvika pane iyi sarudzo. Sei? Nekuti zvese zvemutengesi uye zvakavhurika sosi zvigadzirwa zvakaitwa kugadzirisa matambudziko aive nemakore gumi. Zvakanaka, kana makore gumi, uye mamwe akawanda! Sarudzo yakava pachena kwatiri: tingave tichionekana kune yedu yakanaka zano rebasa rakanakira (kune vanobatana, vanoshanda uye isu pachedu), kana isu tinoita chimwe chinhu chedu.

Takasarudza kuita chimwe chinhu chedu pachedu!

Platform zvinodiwa

Kana wanga uchiita chimwe chinhu kwenguva yakareba (uchishandisa chigadzirwa chemumwe munhu), ipapo pfungwa inoumba zvishoma nezvishoma mumusoro mako: ndaizozviita sei ini? Sezvo isu tose tiri vagadziri vepurogiramu mukambani (kunze kwevatengesi, hapana vasiri mapurogiramu), zvatinoda zvakagadziridzwa kare kare, uye zvaive zvakajeka:

  1. Kukurumidza kusimudzira. Chigadzirwa chemutengesi chakatitambudza chakanga chisingagutsikani, kutanga kune zvose, nokuti zvinhu zvose zvakabuda kwenguva refu uye zvishoma nezvishoma. Taida nekukurumidza - isu taive nemazano akawanda! Tichiri nemazano akawanda, asi zvino rondedzero yemazano yaive yekuti zvaiita senge makore gumi pamberi. Iye zvino kwegore chete.
  2. Kunyanya kushandiswa kwe-multi-core iron. Izvi zvakatikosherawo nekuti takaona kuti paizongove nemacores akawanda.
  3. Kuvimbika kwepamusoro. Chimwe chinhu chataichemawo nacho.
  4. Kunyanya kupikisa kukundikana.
  5. Taida kupedzisa nehurongwa hwekuburitswa kwezuva nezuva. Nokuda kweizvi taida chisarudzo chomutauro.

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Saizvozvo, kubva kune zvinodiwa zvechigadzirwa chatakazvigadzirira isu, zvinodiwa zvemutauro zvinokura nenzira inonzwisisika.

  1. Kana isu tichida rutsigiro rwema-multi-core masisitimu, saka tinoda rutsigiro rwekuita kwakafanana.
  2. Kana tichida kukurumidza kusimudzira, tinoda mutauro unotsigira makwikwi ekusimudzira, makwikwi ehurongwa. Kana paine munhu asina kusangana nemusiyano, zviri nyore:
    • Parallel programming ndeye kuti tambo mbiri dzakasiyana dzinoitwa sei pamacores akasiyana;
    • Kuitwa panguva imwe chete, kana zvakanyanya, kutsigirwa kwemari, ndezvekuti mutauro (kana kuti nguva yekumhanya, hazvina basa) inobatsira kuvanza kuomarara kwese kunobva pakuitwa kwakafanana.
  3. Kugadzikana kwepamusoro. Zviripachena, taida sumbu, uye iri nani pane yataive nayo pachigadzirwa chemutengesi.

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Isu takanga tisina chaizvo sarudzo dzakawanda kudaro, kana uchirangarira. Chekutanga, Erlang - isu tinozvida uye tinozviziva, yaive yangu pachangu, yandinoda. Chechipiri, Java haisi kunyange Java, asi zvakananga Scala. Chechitatu, mutauro watakanga tisingazive panguva iyoyo zvachose - Enda. Yakanga ichangobva kuoneka panguva iyoyo, kana kuti, yakanga yatovapo kweanenge makore maviri, asi yakanga isati yasunungurwa.

Enda wakakunda!

Nhoroondo yeGo

Takagadzira chikuva pairi. Ndichaedza kutsanangura chikonzero nei.

Nhoroondo Pfupi yeGo. Yakatanga muna 2007, yakavhurwa muna 2009, shanduro yekutanga yakabudiswa muna 2012 (ndiko kuti, takatanga kushanda kunyange tisati tasunungurwa). Iye wekutanga aive Google, yaida kutsiva, sezvandinofungidzira, Java.

Vanyori vanozivikanwa zvikuru:

  • Ken Thomson, uyo akanga ari shure kweUnix, akagadzira UTF-8, akashanda paChirongwa 9 system;
  • Rob Pike, uyo akagadzira UTF-8 naKen, akashandawo paChirongwa 9, Inferno, Limbo paBell Labs;
  • Robert Giesmer, watinoziva uye watinoda nekugadzira Java HotSpot Compiler uye nebasa rake pajenareta muV8 (Google's Javascript muturikiri);
  • Uye pamusoro pe700 vanopa, kusanganisira mamwe mapeche edu.

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Go: tanga watarisa

Tinoona kuti mutauro wacho uri nyore uye unonzwisisika. Tine mhando dzakajeka: mune dzimwe nguva dzinoda kuziviswa, mune dzimwe hadzina kudikanwa (izvi zvinoreva kuti mhando dzinofananidzwa neimwe nzira kana imwe).

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Zvinogona kuonekwa kuti ifashoni kurondedzera zvimiro. Zvinogona kuonekwa kuti isu tine pfungwa yekunongedza (apo pane asterisk). Zvinogona kuonekwa kuti kune tsigiro yakakosha yekuzivisa kutanga kwearrays uye associative arrays.

Zvinenge zvakajeka - unogona kurarama. Ngatiedzei kunyora Mhoro, nyika:

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Chii chatinoona? Iyi ndiyo C-yakafanana syntax, iyo semicolon ndeyekusarudza. Inogona kuve yekuparadzanisa mitsetse miviri, asi chete kana izvi zviri zviviri zvivakwa zviri pamutsetse mumwe chete.

Isu tinoona kuti mabhureki muzvimiro zvekutonga (mumutsara wechigumi nemana) ndezvasarudzo, asi mabhureki akamonana anogara achidiwa. Tinoona kuti kutaipa kwakamira. Tim inotorwa kunze kazhinji yenguva. Uyu muenzaniso wakaoma zvishoma pane wakajairika Mhoro, nyika - kungoratidza kuti kune raibhurari.

Chii chimwe chatinoona chakakosha? Iyo kodhi yakarongwa kuita mapakeji. Uye kuti ushandise pasuru mune yako kodhi, iwe unofanirwa kuipinza kunze uchishandisa iyo yekutumira kuraira - izvi zvakakoshawo. Tinoivhura - inoshanda. Hukuru!

Ngatiedze chimwe chinhu chakanyanya kuomarara chinotevera: Mhoro, nyika, asi ikozvino yave http server. Chii chatinoona chinofadza pano?

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Chekutanga, basa rinoshanda separameter. Izvi zvinoreva kuti basa redu ndere "first class citizen" uye iwe unogona kuita zvinhu zvakawanda zvinonakidza nazvo nenzira inoshanda. Tevere tinoona chimwe chinhu chisingatarisirwi: iyo yekuendesa dhairekitori inobatanidza zvakananga kuGitHub repository. Ndizvozvo, ndizvo zvazviri - uyezve, ndiyo nzira iyo inofanira kuitwa.

MuGo, chinozivisa chepasirese chepakeji ndiyo url yenzvimbo yayo. Iko kune yakakosha Goget yekushandisa iyo inotora zvese zvinotsamira, kurodha pasi, kuzviisa, kuaunganidza uye kuzvigadzirira kuti zvishandiswe kana zvichidikanwa. Panguva imwecheteyo, Goget anoziva nezve html-meta. Saizvozvo, iwe unogona kuchengeta iyo http dhairekitori ichange iine zvinongedzo kune yako chaiyo repository (sezvatinoita, semuenzaniso).

Chii chimwe chatinoona? Http naJson muraibhurari yakajairika. Pane, zviripachena, introspection - kuratidza, iyo inofanirwa kushandiswa mukukodha/json, nekuti isu tinongotsiva chimwe chinhu chinopokana pairi.

Isu tinomhanya uye tinoona kuti isu tine kodhi inobatsira mumitsara makumi maviri, iyo inounganidza, inomhanya uye inoshuma yazvino avhareji mutoro wemuchina (pamuchina waunotanga).
Chii chimwe chakakosha chatinogona kuona ipapo ipapo? Iyo inounganidzwa kuita imwechete static binary (buinary). Iyi bhinari haina kutsamira zvachose, hapana maraibhurari! Unogona kuikopa kune chero system, imhanye nekukasira, uye ichashanda.

Ngatienderere mberi.

Enda: Nzira uye Interfaces

Kuenda kune nzira. Iwe unogona kuzivisa nzira yemhando ipi neipi yakasarudzika. Uyezve, izvi hazvisi hazvo chimiro, asi pamwe zita reimwe mhando. Iwe unogona kuzivisa zita reN32 uye kunyora nzira dzekuti iite chero chinhu chinobatsira.

Uye pano tinowira mukuputsika kwekutanga ... Zvinoitika kuti Go haina makirasi akadaro. Avo vanoziva Go vanogona kutaura kuti kune mhando yekubatanidzwa, asi ndicho chimwe chinhu zvachose. Nekukurumidza mugadziri anomira kufunga nezvayo senhaka, zviri nani. Iko hakuna makirasi muGo, uye hakuna nhaka zvakare.

Mubvunzo! Ko kambani yevanyori inotungamirwa neGoogle yakatipa chii kuratidza kuoma kwenyika? Vakatipa mainterfaces!

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

Iyo interface imhando yakakosha iyo inokutendera iwe kunyora nyore nzira, nzira masiginicha. Uyezve, chero mhando iyo nzira idzi dziripo (dzinoitwa) dzinoenderana neiyi interface. Izvi zvinoreva kuti iwe unogona kungotsanangura iro rinoenderana basa reimwe mhando, kune imwe (iyo inoenderana neiyo interface mhando). Tevere, zivisa shanduko yemhando yeiyi interface uye upe chero cheizvi zvinhu kwairi.

Kune vateveri vakaoma, ndinogona kutaura kuti shanduko iyi ichave iine zvinongedzo zviviri: imwe kune data, imwe kune yakakosha tafura yezvitsanangudzo, izvo zvinowanzoitika kune iyi chaiyo mhando, kune iyo interface yerudzi urwu. Ndiko kuti, muumbi anogadzira akadaro descriptor matafura panguva yekubatanidza.

Uye muGo, hongu, kune anonongedzera kuti ashaye. Izwi rekuti interface {} (rine mabrace maviri akamonana) izwi rinokutendera kuti unongedze kune chero chinhu mumusimboti.
Parizvino zvese zvakanaka, zvese zvakajairika. Hapana chinoshamisa.

Enda: goroutines

Iye zvino tasvika kune izvo zvatinofarira: maitiro akareruka - goroutines (goroutines) muGo terminology.

Alexey Naidenov. ITooLabs. Development kesi paGo (Golang) foni papuratifomu. Chikamu 1

  1. Chekutanga, iwo akareruka chaizvo (asingasviki 2 KB).
  2. Chechipiri, mari yekugadzira goroutine yakadaro haina basa: unogona kugadzira chiuru chazvo pasekondi - hapana chichaitika.
  3. Ivo vanoshumirwa neavo vanoronga, izvo zvinongotamisa kutonga kubva kune imwe goroutine kuenda kune imwe.
  4. Muchiitiko ichi, kutonga kunotamiswa mune zvinotevera zviitiko:
    • kana izwi rekuenda rikasangana (kana goroutine inotanga goroutine inotevera);
    • kana inovharira Kupinza/Kubuda kufona yakagoneswa;
    • kana kuunganidzwa kwemarara kukatanga;
    • kana kumwe kushanda nemachanera kwatangwa.

Ndokunge, pese kana chirongwa cheGo chichimhanya pakombuta, chinotarisa huwandu hwemacores muhurongwa, chinotangisa tambo dzakawanda sezvinodiwa (mangani macores ari musystem kana kuti mangani awakazviudza). Nekudaro, mugadziri achamhanyisa idzi tambo dzakareruka dzekuuraya pane ese aya ekushandisa system tambo mune yega yega.

Zvinofanira kucherechedzwa kuti iyi ndiyo nzira inoshanda kwazvo yekushandisa iron. Pamusoro pezvinoratidzwa, tinoita zvakawanda. Isu tinoita, semuenzaniso, maDPI masisitimu anobvumira imwe unit kushumira 40 gigabits (zvichienderana nezvinoitika mumitsara iyi).

Ikoko, kunyange tisati taenda, takashandisa hurongwa hwakafanana nekuda kwechikonzero ichi: nekuti inotibvumira kuchengetedza nzvimbo ye processor cache uye kuderedza zvakanyanya kuwanda kweOS mamiriro ekuchinja (izvo zvinotorawo nguva yakawanda). Ndinodzokorora: iyi ndiyo nzira inonyanya kushanda yekushandisa iron.

Iyi iri nyore 21 mutsara muenzaniso muenzaniso unongoita echo-server. Ndokumbira utarise kuti basa rekushandira rakanyanya nyore, rine mutsara. Iko hakuna callbacks, hapana chikonzero chekunetseka uye kufunga ... Iwe unongoverenga nekunyora!

Panguva imwecheteyo, kana iwe ukaverenga nekunyora, inofanirwa kuvharira - iyi goroutine inongoiswa mumutsara uye inotorwa neanoronga kana kuurayiwa kuchikwanisika zvakare. Ndokunge, iyi kodhi yakapfava inogona kuita senge echo sevha yekubatanidza kwakawanda sekubvumidzwa neOS pamushini iwoyo.

Ichaenderera mberi nekukurumidza...

Dzimwe ads πŸ™‚

Ndinokutendai nekugara nesu. Unoda zvinyorwa zvedu here? Unoda kuona zvimwe zvinonakidza zvemukati? Titsigire nekuisa odha kana kukurudzira kushamwari, Cloud VPS yevagadziri kubva kumadhora 4.99, yakasarudzika analogue yekupinda-level maseva, iyo yakagadzirwa nesu kuti iwe: Chokwadi chese nezveVPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps kubva pamadhora makumi maviri kana kugovera sevha? (inowanikwa neRAID1 uye RAID10, kusvika ku24 cores uye kusvika ku40GB DDR4).

Dell R730xd 2 nguva yakachipa muEquinix Tier IV data center muAmsterdam? Chete pano 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV kubva $199 muNetherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - kubva pamadhora makumi mapfumbamwe nemapfumbamwe! Verenga nezve Nzira yekuvaka Infrastructure Corp. kirasi nekushandiswa kweDell R730xd E5-2650 v4 maseva anokosha 9000 euros penny?

Source: www.habr.com

Voeg