Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Alexey Naidenov, CEO ITooLabs, naghisgot bahin sa pagpalambo sa plataporma sa telekomunikasyon alang sa mga operator sa telecom sa programming language nga Go (Golang). Gipaambit usab ni Alexey ang iyang kasinatian sa pag-deploy ug pag-operate sa plataporma sa usa sa pinakadako nga operator sa telecom sa Asia, nga migamit sa plataporma sa paghatag og voice mail (VoiceMail) ug Virtual PBX (Cloud PBX) nga mga serbisyo.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Alexey Naydenov (pagkahuman niini - AN): - Kumusta tanan! Ako si Alexey Naidenov. Ako ang direktor sa ITooLabs. Una sa tanan, gusto nako nga tubagon kung unsa ang akong gibuhat dinhi ug kung giunsa ko nahuman dinhi.

Kung imong tan-awon ang Bitrix24 Marketplace (seksyon "Telephony"), nan 14 ka aplikasyon ug 36 nga naa didto (40%) kami:

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Sa mas tukma, kini ang among mga kauban nga operator, apan sa luyo niining tanan mao ang among plataporma (Platform as a Service) - kung unsa ang among gibaligya kanila sa usa ka gamay nga sentimos. Sa tinuud, gusto nako nga hisgutan ang bahin sa pag-uswag sa kini nga plataporma ug kung giunsa namo pag-adto sa Go.

Ang mga numero alang sa among plataporma karon mao ang:

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

44 ka partner operators, lakip ang MegaFon. Sa kinatibuk-an nga pagsulti, ganahan kami nga magpadayon sa mga panimpalad, ug kami adunay access sa 100 milyon nga mga subscriber sa 44 nga mga operator dinhi sa Russia. Busa, kung adunay usa nga adunay pipila ka mga ideya sa negosyo, kanunay kaming malipayon nga mamati kanila.

  • 5000 nga mga kompanya sa tiggamit.
  • 20 subscribers sa kinatibuk-an. Kini tanan b000b - nagtrabaho ra kami sa mga kompanya.
  • 300 ka tawag matag minuto sa adlaw.
  • 100 milyon nga mga minuto sa pagtawag sa miaging tuig (nagsaulog kami). Kini sa walay pagtagad sa mga internal nga negosasyon nga anaa sa atong plataporma.

Giunsa kini pagsugod?

Giunsa ang husto nga mga dudes magsugod sa paghimo sa ilang kaugalingon nga plataporma? Kinahanglan usab nga tagdon nga kami adunay kasaysayan sa pag-uswag sa "hardcore enterprise", ug bisan sa labing tukma nga oras sa tuig alang sa usa ka negosyo! Mao kadto ang malipayong panahon sa dihang mianha ka sa kustomer ug moingon: "Kinahanglan namo ang usa pa ka server." Ug ang kustomer: "Oo, walay pangutana! Kami adunay napulo sa rack.

Mao nga gibuhat namon ang Oracle, Java, WebSphere, Db2 ug tanan. Busa, among gikuha, siyempre, ang labing kaayo nga mga solusyon sa vendor, gisagol kini ug gisulayan nga kuhaon kini. Nagdula sila sa ilang kaugalingon. Kini mahimong usa ka internal nga pagsugod.

Nagsugod ang tanan kaniadtong 2009. Sukad sa 2006, kami suod nga nalambigit sa mga desisyon sa operator, sa usa ka paagi o sa lain. Naghimo kami daghang mga kostumbre nga virtual nga PBX (sama sa naa na namon karon sa order): among gitan-aw, nakahukom nga kini maayo, ug nakahukom sa pagpukaw sa usa ka internal nga pagsugod.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Kuhaa ang VMWare. Tungod kay naglakaw kami sa among kaugalingon, kinahanglan namon nga biyaan dayon ang mabugnaw nga tindera nga Storage. Nahibal-an namon ang tanan bahin sa kanila: nga ang mga saad kinahanglan bahinon sa 3, ug ang gasto kinahanglan nga padaghanon sa 10. Busa, gibuhat namon ang DirDB ug uban pa.

Dayon nagsugod kini sa pagtubo. Ang serbisyo sa pagsingil gidugang niini, tungod kay ang plataporma dili na makasagubang. Unya ang billing server gikan sa MySQL mibalhin sa Mongo. Ingon usa ka sangputanan, nakakuha kami usa ka nagtrabaho nga solusyon nga nagproseso sa tanan nga mga tawag nga moadto didto:

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Apan sa usa ka lugar didto, sa sulod, ang parehas nga produkto sa vendor nagtuyok - ang panguna, nukleyar, nga kaniadto among gikuha. Gibana-bana nga sa katapusan sa 2011, nahibal-an namon sa among kaugalingon nga ang panguna nga bottleneck alang kanamo, siyempre, mao ang kini nga partikular nga produkto - modagan kami niini. Nakita namo ang usa ka bungbong sa among atubangan, diin kami nagdagan nga kusog kaayo, samtang ang mga kustomer naglakaw, gidugang.
Subay niini, kinahanglan namong buhaton ang usa ka butang. Siyempre, daghan kaayo ang among gihimo nga panukiduki bahin sa lainlaing mga produkto - parehas nga bukas nga gigikanan ug tigbaligya. Dili na ako maghisgot bahin niini karon - dili kana ang punto. Ang katapusan nga fallback nga among gihunahuna mao ang paghimo sa among kaugalingon nga plataporma.

Sa katapusan, nakaabut kami sa kini nga kapilian. Ngano man? Tungod kay ang tanan nga vendor ug open source nga mga produkto gihimo aron masulbad ang mga problema 10 ka tuig na ang milabay. Buweno, kung usa ka 10-anyos, ug uban pa! Ang pagpili nahimong dayag alang kanamo: manamilit kami sa among maayong ideya sa usa ka sulundon nga serbisyo (alang sa mga kauban, operator ug among kaugalingon), o kami adunay kaugalingon nga butang.

Nakahukom kami nga buhaton ang usa ka butang nga lahi!

Mga Kinahanglanon sa Platform

Kung buhaton nimo ang usa ka butang sa dugay nga panahon (imong gipahimuslan ang produkto sa uban), nan hinayhinay nga naporma sa imong ulo ang hunahuna: unsaon nako kini sa akong kaugalingon? Tungod kay kitang tanan mga programmer sa kompanya (gawas sa mga namaligya, wala’y mga dili programmer), dugay na nga naporma ang among mga kinahanglanon, ug klaro sila:

  1. Taas nga katulin sa pag-uswag. Ang produkto sa vendor, nga nagsakit kanamo, dili angay kanamo sa una tungod kay ang tanan nagtrabaho sa dugay nga panahon ug hinay. Gusto namon nga paspas - kami adunay daghang mga ideya! Daghan pa mig mga ideya, apan ang listahan sa mga ideya kay morag napulo ka tuig sa unahan. Karon sulod lang sa usa ka tuig.
  2. Maximum nga paggamit sa multi-core nga puthaw. Importante usab kini alang kanamo, tungod kay nakita namon nga adunay daghang mga cores.
  3. Taas nga kasaligan. Katong naghilak pud mi.
  4. Taas nga pagtugot sa sayup.
  5. Gusto namon nga matapos ang usa ka adlaw-adlaw nga proseso sa pagpagawas. Aron mahimo kini, kinahanglan namon ang pagpili sa pinulongan.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Tungod niini, gikan sa mga kinahanglanon alang sa produkto nga among gipresentar alang sa among kaugalingon, ang mga kinahanglanon alang sa pinulongan motubo sa usa ka tin-aw nga lohikal nga paagi.

  1. Kung gusto namon ang suporta alang sa mga multi-core nga sistema, nan kinahanglan namon ang suporta alang sa parallel execution.
  2. Kung kinahanglan namon ang katulin sa pag-uswag, kinahanglan namon ang usa ka sinultian nga nagsuporta sa pag-uswag sa kompetisyon, pagprograma sa kompetisyon. Kung adunay bisan kinsa nga wala makasugat sa kalainan, nan kini yano kaayo:
    • parallel programming mao ang mahitungod sa kon sa unsang paagi ang duha ka lain-laing mga hilo modagan sa lain-laing mga cores;
    • dungan nga pagpatay, mas espesipiko concurrency suporta, mao ang mahitungod sa kon sa unsang paagi ang pinulongan (o runtime, bisan unsa) makatabang sa pagtago sa tanang kakomplikado nga nagagikan sa parallel execution.
  3. Taas nga kalig-on. Dayag nga kinahanglan namon ang usa ka kumpol, ug kini mas maayo kaysa kung unsa ang naa sa produkto sa vendor.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Wala gyud kami daghang kapilian, kung nahinumduman nimo. Una, Erlang - gihigugma namon kini ug nahibal-an kini, kini ang akong personal, personal nga paborito. Ikaduha, ang Java dili bisan Java, apan partikular nga Scala. Ikatulo, ang pinulongan nga niadtong panahona wala pa nato mahibaloi - Lakaw. Bag-o lang kini nagpakita kaniadto, mas tukma, naglungtad na kini sulod sa mga duha ka tuig, apan wala pa mapagawas.

Gipildi si Go!

Kasaysayan sa Go

Naghimo kami og plataporma niini. Suwayan nakog explain kung ngano.

Usa ka Mubo nga Kasaysayan sa Go. Nagsugod sa 2007, giablihan sa 2009, ang unang bersyon gipagawas sa 2012 (nga mao, nagsugod kami sa pagtrabaho bisan sa wala pa ang unang pagpagawas). Ang nagpasiugda mao ang Google, nga gusto nga pulihan, ingon sa akong pagduda, ang Java.

Ang mga tagsulat bantog kaayo:

  • Si Ken Thomson, nga nagpaluyo sa Unix, nag-imbento sa UTF-8, nagtrabaho sa Plano 9 nga sistema;
  • Si Rob Pike, kinsa nagdisenyo sa UTF-8 uban ni Ken, nagtrabaho usab sa Plano 9, Inferno, Limbo sa Bell Labs;
  • Robert Gizmer, nga among nailhan ug nahigugma sa pag-imbento sa Java HotSpot Compiler ug sa pagtrabaho sa generator sa V8 (Google's Javascript interpreter);
  • Ug kapin sa 700 ka mga kontribyutor, lakip ang pipila sa among mga patch.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Lakaw sa usa ka pagtan-aw

Atong nakita nga ang pinulongan mas simple ug masabtan. Kami adunay klaro nga mga tipo: sa pipila ka mga kaso kinahanglan silang ipahayag, sa uban wala (nagpasabut nga ang mga tipo gipasabut gihapon).

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Makita nga uso ang paghulagway sa mga istruktura. Makita nga kita adunay konsepto sa usa ka pointer (diin ang asterisk). Makita nga adunay espesyal nga suporta alang sa pagdeklara sa pagsugod sa mga arrays ug associative arrays.

Masabot nga masabtan - mahimo kang mabuhi. Naningkamot sa pagsulat Hello, kalibutan:

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Unsay atong makita? Kini sama sa C syntax, ang semicolon opsyonal. Mahimo kini nga usa ka separator alang sa duha ka linya, apan kung kini duha ka mga konstruksyon nga eksakto sa parehas nga linya.

Nakita namon nga ang mga braket sa kontrol nga mga istruktura (sa ika-14 nga linya) mga opsyonal, apan ang mga kulot kanunay nga gikinahanglan. Nakita namon nga ang pag-type static. Ang Tim sa kadaghanan nga mga kaso gipakita. Kini nga pananglitan mas komplikado kay sa naandan nga Hello, world - aron lang ipakita nga adunay library.

Unsa pa ang atong nakita nga importante? Ang code giorganisar sa mga pakete. Ug aron magamit ang pakete sa imong kaugalingon nga code, kinahanglan nimo nga i-import kini gamit ang direktiba sa pag-import - hinungdanon usab kini. Nagsugod kami - kini molihok. Nindot!

Atong sulayan ang usa ka butang nga mas komplikado: Kumusta, kalibutan, apan karon kini usa ka http server. Unsa ang atong nakita nga makapaikag dinhi?

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Una, ang function naglihok isip usa ka parameter. Kini nagpasabut nga ang function nga naa kanato usa ka "first-class citizen" ug mahimo nimo ang daghang makapaikag nga mga butang uban niini sa usa ka istilo nga magamit. Nakita namon ang wala damha nga sunod: ang direktiba sa pag-import direkta nga nagtumong sa GitHub repository. Husto, ingon niana kini - labi pa, ingon niana ang kinahanglan buhaton.

Sa Go, ang universal identifier sa usa ka package mao ang url sa repository niini. Adunay usa ka espesyal nga gamit sa Goget nga magamit alang sa tanan nga mga dependency, i-download kini, i-install kini, i-compile kini, ug iandam kini alang sa paggamit kung kinahanglan. Sa parehas nga oras, nahibal-an ni Goget ang bahin sa html-meta. Sa ingon, mahimo nimong tipigan ang usa ka direktoryo sa http, nga adunay mga link sa imong piho nga tipiganan (sama sa among gibuhat, pananglitan).

Unsa pa ang atong makita? Http ug Json sa regular nga librarya. Adunay, klaro, introspection - pagpamalandong, nga kinahanglan gamiton sa pag-encode / json, tungod kay gipulihan lang namon ang pila ka butang nga arbitraryo.

Gipadagan namo kini ug nakita nga kami adunay 20 ka linya sa mapuslanong code nga nag-compile, nagpadagan ug naghatag sa kasamtangang average nga load sa makina (sa makina diin kini nagdagan).
Unsa pa ang hinungdanon gikan sa atong makita dayon dinhi? Nag-compile kini sa usa ka static binary (buinary). Kini nga binary wala’y mga dependency, wala’y mga librarya! Mahimo kini makopya sa bisan unsang sistema, pagdagan dayon, ug kini molihok.

Nagpadayon mi.

Lakaw: mga pamaagi ug mga interface

Ang Go adunay mga pamaagi. Mahimo nimong ipahayag ang usa ka pamaagi alang sa bisan unsang naandan nga tipo. Dugang pa, kini dili kinahanglan nga usa ka istruktura, apan mahimo nga usa ka alyas sa usa ka matang. Mahimo nimong ideklara ang usa ka alyas alang sa N32 ug isulat ang mga pamaagi aron mahimo kini nga mapuslanon.

Ug dinhi kami nahulog sa usa ka stupor sa unang higayon ... Kini nahimo nga si Go walay klase nga ingon niana. Kadtong nakaila ni Go mahimong moingon nga adunay tipo nga paglakip, apan kini lahi kaayo. Ang mas sayo nga ang developer mohunong sa paghunahuna niini ingon nga kabilin, mas maayo. Walay mga klase sa Go, ug walay kabilin usab.

Pangutana! Unsa ang gihatag sa kompanya sa mga tagsulat nga gipangulohan sa Google aron ipakita ang pagkakomplikado sa kalibutan? Gihatagan kami mga interface!

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

Ang usa ka interface usa ka espesyal nga tipo nga nagtugot kanimo sa pagsulat sa yano nga mga pamaagi, mga pirma sa pamaagi. Dugang pa, ang bisan unsang tipo kung diin kini nga mga pamaagi naglungtad (gipatuman) katumbas sa kini nga interface. Kini nagpasabut nga mahimo nimong isulat ang katugbang nga function alang sa usa ka tipo, alang sa lain (nga katumbas sa tipo sa interface). Sunod, ideklara ang usa ka variable sa tipo sa kini nga interface ug i-assign ang bisan unsang mga butang niini.

Para sa mga hardcore fans, makaingon ko nga kini nga variable maglangkob gyud og duha ka pointer: ang usa ngadto sa data, ang usa ngadto sa usa ka espesyal nga descriptor table nga espesipiko niining partikular nga tipo, ngadto sa interface niini nga matang. Kana mao, ang compiler naghimo sa ingon nga mga lamesa sa mga deskriptor sa panahon sa pag-link.

Ug adunay, siyempre, mga punto nga wala’y mahimo sa Go. Ang pulong nga interface {} (nga adunay duha ka kulot nga braces) kay usa ka baryable nga nagtugot kanimo sa pagtudlo sa bisan unsang butang sa prinsipyo.
Sa pagkakaron, ang tanan anaa sa kahusay, ang tanan pamilyar. Walay makatingala.

Lakaw: goroutine

Karon moabut na kami sa kung unsa ang among interesado: gaan nga mga proseso - goroutine (goroutine) sa terminolohiya sa Go.

Alexey Naidenov. ITooLabs. Kaso sa pag-uswag sa plataporma sa telepono sa Go (Golang). Bahin 1

  1. Una, sila gaan kaayo (ubos sa 2 Kb).
  2. Ikaduha, ang gasto sa paghimo sa ingon nga goroutine gamay ra: mahimo ka makahimo usa ka libo niini matag segundo - wala’y mahitabo.
  3. Giserbisyuhan sila sa ilang kaugalingong scheduler, nga nagbalhin lang sa kontrol gikan sa usa ka goroutine ngadto sa lain.
  4. Sa kini nga kaso, ang kontrol gibalhin sa mosunod nga mga kaso:
    • kon ang usa ka go statement masugatan (kon ang goroutine magsugod sa sunod nga goroutine);
    • kung ang usa ka blocking Input/Out nga tawag gipalihok;
    • kung ang pagkolekta sa basura ma-trigger;
    • kung gisugdan ang pipila nga operasyon nga adunay mga kanal.

Kana mao, sa matag higayon nga ang usa ka programa sa Go gipadagan sa usa ka kompyuter, kini makamatikod sa gidaghanon sa mga core sa sistema, magsugod sa daghang mga thread kung gikinahanglan (pila ka mga core ang anaa sa sistema, o kung pila ang imong gisulti niini). Tungod niini, ang scheduler magpadagan niining gaan nga mga hilo sa pagpatuman sa tanan niining mga hilo sa operating system sa matag kinauyokan.

Kinahanglan nga hinumdoman nga kini ang labing episyente nga paagi sa paggamit sa puthaw. Gawas pa sa among gipakita, daghan pa ang among gibuhat. Naghimo kami, pananglitan, mga sistema sa DPI nga nagtugot sa pagserbisyo sa 40 gigabits sa usa ka yunit (depende kung unsa ang mahitabo sa kini nga mga linya).

Didto, bisan sa wala pa ang Go, gigamit namon ang parehas nga laraw alang sa kini nga hinungdan: tungod kay gitugotan ka nga i-save ang lokalidad sa cache sa processor, nga makunhuran ang gidaghanon sa mga switch sa konteksto sa OS (nga nanginahanglan usab daghang oras). Akong balikon: kini ang labing epektibo nga paagi sa paggamit sa puthaw.

Kining yano nga 21-linya nga panig-ingnan usa ka pananglitan nga yano nga naghimo sa echo-server. Sa parehas nga oras, timan-i nga ang function sa pag-alagad labi ka yano, kini linear. Wala'y mga callback, dili kinahanglan nga magsamok ug maghunahuna ... Magbasa ug magsulat ka lang!

Sa samang higayon, kung magbasa ka ug magsulat, kinahanglan gyud nga i-block - kini nga goroutine yano nga gipila ug gikuha sa scheduler kung mahimo na usab ang pagpatay. Kana mao, kini nga yano nga code mahimong molihok ingon usa ka echo server alang sa daghang mga koneksyon nga itugot sa OS sa kini nga makina.

Ipadayon sa dili madugay...

Pipila ka mga ad πŸ™‚

Salamat sa pagpabilin kanamo. Ganahan ka ba sa among mga artikulo? Gusto nga makakita og mas makapaikag nga sulod? Suportahi kami pinaagi sa pag-order o pagrekomenda sa mga higala, cloud VPS alang sa mga developers gikan sa $4.99, usa ka talagsaon nga analogue sa mga entry-level server, nga giimbento namo alang kanimo: Ang tibuok kamatuoran bahin sa VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps gikan sa $19 o unsaon pagpaambit sa usa ka server? (anaa sa RAID1 ug RAID10, hangtod sa 24 ka mga core ug hangtod sa 40GB DDR4).

Dell R730xd 2 ka beses nga mas barato sa Equinix Tier IV data center sa Amsterdam? Dinhi lang 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV gikan sa $199 sa Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - gikan sa $99! Basaha ang mahitungod sa Unsaon pagtukod sa infrastructure corp. klase sa paggamit sa Dell R730xd E5-2650 v4 server nga nagkantidad ug 9000 euros sa usa ka sentimos?

Source: www.habr.com

Idugang sa usa ka comment