Alexey Naydenov, CEO Gihisgutan ni Alexey ang pagpalambo sa usa ka plataporma sa telekomunikasyon para sa mga operator sa telecom gamit ang Go programming language. Gipaambit usab niya ang iyang kasinatian sa pag-deploy ug pagpadagan sa plataporma sa usa sa pinakadako nga operator sa telecom sa Asya, nga migamit sa plataporma aron maghatag og voicemail (VoiceMail) ug mga serbisyo sa cloud PBX.

Alexey Naydenov (gikan dinhi – AN): Kumusta sa tanan! Ako diay si Alexey Naydenov. Ako ang direktor sa ITooLabs. Una sa tanan, gusto nakong ipasabot kung unsa ang akong trabaho dinhi ug kung giunsa ko nakaabot dinhi.
Kon imong tan-awon ang Bitrix24 Marketplace (seksyon sa Telepono), aduna kitay 14 ka aplikasyon, ug 36 niini (40%) mao ang:

Mas tukma, kini ang among mga kauban sa operator, apan sa luyo niining tanan mao ang among plataporma (Platform as a Service)—nga among gibaligya kanila sa mas barato nga presyo. Sa tinuud, gusto nakong hisgutan ang pag-uswag niini nga plataporma ug kung giunsa namo paghimo ang Go.
Ang kasamtangang mga numero sa among plataporma:

44 ka operator partners, lakip na ang MegaFon. Kasagaran kami adventurous, ug kami adunay epektibong access sa 100 milyon nga mga subscriber sa 44 ka operator dinhi sa Russia. Busa, kung adunay bisan kinsa nga adunay mga ideya sa negosyo, malipayon kami nga makadungog niini.
- 5000 ka mga kompanya sa tiggamit.
- 20,000 ka mga subscriber sa kinatibuk-an. Kini tanan b2b – eksklusibo kaming nakigtambayayong sa mga kompanya.
- 300 ka tawag kada minuto sa tibuok adlaw.
- 100 milyon nga minuto sa tawag sa miaging tuig (among gisaulog). Wala pa kini maglakip sa mga internal nga tawag nga magamit sa among plataporma.
Giunsa kini pagsugod?
Unsaon man pagsugod sa pagtukod sa ilang kaugalingong plataporma sa mga tarong nga tawo? Kinahanglan nimong hunahunaon nga kita adunay kasaysayan sa pagpalambo sa "hardcore enterprise", ug sa hingpit nga panahon sa tuig alang sa enterprise, dili moubos pa! Mao kadto ang malipayong panahon nga moadto ka sa usa ka kliyente ug moingon, "Kinahanglan namo og dugang pipila ka mga server." Ug ang kliyente moingon, "Walay problema! Naa mi napulo sa rack."
Mao nga nagtrabaho mi gamit ang Oracle, Java, WebSphere, Db2, ug tanan niana. Mao nga, siyempre, among gikuha ang pinakamaayong mga solusyon sa vendor, gi-integrate kini, ug gisulayan nga molampos. Naghimo mi sa among kaugalingon. Murag usa ka internal nga startup.
Nagsugod ang tanan niadtong 2009. Sukad sa 2006, nalambigit kami pag-ayo sa mga solusyon sa operator, sa usa o lain nga paagi. Naghimo kami og daghang custom virtual PBX systems (sama sa usa nga among mapalit karon): among gisusi kini, nakahukom nga maayo kini, ug nakahukom nga magsugod og internal startup.

Nipili mi og VMWare. Kay kami ra may naggasto sa among kaugalingong kwarta, kinahanglan namong biyaan dayon ang nindot nga Storage nga gikan sa vendor. Nasayod mi sa tanan bahin nila: nga ang mga saad kinahanglan bahinon sa 3, ug ang gasto kinahanglan i-multiply sa 10. Mao nang nipili mi og DirDB ug uban pa.
Unya nagsugod kini sa pagtubo. Gidugang ang serbisyo sa pagsingil tungod kay dili na makasugakod ang plataporma. Dayon ang billing server mibalhin gikan sa MySQL ngadto sa Mongo. Ang resulta usa ka nagtrabaho nga solusyon nga nagdumala sa tanang tawag niini:

Apan sa usa ka dapit sa sulod, ang mao gihapong produkto sa vendor nagtuyok—ang kinauyokan, kinauyokan nga among gidumala kaniadto. Sa katapusan sa 2011, among naamgohan nga kini nga produkto mao, siyempre, ang among pinakadakong babag—maagian namo kini. Nakita namo ang usa ka bungbong sa among atubangan, ug nagdali kami sa pagsulod niini samtang ang mga kustomer nagpadayon sa pag-abot ug pag-apil.
Mao nga, kinahanglan gyud mi mohimo og aksyon. Siyempre, nagpahigayon mi og daghang panukiduki sa nagkalain-laing mga produkto—open source ug vendor-owned. Dili na ko mohisgot ana karon—dili kana ang punto. Ang katapusang solusyon nga among gikonsiderar mao ang paghimo sa among kaugalingong plataporma.
Sa katapusan, among gipili kini nga kapilian. Ngano man? Kay ang tanang vendor ug open-source nga mga produkto gihimo aron masulbad ang mga problema nga 10 ka tuig na ang edad. 10 ka tuig na ang edad, kon maayo kana, apan aduna pay mas taas pa! Nahimong klaro kanamo ang pagpili: biyaan ba namo ang among maayong ideya sa hingpit nga serbisyo (para sa mga kauban, operator, ug para kanamo), o maghimo kami og kaugalingon namong kaugalingon.
Nakahukom mi nga mohimo og usa ka butang nga among kaugalingon!
Mga kinahanglanon sa plataporma
Kon dugay ka nang nagbuhat og usa ka butang (gamit ang produkto sa uban), hinay-hinay nga mosantop sa imong hunahuna ang hunahuna: unsaon nako pagbuhat niini sa akong kaugalingon? Tungod kay kitang tanan mga programmer sa kompanya (gawas sa mga salespeople; walay mga dili programmer), ang atong mga kinahanglanon dugay na nga natukod, ug kini klaro:
- Kusog kaayo ang pag-develop. Ang produkto sa vendor nga nagsamok namo dili makatagbaw kay dugay ug hinay kaayo ang tanan. Gusto namo nga dali ra—daghan mig ideya! Daghan pa mig ideya, pero kaniadto, taas kaayo ang listahan nga mura mig napulo ka tuig na ang milabay. Karon, usa na lang ka tuig.
- Pinakamataas nga paggamit sa multi-core hardware. Importante usab kini kanamo, kay among nakita nga ang gidaghanon sa mga core modaghan pa.
- Taas nga kasaligan. Usa ka butang nga among gikahilakan usab.
- Taas nga pagtugot sa sayop.
- Gusto namo nga sa ngadto-ngadto mobalhin ngadto sa usa ka adlaw-adlaw nga proseso sa pagpagawas. Aron makab-ot kini, kinahanglan namo ang pagpili sa pinulongan.

Busa, ang mga kinahanglanon para sa produkto nga atong gitakda para sa atong kaugalingon klaro ug lohikal nga mosangpot sa mga kinahanglanon para sa pinulongan.
- Kon gusto natong mosuporta sa mga multi-core system, nan kinahanglan nato ang suporta para sa parallel execution.
- Kon gusto nato og paspas nga pag-develop, kinahanglan nato og pinulongan nga mosuporta sa concurrent development ug concurrent programming. Para sa mga wala pa masayod sa kalainan, simple ra kaayo kini:
- Ang parallel programming mahitungod sa kung giunsa pagdagan ang duha ka lainlaing mga thread sa lainlaing mga core;
- Ang dungan nga pagpatuman, o mas tukma, suporta sa dungan, mahitungod sa kung giunsa sa usa ka pinulongan (o runtime, dili igsapayan) pagtabang sa pagtago sa tanang pagkakomplikado nga naggikan sa dungan nga pagpatuman.
- Taas nga kalig-on. Klaro nga kinahanglan namo ang usa ka cluster, ug usa nga mas maayo kaysa sa naa namo sa produkto sa vendor.

Wala gyud mi kaayoy mga kapilian, kon imong hunahunaon. Una, naa ang Erlang—ganahan mi niini ug nahibal-an namo kini; kini ang akong personal nga paborito. Ikaduha, naa ang Java—dili gani ang Java, apan labi na ang Scala. Ikatulo, naa ang usa ka pinulongan nga wala pa namo nahibal-an niadtong panahona: ang Go. Bag-o lang kini migawas niadtong panahona; mas tukma, mga duha ka tuig na kini nga naglungtad, apan wala pa kini gipagawas.
Padayon nga modaog!
Kasaysayan sa Pag-adto
Nagtukod mig plataporma niini. Tugoti ko nga mosulay sa pagpasabut kung ngano.
Usa ka mubo nga kasaysayan sa Go. Gilunsad kini niadtong 2007, magamit sa publiko niadtong 2009, ug ang unang bersyon gipagawas niadtong 2012 (nagpasabot nga nagsugod na kami sa pagtrabaho niini bisan sa wala pa ang unang pagpagawas). Gisugdan kini sa Google, nga gusto nga ilisan, sa akong hunahuna, ang Java.
Ang mga awtor sikat kaayo:
- Si Ken Thomson, kinsa mao ang nagpaluyo sa Unix, mao ang nag-imbento sa UTF-8, ug nagtrabaho sa sistema sa Plan 9;
- Si Rob Pike, kinsa kauban sa paghimo sa UTF-8 uban ni Ken, nagtrabaho usab sa Plan 9, Inferno, Limbo sa Bell Labs;
- Si Robert Giesmer, kinsa atong nailhan ug gihigugma tungod sa pag-imbento sa Java HotSpot Compiler ug sa pagtrabaho sa generator sa V8 (Javascript interpreter sa Google);
- Ug kapin sa 700 ka mga partisipante, lakip na ang pipila sa among mga patch.

Lakaw: Unang Tan-aw
Atong makita nga ang pinulongan mas simple ug masabtan. Kita adunay klaro nga mga tipo: sa pipila ka mga kaso, kinahanglan kini ideklarar, sa uban, dili (nagpasabot, ang mga tipo gipasabot, sa usa ka paagi o sa lain).

Klaro nga uso na kaayo ang paghulagway sa mga istruktura. Klaro nga naa tay konsepto sa pointer (diin naa ang asterisk). Klaro nga naa'y espesyal nga suporta para sa pagdeklarar sa initialization sa mga array ug associative array.
Klaro kaayo – posible ang kinabuhi. Sulayan nato pagsulat og "Hello, world":

Unsay atong nakita? Kini usa ka C-like syntax; ang semicolon opsyonal. Mahimo kining gamiton isip line separator, apan kung kini duha ka construct sa parehas nga linya.
Atong makita nga ang mga parenthesis sa mga control structure (sa linya 14) opsyonal, apan ang mga curly braces kanunay gikinahanglan. Atong makita usab nga ang pag-type kay static. Ang type kay gi-infer sa kadaghanang mga kaso. Kini nga ehemplo medyo mas komplikado kay sa naandan nga "Hello, world"—aron lang ipakita nga naa'y library.
Unsa pa may importante? Ang code giorganisar ngadto sa mga package. Ug aron magamit ang package sa imong kaugalingong code, kinahanglan nimo kining i-import gamit ang import directive—importante usab kini. Atong padaganon—mogana kini. Maayo kaayo!
Sulayan nato ang mas komplikado nga butang: Kumusta, kalibutan, apan karong higayona usa kini ka HTTP server. Unsa may makapainteres dinhi?

Una, ang function nagsilbing usa ka parameter. Kini nagpasabot nga ang function usa ka "first-class citizen" ug magamit alang sa lain-laing makapaikag nga mga katuyoan sa function. Unya atong makita ang usa ka butang nga wala damha: ang import directive direktang nagtumong sa GitHub repository. Sakto, mao kana—sa tinuod lang, mao kana ang angay nga mahitabo.
Sa Go, ang universal package identifier mao ang URL sa repository niini. Adunay usa ka espesyal nga utility nga gitawag og Goget nga mokuha sa tanang dependencies, mo-download niini, mo-install niini, mo-compile niini, ug moandam niini para gamiton kon gikinahanglan. Nakasabot usab ang Goget sa HTML metadata. Busa, mahimo nimong ipadayon ang usa ka HTTP directory nga adunay mga link sa imong piho nga repository (sama sa among gibuhat, pananglitan).
Unsa pa may atong nakita? Ang Http ug Json naa sa standard library. Klaro nga naa ang introspection—reflection—nga angay gamiton sa encoding/json, kay naghatag lang ta niini og arbitrary object.
Atong ilunsad kini ug makita nga aduna kitay mapuslanong code sa 20 ka linya nga mo-compile, modagan, ug mobalik sa kasamtangang average machine load (sa makina diin kini nagdagan).
Unsa pa may importante nga atong makita dayon dinhi? Kini ma-compile ngadto sa usa ka single static binary (buinary). Kini nga binary walay mga dependency, walay mga librarya! Mahimo kining kopyahon sa bisan unsang sistema, padaganon dayon, ug kini mogana.
Nagpadayon mi.
Lakaw: Mga Pamaagi ug mga Interface
Ang Go adunay mga pamaagi. Mahimo kang modeklarar og pamaagi para sa bisan unsang tipo nga gihubit sa tiggamit. Dili kinahanglan nga kini usa ka struct, apan mahimo kini nga usa ka alias sa ubang tipo. Mahimo kang modeklarar og alias para sa N32 ug magsulat og mga pamaagi para niini aron makahimo og usa ka butang nga mapuslanon.
Ug dinhi kita unang naglibog... Migawas nga ang Go walay mga klase. Kadtong pamilyar sa Go mahimong moingon nga kini adunay type inclusion, apan lahi na kana nga butang. Kon mas sayo nga mohunong ang usa ka developer sa paghunahuna niini nga inheritance, mas maayo. Walay mga klase sa Go, ug walay inheritance usab.
Pangutana! Unsa may gihatag sa grupo sa mga tiglalang nga gipangulohan sa Google aron ipakita ang pagkakomplikado sa kalibutan? Gihatagan nila kami og mga interface!

Ang interface usa ka espesyal nga tipo nga nagtugot kanimo sa pagsulat lang sa mga pamaagi ug mga pirma sa pamaagi. Ang bisan unsang tipo diin kini nga mga pamaagi anaa (gipatuman) mo-uyon niini nga interface. Kini nagpasabot nga mahimo nimong i-define ang katugbang nga function para sa usa ka tipo, dayon para sa lain (nga mo-uyon sa tipo sa interface). Dayon, ideklara ang usa ka variable niini nga tipo sa interface ug i-assign ang bisan hain niini nga mga butang niini.
Para sa mga hardcore, masulti ko nimo nga kini nga variable adunay duha ka pointer: usa para sa data, ug usa para sa usa ka espesyal nga descriptor table nga espesipiko niini nga klase ug sa interface niini. Sa ato pa, ang compiler ang mohimo niining mga descriptor table sa link time.
Ug siyempre, ang Go adunay mga void pointer. Ang pulong nga interface {} (nga adunay duha ka curly braces) usa ka variable nga nagtugot kanimo sa pagtudlo sa bisan unsang butang.
Sa pagkakaron, maayo ra ang tanan, pamilyar ang tanan. Walay ikatingala.
Lakaw: mga goroutines
Karon ania na kita sa atong gikainteresan: mga gaan nga proseso – mga goroutines sa terminolohiya sa Go.

- Una, kini gaan ra kaayo (ubos sa 2 KB).
- Ikaduha, gamay ra ang gasto sa paghimo sa ingon nga goroutine: makahimo ka og usa ka libo niini kada segundo – walay mahitabo.
- Gisilbihan sila sa ilang kaugalingong scheduler, nga nagbalhin lang sa kontrol gikan sa usa ka goroutine ngadto sa lain.
- Sa kini nga kaso, ang kontrol gibalhin sa mosunod nga mga kaso:
- kon ang usa ka pahayag nga "go" masugatan (kon ang goroutine magsugod sa sunod nga goroutine);
- kon ang tawag sa pag-block sa Input/Out gi-enable;
- kon nagdagan ang pagkolekta sa basura;
- kon adunay operasyon nga adunay mga channel nga gilunsad.
Sa ato pa, matag higayon nga modagan ang usa ka Go program sa usa ka kompyuter, kini motino sa gidaghanon sa mga core sa sistema ug molunsad og daghang mga thread kon gikinahanglan (ang gidaghanon sa mga core sa sistema o ang gidaghanon nga imong gipiho). Ang scheduler unya molunsad niining mga gaan nga thread sa tanan niining mga thread sa operating system sa matag core.
Angayan nga matikdan nga kini ang labing episyente nga paagi sa paggamit sa hardware. Daghan pa kami og gibuhat gawas sa gipakita. Pananglitan, naghimo kami og mga sistema sa DPI nga makadumala og 40 gigabits matag yunit (depende sa kung unsa ang nahitabo niini nga mga linya).
Gigamit namo ang parehas nga pamaagi didto sa wala pa ang Go tungod niini nga hinungdan: tungod kay kini nagpreserbar sa lokalidad sa processor cache ug nagpamenos pag-ayo sa gidaghanon sa mga OS context switch (nga nagkinahanglan usab og daghang oras). Sa makausa pa, kini ang labing episyente nga paagi sa paggamit sa hardware.
Kining simpleng 21-line nga ehemplo mao ang gibuhat sa echo-server. Timan-i nga ang serve function kay simple ra kaayo ug prangka. Walay callbacks, dili kinahanglan nga maghunahuna o maghunahuna… Magbasa ug magsulat ka lang!
Apan, kon ikaw mobasa ug mosulat, kini kinahanglan nga mo-block—ang goroutine i-queue lang ug kuhaon sa scheduler kon mahimo na usab ang pagpatuman. Kini nga simpleng code mahimong molihok isip echo server para sa daghang koneksyon kutob sa gitugot sa OS sa 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, , usa ka talagsaon nga analogue sa mga entry-level server, nga giimbento namo alang kanimo: (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 sa Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - gikan sa $99! Basaha ang mahitungod sa
Source: www.habr.com
