Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Alexey Naydenov, CEO ITooLabs, chita pale sou devlopman yon platfòm telekominikasyon pou operatè telecom nan lang pwogramasyon Go (Golang). Alexey pataje eksperyans li tou nan deplwaye ak opere platfòm la nan youn nan pi gwo operatè telecom Azyatik, ki te itilize platfòm la pou bay sèvis lapòs vwa (VoiceMail) ak Virtual PBX (Cloud PBX).

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Alexey Naydenov (apwe sa - AN): - Bonjou tout moun! Non mwen se Alexey Naydenov. Mwen se direktè ITooLabs. Premyèman, mwen ta renmen reponn sa m ap fè la a ak ki jan mwen te fini isit la.

Si w gade Bitrix24 Marketplace (seksyon "Telephony"), lè sa a 14 aplikasyon ak 36 ki la (40%) se nou:

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Plis jisteman, sa yo se patnè operatè nou yo, men dèyè tout bagay sa yo se platfòm nou an (Platform as a Service) - sa nou vann yo pou yon ti pyès lajan. Aktyèlman, mwen ta renmen pale sou devlopman platfòm sa a ak fason nou te rive nan Go.

Nimewo yo pou platfòm nou an kounye a:

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

44 patnè operatè, ki gen ladan Megafon. Anjeneral pale, nou reyèlman renmen ale nan avanti diferan, epi nou gen aksè aktyèl nan 100 milyon abonnés nan 44 operatè isit la nan Larisi. Se poutèt sa, si yon moun gen nenpòt lide biznis, nou pral toujou kontan koute yo.

  • 5000 konpayi itilizatè.
  • 20 abonnés an total. Sa a se tout b000b - nou travay sèlman ak konpayi yo.
  • 300 apèl pa minit pandan jounen an.
  • 100 milyon minit apèl ane pase a (nou te selebre). Sa a pa pran an kont negosyasyon entèn ki disponib sou platfòm nou an.

Ki jan li te kòmanse?

Ki jan bon dud yo menm kòmanse fè platfòm yo? Nou dwe tou pran an kont ke nou gen yon istwa nan devlopman "hardcore antrepriz", e menm nan moman ki pi presi nan ane a pou yon antrepriz! Se te moman sa a kontan lè ou vin jwenn kliyan an epi di: "Nou bezwen yon koup plis sèvè." Ak kliyan an: "Pa gen kesyon! Nou gen dis nan etajè a."

Se konsa, nou te fè Oracle, Java, WebSphere, Db2 ak tout bagay sa yo. Se poutèt sa, nou te pran, nan kou, pi bon solisyon machann yo, entegre yo epi yo te eseye dekole ak li. Nou te mache poukont nou. Sa a ta dwe tankou yon demaraj entèn.

Tout bagay sa yo te kòmanse aktyèlman an 2009. Depi 2006, nou te patisipe sere nan solisyon operatè yo, yon fason oswa yon lòt. Nou te fè plizyè PBX vityèl koutim (tankou sa a nou genyen kounye a sou lòd): nou gade li, deside ke li te bon, epi deside kòmanse yon demaraj entèn.

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Nou te pran VMWare. Depi nou te poukont nou, nou te oblije imedyatman abandone Depo machann fre a. Nou konnen tout bagay sou yo: ke pwomès yo dwe divize pa 3, ak pri a dwe miltipliye pa 10. Se poutèt sa yo te fè DirDB ak sou sa.

Lè sa a, li te kòmanse grandi. Yon sèvis bòdwo te ajoute nan sa a paske platfòm la pa t 'kapab fè fas ankò. Lè sa a, sèvè bòdwo a soti nan MySQL demenaje ale rete nan Mongo. Kòm yon rezilta, nou te jwenn yon solisyon k ap travay ki trete tout apèl ki ale la:

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Men, yon kote la, andedan, menm pwodwi vandè sa a ap vire - prensipal la, youn nikleyè, ke nou te pran yon fwa. Anviwon nan fen 2011, nou reyalize ke gwo bouchon an pou nou, nan kou, ta pwodwi patikilye sa a - nou ta kouri nan li. Nou te wè yon miray devan nou, kote nou te kouri nan tout galope, kòm plis kliyan te kontinye vini.
An konsekans, nou te bezwen fè yon bagay. Natirèlman, nou te fè anpil rechèch sou divès kalite pwodwi - tou de sous louvri ak machann yo. Mwen pa pral rete sou sa a kounye a - se pa sa nou ap pale de. Dènye opsyon repli nou te panse a se te fè pwòp platfòm nou an.

Finalman, nou te rive nan opsyon sa a. Poukisa? Paske tout machann ak pwodwi sous louvri yo te fè pou rezoud pwoblèm ki te gen 10 zan. Oke, si 10 ane fin vye granmoun, ak kèk plis! Chwa a te vin evidan pou nou: swa nou di orevwa nan gwo lide nou an nan yon sèvis ideyal (pou patnè, operatè yo ak tèt nou), oswa nou fè yon bagay nan pwòp pa nou.

Nou deside fè yon bagay pa nou!

Kondisyon platfòm yo

Si ou te fè yon bagay pou yon tan long (sèvi ak pwodwi yon lòt moun), Lè sa a, panse a tou dousman fòme nan tèt ou: ki jan mwen ta fè sa tèt mwen? Depi nou tout se pwogramè nan konpayi an (eksepte pou vandè, pa gen okenn pwogramasyon ki pa pwogramasyon), kondisyon nou yo te devlope depi lontan, epi yo te klè:

  1. Segondè vitès devlopman. Pwodwi vandè a ki toumante nou pa t 'satisfezan, anvan tout bagay, paske tout bagay te tounen soti long ak tou dousman. Nou te vle li byen vit - nou te gen anpil lide! Nou toujou gen yon anpil nan lide, men Lè sa a, lis la nan lide te tankou ke li te sanble tankou dis ane davans. Koulye a, sèlman pou yon ane.
  2. Maksimòm itilizasyon milti-nwayo fè. Sa a te enpòtan tou pou nou, depi nou te wè ke ta gen sèlman pi plis ak plis nwayo.
  3. Segondè fyab. Yon bagay nou te kriye tou.
  4. Segondè rezistans nan echèk.
  5. Nou te vle fini ak yon pwosesis de degaje chak jou. Pou sa nou te bezwen yon chwa lang.

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

An konsekans, soti nan kondisyon yo pou pwodwi a ke nou te mete pou tèt nou, kondisyon yo pou lang nan grandi nan yon fason klèman lojik.

  1. Si nou vle sipò pou sistèm milti-debaz, Lè sa a, nou bezwen sipò pou ekzekisyon paralèl.
  2. Si nou bezwen vitès devlopman, nou bezwen yon lang ki sipòte devlopman konpetitif, pwogramasyon konpetitif. Si yon moun pa te rankontre diferans lan, li trè senp:
    • Pwogramasyon paralèl se sou fason de fil diferan yo egzekite sou nwayo diferan;
    • Ekzekisyon konkouran, oswa plis jisteman, sipò konkou, se sou fason yon lang (oswa ègzekutabl, li pa enpòtan) ede kache tout konpleksite ki soti nan ekzekisyon paralèl.
  3. Segondè estabilite. Li evidan, nou te bezwen yon gwoup, ak yon pi bon youn pase nou te genyen sou pwodwi vandè a.

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Nou pa t vrèman gen anpil opsyon, si w sonje. Premyèman, Erlang - nou renmen ak konnen li, li te pèsonèl mwen pi renmen pèsonèl. Dezyèmman, Java se pa menm Java, men espesyalman Scala. Twazyèmman, yon lang ke nan epòk sa a nou pa t 'konnen ditou - Go. Li te jis parèt lè sa a, oswa pito, li te deja egziste pou apeprè de ane, men li pa t 'ankò te lage.

Ale genyen!

Istwa Go

Nou te fè yon platfòm sou li. Mwen pral eseye eksplike poukisa.

Yon Brèf Istwa Go. Li te kòmanse an 2007, louvri nan 2009, premye vèsyon an te lage nan 2012 (ki se, nou te kòmanse travay menm anvan premye lage). Inisyatè a te Google, ki te vle ranplase, jan mwen sispèk, Java.

Otè yo trè popilè:

  • Ken Thomson, ki te dèyè Unix, envante UTF-8, te travay sou sistèm Plan 9 la;
  • Rob Pike, ki te envante UTF-8 ak Ken, te travay tou sou Plan 9, Inferno, Limbo nan Bell Labs;
  • Robert Giesmer, ke nou konnen ak renmen pou envante Java HotSpot Compiler la ak pou travay li sou dèlko a nan V8 (entèprèt Javascript Google la);
  • Ak plis pase 700 kontribitè, ki gen ladan kèk nan plak nou yo.

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Ale: premye gade

Nou wè ke lang nan plis oswa mwens senp ak konprann. Nou gen kalite evidan: nan kèk ka yo bezwen yo dwe deklare, nan lòt yo pa nesesè (sa vle di ke kalite yo dedwi yon fason oswa yon lòt).

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Li ka wè ke li se alamòd dekri estrikti. Li ka wè ke nou gen konsèp nan yon konsèy (kote asterisk la). Li ka wè ke gen sipò espesyal pou deklare inisyalizasyon ranje ak ranje asosyasyon.

Li prèske klè - ou ka viv. Ann eseye ekri Hello, world:

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Kisa nou wè? Sa a se sentaks ki sanble ak C, pwent-vir a opsyonèl. Li kapab yon separasyon pou de liy, men sèlman si sa yo se de konstriksyon ki sou menm liy lan.

Nou wè parantèz nan estrikti kontwòl (nan 14yèm liy lan) yo opsyonèl, men aparèy òtopedik boukle yo toujou obligatwa. Nou wè ke sezisman an se estatik. Yo pran Tim pi fò nan tan an. Egzanp sa a se yon ti kras pi konplike pase abityèl Hello, mond lan - jis montre ke gen yon bibliyotèk.

Ki lòt bagay nou wè ki enpòtan? Kòd la òganize an pakè. Ak nan lòd yo sèvi ak yon pake nan pwòp kòd ou a, ou bezwen enpòte li lè l sèvi avèk direktiv la enpòte - sa a se tou enpòtan. Nou lanse li - li travay. Gwo!

Ann eseye yon bagay ki pi konplike pwochen: Bonjou, mond, men se sèlman kounye a li se yon sèvè http. Kisa nou wè ki enteresan isit la?

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Premyèman, fonksyon an aji kòm yon paramèt. Sa vle di ke fonksyon nou an se "premye klas sitwayen" epi ou ka fè anpil bagay enteresan ak li nan yon style fonksyonèl. Apre sa, nou wè yon bagay inatandi: direktiv enpòtasyon an lyen dirèkteman nan depo GitHub la. Se vre, se konsa li ye - anplis, se konsa li ta dwe fè.

Nan Go, idantifyan inivèsèl yon pake se url depo li yo. Gen yon sèvis piblik espesyal Goget ki pral chache tout depandans yo, telechaje yo, enstale yo, konpile yo epi prepare yo pou itilize si sa nesesè. An menm tan an, Goget konnen sou html-meta. An konsekans, ou ka kenbe yon anyè http ki pral genyen lyen ki mennen nan depo espesifik ou a (jan nou fè, pou egzanp).

Ki lòt bagay nou wè? Http ak Json nan bibliyotèk estanda a. Gen, evidamman, entwospeksyon - refleksyon, ki ta dwe itilize nan kodaj/json, paske nou tou senpleman ranplase kèk objè abitrè pou li.

Nou kouri li epi wè ke nou gen kòd itil nan 20 liy, ki konpile, kouri ak rapòte chaj aktyèl mwayèn nan machin nan (sou machin nan sou ki li te lanse).
Ki lòt bagay ki enpòtan ke nou ka imedyatman wè isit la? Li se konpile nan yon sèl estatik binè (buinary). Binè sa a pa gen okenn depandans ditou, pa gen okenn bibliyotèk! Ou ka kopye li nan nenpòt sistèm, kouri li imedyatman, epi li pral travay.

Ann avanse.

Ale: Metòd ak Entèfas

Ale gen metòd. Ou ka deklare yon metòd pou nenpòt kalite koutim. Anplis, sa a se pa nesesèman yon estrikti, men petèt yon alyas nan kèk kalite. Ou ka deklare yon alyas pou N32 epi ekri metòd pou li fè anyen ki itil.

Ak isit la nou tonbe nan yon stupèr pou premye fwa... Li sanble ke Go pa gen klas kòm sa yo. Moun ki konnen Go ta ka di ke gen enklizyon kalite, men sa a se yon lòt bagay antyèman. Pi bonè yon pwomotè sispann panse de li kòm eritaj, pi bon an. Pa gen klas nan Go, e pa gen eritaj tou.

Kesyon! Ki sa konpayi otè Google ki te dirije a ban nou pou reflete konpleksite mond lan? Yo te ban nou interfaces!

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

Yon koòdone se yon kalite espesyal ki pèmèt ou ekri tou senpleman metòd, siyati metòd. Anplis de sa, nenpòt ki kalite metòd sa yo egziste (yo egzekite) ap koresponn ak koòdone sa a. Sa vle di ke ou ka tou senpleman dekri fonksyon ki koresponn lan pou yon kalite, pou yon lòt (ki koresponn ak kalite koòdone sa a). Apre sa, deklare yon varyab ki kalite koòdone sa a epi bay nenpòt nan objè sa yo.

Pou fanatik hardcore, mwen ka di ke varyab sa a pral aktyèlman gen de konsèy: youn nan done yo, lòt la nan yon tablo espesyal nan deskriptè, ki se tipik pou kalite patikilye sa a, pou koòdone nan kalite sa a. Sa vle di, konpilatè a kreye tab deskriptè sa yo nan moman lyen an.

Ak nan Go, nan kou, gen endikasyon anile. Koòdone mo {} (avèk de atèl boukle) se yon varyab ki pèmèt ou lonje dwèt sou nenpòt objè an prensip.
Jiskaprezan tout bagay anfòm, tout bagay abitye. Pa gen anyen etone.

Ale: goroutines

Koulye a, nou rive nan sa ki enterese nou: pwosesis ki lejè - goroutines (goroutines) nan tèminoloji Go.

Alexey Naydenov. ITooLabs. Ka devlopman sou platfòm telefòn Go (Golang). Pati 1

  1. Premyèman, yo vrèman lejè (mwens pase 2 KB).
  2. Dezyèmman, depans pou kreye tankou yon goroutine yo neglijab: ou ka kreye yon mil nan yo pou chak segonn - pa gen anyen ki pral rive.
  3. Yo sèvi pa pwòp pwogramè yo, ki tou senpleman transfere kontwòl soti nan yon goroutine nan yon lòt.
  4. Nan ka sa a, kontwòl yo transfere nan ka sa yo:
    • si ekspresyon go a rankontre (si goroutine la kòmanse pwochen goroutine);
    • si yon apèl Entrée/Sòti bloke pèmèt;
    • si koleksyon fatra kòmanse;
    • si gen kèk operasyon ak chanèl te lanse.

Sa vle di, chak fwa yon pwogram Go kouri sou yon òdinatè, li detèmine kantite nwayo nan sistèm nan, lanse anpil fil jan sa nesesè (konbyen nwayo ki nan sistèm nan oswa konbyen ou te di li). An konsekans, pwogramè a pral kouri sa yo fil ki lejè nan ekzekisyon sou tout fil sistèm operasyon sa yo nan chak nwayo.

Li ta dwe remake ke sa a se fason ki pi efikas yo itilize fè. Anplis sa yo montre, nou fè anpil plis. Nou fè, pou egzanp, sistèm DPI ki pèmèt yon sèl inite sèvi 40 gigabit (depann de sa k ap pase nan liy sa yo).

Gen, menm anvan Go, nou te itilize egzakteman menm konplo a pou jisteman rezon sa a: paske li pèmèt nou prezève lokalite a nan kachèt la processeur ak siyifikativman redwi kantite switch OS kontèks (ki tou pran anpil tan). Mwen repete: sa a se fason ki pi efikas pou itilize fè.

Egzanp sa a senp 21 liy se yon egzanp ki tou senpleman fè eko-sèvè. Tanpri sonje ke fonksyon an sèvi trè senp, li lineyè. Pa gen okenn apèl, pa bezwen deranje ak panse... Ou jis li ak ekri!

An menm tan an, si ou li ak ekri, li ta dwe aktyèlman bloke - sa a se goroutine tou senpleman mete nan yon keu epi pran pa orè a lè ekzekisyon vin posib ankò. Sa vle di, kòd senp sa a ka aji kòm yon sèvè eko pou koneksyon anpil jan OS la sou machin sa a pèmèt.

Pou kontinye trè byento...

Kèk piblisite 🙂

Mèsi paske w rete avèk nou. Ou renmen atik nou yo? Vle wè plis kontni enteresan? Sipòte nou pa mete yon lòd oswa rekòmande pou zanmi, nwaj VPS pou devlopè soti nan $ 4.99, yon analogue inik nan sèvè nivo antre, ki te envante pa nou pou ou: Tout verite sou VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps soti nan $ 19 oswa ki jan yo pataje yon sèvè? (disponib ak RAID1 ak RAID10, jiska 24 nwayo ak jiska 40GB DDR4).

Dell R730xd 2 fwa pi bon mache nan sant done Equinix Tier IV nan Amstèdam? Sèlman isit la 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV soti nan $199 nan Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - soti nan $ 99! Li sou Ki jan yo bati enfrastrikti corp. klas ak itilizasyon Dell R730xd E5-2650 v4 serveurs ki vo 9000 ero pou yon jounen travay?

Sous: www.habr.com

Add nouvo kòmantè