Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Alexey Naidenov, CEO ITooLabs, bi zimanê bernamesaziyê Go (Golang) behsa pêşxistina platformeke telekomunîkasyonê ji bo operatorên telekomê dike. Alexey di heman demê de ezmûna xwe ya danîn û xebitandina platformê li yek ji mezintirîn operatorên têlefonê yên Asyayî, ku platform bikar anî ji bo peydakirina karûbarên posta deng (VoiceMail) û Virtual PBX (Cloud PBX) parve dike.

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Alexey Naydenov (li vir - AN): - Silav hemû! Navê min Alexey Naidenov e. Ez derhênerê ITooLabs im. Beriya her tiştî ez dixwazim bersivê bidim ka ez li vir çi dikim û çawa hatim vir.

Ger hûn li Bazara Bitrix24 (beşa "Telefonî") mêze bikin, wê hingê 14 serlêdan û 36 ku li wir in (40%) em in:

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Bi rastî, ev operatorên hevkarên me ne, lê li pişt van hemî platforma me ye (Platforma wekî Karûbar) - ya ku em ji wan re bi pereyek piçûk difroşin. Bi rastî, ez dixwazim li ser pêşveçûna vê platformê û çawa em hatin Go biaxivim.

Hejmarên platforma me niha ev in:

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

44 operatorên hevkar, tevî MegaFon. Bi gelemperî, em hez dikin ku biçin serpêhatiyan, û em bi rastî gihîştina 100 mîlyon aboneyên 44 operatorên li vir li Rûsyayê hene. Ji ber vê yekê, heke kesek hin ramanên karsaziyê hebin, em her gav kêfxweş in ku guh bidin wan.

  • 5000 pargîdaniyên bikarhêner.
  • Bi tevahî 20 aboneyên. Hemî b000b ye - em tenê bi pargîdaniyan re dixebitin.
  • Di nava rojê de 300 bang di deqîqeyê de.
  • Sala borî 100 mîlyon deqîqeyên bangê (me pîroz kir). Ev bêyî girtina muzakereyên navxweyî yên li ser platforma me ne.

Çawa dest pê kir?

Merivên rast çawa dest bi çêkirina platforma xwe dikin? Divê em her weha bidin ber çavan ku me dîrokek pêşkeftina "karsaziya hişk" hebû, û tewra di dema herî rast a salê de ji bo pargîdaniyek! Dema ku hûn werin ba xerîdar û bibêjin: "Pêdiviya me bi çend serverên din heye." Û xerîdar: “Erê, pirs nîne! Di rakê de dehek me heye.

Ji ber vê yekê me Oracle, Java, WebSphere, Db2 û her tiştî kir. Ji ber vê yekê, me, bê guman, çareseriyên firoşkar ên çêtirîn girtin, wan yek kirin û hewl da ku em jê derxînin. Bi tena serê xwe dilîstin. Ew ê bibe destpêkek wusa navxweyî.

Her tişt di sala 2009 de dest pê kir. Ji sala 2006-an vir ve, em ji nêz ve di nav biryarên operatoran de, bi rengekî an din, beşdar bûne. Me gelek PBX-yên virtual yên xwerû çêkir (mîna ya ku em nuha li ser fermanê hene): me nihêrî, me biryar da ku ew baş e, û me biryar da ku em destpêkek hundurîn bikin.

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

VMWare bistînin. Ji ber ku em bi tena serê xwe dimeşiyan, neçar ma ku tavilê dev ji firoşkarê xweş Storage berdin. Em hemî li ser wan dizanin: ku divê soz bi 3-yê bêne dabeş kirin, û lêçûn divê bi 10-ê were zêdekirin. Ji ber vê yekê, me DirDB û hwd.

Piştre dest bi mezinbûnê kir. Karûbarê fatûreyê li vê hate zêdekirin, ji ber ku platform êdî nikarîbû li ber xwe bide. Dûv re servera fatûreyê ji MySQL çû Mongo. Wekî encamek, me çareseriyek xebatê wergirt ku hemî bangên ku diçin wir pêvajoyê dike:

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Lê li cîhek hundur, heman hilbera firoşkar dizivire - ya sereke, navokî, ya ku me carekê girt. Nêzîkî dawiya sala 2011-an, me bi xwe fêm kir ku ji bo me ya sereke, bê guman, dê ev hilbera taybetî be - em ê têkevin nav wê. Me dîwarek li pêş xwe dît, ku em bi galopê tevdigeriyan, dema ku xerîdar dimeşiyan, lê zêde bû.
Li gorî vê divê em tiştekî bikin. Bê guman, me li ser hilberên cihêreng - hem çavkaniya vekirî û hem jî yên firoşkar gelek lêkolîn kir. Ez ê niha li ser vê yekê nesekinim - mesele ne ev e. Vegera paşîn a ku me li ser fikirîn çêkirina platforma xwe bû.

Di dawiyê de, em hatin vê vebijarkê. Çima? Ji ber ku hemî hilber û hilberên çavkaniya vekirî 10 sal berê ji bo çareserkirina pirsgirêkan hatine çêkirin. Welê, heke 10-salî ye, û hin bêtir! Hilbijartin ji me re eşkere bûye: an em xatir ji ramana xwe ya mezin a karûbarek îdeal (ji bo hevkar, operator û xwe) dibêjin, an jî em tiştek ji xwe re dikin.

Me biryar da ku em tiştek cûda bikin!

Pêdiviyên Platformê

Ger hûn ji bo demek dirêj tiştek bikin (hûn hilbera yekî din îstismar dikin), wê hingê fikir hêdî hêdî di serê we de çêdibe: ez ê çawa bi xwe bikim? Ji ber ku em hemî di pargîdaniyê de bernameçêker in (ji xeynî firoşkaran, ne-bernameçêker tune), daxwazên me ji demek dirêj ve hatine çêkirin, û ew eşkere bûn:

  1. Leza pêşveçûna bilind. Berhema firoşkar a ku em êşandin, di serî de li gorî me nedihat ji ber ku her tişt demek dirêj û hêdî hêdî dimeşiya. Me zû dixwest - gelek ramanên me hebûn! Hîn jî gelek ramanên me hene, lê paşê navnîşa ramanan wusa bû ku deh sal li pêş xuya dikir. Niha tenê salek e.
  2. Bikaranîna herî zêde ya hesinê pir-core. Ev jî ji bo me girîng bû, ji ber ku me dît ku tenê dê zêdetir û bêtir core hebin.
  3. pêbaweriya bilind. Yê ku em jî giriyan.
  4. Tolerasyona xeletiya bilind.
  5. Me xwest em bi pêvajoya serbestberdana rojane bi dawî bibin. Ji bo vê jî pêwîstiya me bi hilbijartina ziman hebû.

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Li gorî vê yekê, ji pêdiviyên berhemê ku me ji xwe re pêşkêş kiriye, pêdiviya ziman bi awayekî zelal û mentiqî mezin dibe.

  1. Ger em ji bo pergalên pir-core piştgirî dixwazin, wê hingê ji bo darvekirina paralel pêdivî bi piştgirî heye.
  2. Ger hewcedariya me bi leza pêşkeftinê hebe, pêdivî bi zimanek heye ku piştgirî bide pêşkeftina pêşbaziyê, bernameya pêşbaziyê. Ger kesek bi cûdahiyê re rûbirû nebûbe, wê hingê ew pir hêsan e:
    • bernamesaziya paralel li ser wê yekê ye ku çawa du mijarên cûda li ser bingehên cûda dimeşin;
    • darvekirina hevdem, bi taybetî piştgirîya hevdemî, li ser wê yekê ye ku ziman (an dema xebitandinê, çi dibe bila bibe) çawa dibe alîkar ku hemî tevliheviya ku ji darvekirina paralel tê veşêre.
  3. îstîqrara bilind. Eşkere ye ku, me hewceyê komekê bû, û ew ji ya ku me li ser hilbera firoşkar hebû çêtir bû.

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Bi rastî gelek vebijarkên me tunebûn, ger tê bîra we. Ya yekem, Erlang - em jê hez dikin û pê dizanin, ew bijareya min a kesane, kesane bû. Ya duyemîn, Java ne Java ye, lê bi taybetî Scala ye. Ya sisiyan, zimanê ku wê demê me qet nizanibû - Go. Wê hingê ew nû xuya bû, bi rastî, ew jixwe nêzîkê du salan hebû, lê hîn nehatibû berdan.

Têkçû Go!

Dîroka Go

Me li ser wê platformek çêkir. Ez ê hewl bidim ku çima şirove bikim.

Kurtîyek Dîroka Go. Di sala 2007-an de dest pê kir, di 2009-an de vebû, guhertoya yekem di 2012-an de derket (ango, me hê berî derketina yekem dest bi xebatê kir). Destpêker Google bû, ku dixwest, wekî ku ez guman dikim, Java-yê biguhezîne.

Nivîskarên pir navdar in:

  • Ken Thomson, ku li pişt Unix bû, UTF-8 îcad kir, li ser pergala Plan 9 xebitî;
  • Rob Pike, ku UTF-8 bi Ken re sêwirand, di heman demê de li ser Plan 9, Inferno, Limbo li Bell Labs xebitî;
  • Robert Gizmer, ku em wî nas dikin û jê hez dikin ji bo dahênana Berhevkarê Java HotSpot û xebata li ser jeneratorê di V8 de (wergêrê Javascriptê ya Google);
  • Zêdetirî 700 beşdar, di nav wan de hin pêlên me jî hene.

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Bi awirek here

Em dibînin ku ziman kêm-zêde hêsan û têgihîştî ye. Tîpên me yên eşkere hene: di hin rewşan de ew hewce ne ku bêne diyar kirin, di hinên din de ew ne (tê wateya ku celeb her weha têne destnîşan kirin).

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Tê dîtin ku ravekirina avahiyan modê ye. Tê dîtin ku têgîna nîşangirek me heye (ku stêrk lê ye). Tê dîtin ku piştgirîyek taybetî ji bo ragihandina destpêkirina rêz û rêzikên hevgirtî heye.

Bi qasî tê fêm kirin - hûn dikarin bijîn. Hewl didin ku binivîsin Silav, cîhan:

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Em çi dibînin? Ev hevoksaziya C-yê ye, nîvcolon vebijarkî ye. Ew dikare ji bo du rêzan veqetînerek be, lê tenê heke ev du avahî bin ku tam li ser heman xetê ne.

Em dibînin ku kelûpelên di strukturên kontrolê de (li ser xeta 14-an) vebijarkî ne, lê yên kulîlk her gav hewce ne. Em dibînin ku nivîsandin statîk e. Tim di pir rewşan de tê xuyang kirin. Ev mînak ji ya adetî Hello, cîhan hinekî tevlihevtir e - tenê ji bo ku nîşan bide ku pirtûkxaneyek heye.

Wekî din em çi girîng dibînin? Kod di pakêtan de tê organîze kirin. Û ji bo ku hûn pakêtê di koda xwe de bikar bînin, hûn hewce ne ku wê bi karanîna rêbernameya import-ê têxin - ev jî girîng e. Em dest pê dikin - ew dixebite. Ecêb!

Ka em tiştek tevlihevtir biceribînin: Silav, cîhan, lê naha ew serverek http ye. Em li vir çi balkêş dibînin?

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Pêşîn, fonksiyon wekî pîvanek tevdigere. Ev tê wê wateyê ku fonksiyona me "hemwelatiyek pola yekem" e û hûn dikarin bi şêwazek fonksiyonel bi wê re gelek tiştên balkêş bikin. Em ya din ya nediyar dibînin: Rêbernameya importê rasterast li depoya GitHub vedigire. Rast e, wisa ye - ji bilî vê, divê wisa bê kirin.

Di Go de, nasnameya gerdûnî ya pakêtê url-ya depoya wê ye. Karûbarek taybetî ya Goget heye ku ji bo hemî pêwendiyan diçe, wan dakêşîne, saz dike, wan berhev dike û heke hewce bike wan ji bo karanîna amade dike. Di heman demê de, Goget di derbarê html-meta de dizane. Li gorî vê yekê, hûn dikarin pelrêçek http bihêlin, ku dê lînkên depoya weya taybetî hebe (wek mînak em dikin).

Wekî din em çi dibînin? Http û Json di pirtûkxaneya birêkûpêk de. Eşkere ye ku hundurîn - refleks heye, ku divê di şîfrekirinê / json de were bikar anîn, ji ber ku em bi tenê hin tiştên keyfî şûna wê digirin.

Em wê dimeşînin û dibînin ku 20 rêzikên koda kêrhatî yên me hene ku barkirina navînî ya makîneyê (li ser makîneya ku lê dixebitîne) berhev dike, dimeşîne û dide.
Ya ku em tavilê dikarin li vir bibînin çi girîng e? Ew di yek binaryek statîk (buinary) de berhev dike. Vê binaryê qet pêwendiyek tune, pirtûkxane tune! Ew dikare li her pergalê were kopî kirin, tavilê bixebite, û ew ê bixebite.

Em diçin.

Go: rêbaz û navber

Go rêbazên hene. Hûn dikarin ji bo her celebek xwerû rêbazek ragihînin. Wekî din, ev ne pêdivî ye ku avahiyek e, lê dibe ku navek celebek be. Hûn dikarin navekî ji bo N32 ragihînin û ji bo ku ew tiştek bikêr bikin rêbazan binivîsin.

Û ev e cihê ku em ji bo cara yekem dikevin nav gêjbûnekê ... Derket holê ku Go bi vî rengî dersên xwe tune. Yên ku Go dizanin dikarin bibêjin ku tevlêbûna celebê heye, lê ev bi tevahî cûda ye. Zûtir pêşdebir wê wekî mîras bifikire, çêtir e. Di Go de ders nîn in û mîras jî tune.

Pirs! Pargîdaniya nivîskarên ku ji hêla Google ve têne rêber kirin çi da me da ku tevliheviya cîhanê nîşan bide? Têkilî ji me re hatine dayîn!

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

Têkiliyek celebek taybetî ye ku dihêle hûn rêbazên hêsan, îmzeyên rêbazan binivîsin. Zêdetir, her celebek ku ji bo van rêbazan hebin (bi darve kirin) dê bi vê navberê re têkildar be. Ev tê vê wateyê ku hûn dikarin bi tenê fonksiyona têkildar ji bo celebek, ji bo celebek din (ya ku bi wî celebê navbeynê re têkildar binivîsin). Dûv re, guhêrbarek ji celebê vê navberê ragihînin û yek ji van tiştan jê re destnîşan bikin.

Ji bo temaşevanên hişk, ez dikarim bibêjim ku ev guhêrbar dê bi rastî du nîşangiran pêk bîne: yek ji daneyan re, ya din tabloyek diyarkerek taybetî ya ku ji vê celebê taybetî re, ji navgîniya vî rengî re taybetî ye. Ango, berhevkar tabloyên weha diyarkeran di dema girêdanê de çêdike.

Û, bê guman, nîşaneyên ku di Go de betal bibin hene. Peyva navberê {} (bi du bendikên çîçek) guhêrbarek e ku dihêle hûn di prensîbê de îşaret bi her tiştî bikin.
Heya nuha, her tişt bi rêkûpêk e, her tişt nas e. Tiştekî sosret nîne.

Go: gorûtine

Naha em hatine tiştê ku em jê re eleqedar in: pêvajoyên sivik - di termînolojiya Go de goroutines (goroutines).

Alexey Naidenov. ITooLabs. Doza pêşkeftinê li ser platforma têlefonê Go (Golang). Beş 1

  1. Pêşîn, ew bi rastî sivik in (kêmtir ji 2 Kb).
  2. Ya duyemîn jî, lêçûna çêkirina gorutînek wusa neguhêz e: hûn dikarin di çirkeyê de hezar ji wan biafirînin - dê tiştek neqewime.
  3. Ew ji hêla plansaziya xwe ve têne xizmet kirin, ku bi tenê kontrolê ji yek goroutine veguherîne ya din.
  4. Di vê rewşê de, kontrol di rewşên jêrîn de têne veguhestin:
    • heke gotinek go peyda bibe (heke gorutin dest bi gorutîna din bike);
    • ger banga astengkirina Ketin/Derketin çalak be;
    • ger komkirina çopê were destpêkirin;
    • heke hin operasyon bi kanalan re were destpêkirin.

Ango, gava ku bernameyek Go li ser komputerek tê xebitandin, ew hejmara navokên pergalê nas dike, bi qasî ku hewce dike dest pê dike (di pergalê de çend navik hene, an we çend jê re gotiye). Li gorî vê yekê, plansaz dê van mijarên darvekirinê yên sivik li ser van hemî mijarên pergala xebitandinê di her navikê de bimeşîne.

Divê were zanîn ku ev awayê herî bikêrhatî ye ji bo karanîna hesin. Ji bilî tiştên ku me nîşan da, em gelek tiştên din dikin. Mînakî, em pergalên DPI-yê çêdikin ku destûrê didin 40 gigabitan di yek yekîneyê de (li gorî tiştê ku di van rêzan de diqewime ve girêdayî ye).

Li wir, tewra berî Go, me ji ber vê sedemê tam heman pilanê bikar anî: ji ber ku ew dihêle hûn cîhê cacheya pêvajoyê hilînin, bi girîngî hejmara guheztinên çarçoweya OS-ê kêm bikin (ku di heman demê de demek pir dirêj digire). Ez dubare dikim: ev riya herî bi bandor a karanîna hesin e.

Ev mînaka 21-xêza hêsan mînakek e ku bi tenê echo-server dike. Di heman demê de, bala xwe bidin ku fonksiyona xizmetê pir hêsan e, ew xêz e. Ne gazîkirin in, ne hewce ye ku meriv xwe biêşîne û bifikire... Hûn tenê bixwînin û binivîsin!

Di heman demê de, heke hûn bixwînin û binivîsin, divê ew bi rastî asteng bike - dema ku darvekirin dîsa gengaz dibe ev gorutîn bi hêsanî tê rêz kirin û ji hêla plansaz ve tê girtin. Ango, ev koda hêsan dikare wekî serverek echo ji bo bi qasî girêdanên ku OS-ya li ser vê makîneyê destûrê bide tevbigere.

Di demek nêzîk de dê berdewam bike...

Hin reklam 🙂

Spas ji bo ku hûn bi me re bimînin. Ma hûn ji gotarên me hez dikin? Ma hûn dixwazin naveroka balkêştir bibînin? Piştgiriya me bikin bi danîna fermanek an pêşniyarkirina hevalan, ewr VPS ji bo pêşdebiran ji 4.99 $, analogek bêhempa ya pêşkêşkerên asta têketinê, ku ji hêla me ve ji bo we hatî vedîtin: Tevahiya rastiyê di derbarê VPS (KVM) E5-2697 v3 (6 Cores) 10 GB DDR4 480 GB SSD 1Gbps ji 19 $ an çawa serverek parve dike? (bi RAID1 û RAID10, heta 24 core û heya 40 GB DDR4 peyda dibe).

Dell R730xd 2x erzantir li navenda daneya Equinix Tier IV li Amsterdam? Tenê li vir 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ji 199$ li Hollanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ji $99! Li ser bixwînin Meriv çawa pargîdaniya binesaziyê ava dike. pola bi karanîna serverên Dell R730xd E5-2650 v4 bi nirxek 9000 euro ji bo quruşek?

Source: www.habr.com

Add a comment