Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Alexey Naydenov, CEO ITooLabs, tham txog kev txhim kho kev sib txuas lus platform rau cov neeg ua haujlwm hauv xov tooj hauv Go (Golang) programming lus. Alexey tseem qhia nws cov kev paub dhau los hauv kev xa tawm thiab ua haujlwm ntawm lub platform hauv ib qho ntawm cov neeg siv xov tooj loj tshaj plaws Asian, uas tau siv lub platform los muab cov kev pabcuam xa ntawv suab (VoiceMail) thiab Virtual PBX (Cloud PBX).

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Alexey Naydenov (tom qab no - AN): - Nyob zoo txhua tus! Kuv lub npe yog Alexey Naydenov. Kuv yog tus thawj coj ntawm ITooLabs. Ua ntej tshaj plaws, kuv xav teb tias kuv ua dab tsi ntawm no thiab kuv tau ua li cas ntawm no.

Yog tias koj saib ntawm Bitrix24 Marketplace (section "Telephony"), ces 14 daim ntawv thov thiab 36 uas nyob ntawd (40%) yog peb:

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Ntau qhov tseeb, cov no yog peb cov neeg ua haujlwm koom tes, tab sis tom qab tag nrho qhov no yog peb lub platform (Platform as a Service) - qhov peb muag rau lawv rau ib lub nyiaj me me. Qhov tseeb, kuv xav tham txog kev txhim kho ntawm lub platform no thiab peb tuaj mus rau qhov twg.

Tus lej rau peb lub platform tam sim no:

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

44 tus neeg ua haujlwm koom tes, suav nrog Megafon. Feem ntau hais lus, peb yeej nyiam mus taug txuj kev nyuaj sib txawv, thiab peb muaj kev nkag mus rau 100 lab tus neeg siv ntawm 44 tus tswv ntawm no hauv Russia. Yog li ntawd, yog tias leej twg muaj tswv yim ua lag luam, peb yuav zoo siab mloog lawv txhua lub sijhawm.

  • 5000 cov tuam txhab siv.
  • 20 tus neeg siv khoom hauv tag nrho. Qhov no yog tag nrho b000b - peb ua haujlwm nrog cov tuam txhab nkaus xwb.
  • 300 hu rau ib feeb thaum nruab hnub.
  • 100 lab hu rau feeb xyoo tas los (peb ua kev zoo siab). Qhov no tsis suav nrog kev sib tham sab hauv uas muaj nyob rau ntawm peb lub platform.

Nws pib li cas?

Yuav ua li cas cov dudes txoj cai txawm pib ua lawv lub platform? Peb kuj yuav tsum coj mus rau hauv tus account tias peb muaj keeb kwm ntawm "hardcore enterprise" kev txhim kho, thiab txawm nyob rau lub sij hawm meej tshaj plaws ntawm lub xyoo rau kev lag luam! Nws yog lub sijhawm zoo siab thaum koj tuaj rau cov neeg siv khoom thiab hais tias: "Peb xav tau ob peb lub servers ntxiv." Thiab tus neeg siv khoom: β€œTsis muaj lus nug! Peb muaj kaum hauv lub khib. "

Yog li peb tau ua Oracle, Java, WebSphere, Db2 thiab txhua yam khoom ntawd. Yog li ntawd, peb tau coj, ntawm chav kawm, qhov zoo tshaj plaws cov neeg muag khoom daws teeb meem, kev koom ua ke lawv thiab sim coj tawm nrog nws. Peb taug kev ntawm peb tus kheej. Qhov no yuav yog xws li ib tug internal startup.

Tag nrho cov no tau pib hauv 2009. Txij li xyoo 2006, peb tau koom tes nrog cov neeg siv kev daws teeb meem, ib txoj kev lossis lwm qhov. Peb tau ua ntau yam kev cai virtual PBXs (zoo li qhov peb tam sim no muaj nyob rau hauv kev txiav txim): peb tau saib nws, txiav txim siab tias nws yog qhov zoo, thiab txiav txim siab pib qhov pib sab hauv.

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Peb tau txais VMWare. Txij li thaum peb nyob ntawm peb tus kheej, peb yuav tsum tau tso tseg tam sim ntawd cov neeg muag khoom txias cia. Peb paub txhua yam txog lawv: cov lus cog tseg yuav tsum muab faib los ntawm 3, thiab tus nqi yuav tsum tau muab faib ua 10. Yog vim li cas lawv thiaj ua DirDB thiab lwm yam.

Ces nws pib loj hlob. Ib qho kev pabcuam them nqi tau ntxiv rau qhov no vim tias lub platform tsis tuaj yeem tiv taus ntxiv lawm. Tom qab ntawd tus nqi them nyiaj los ntawm MySQL tsiv mus rau Mongo. Yog li ntawd, peb tau txais kev daws teeb meem ua haujlwm uas ua tiav txhua qhov kev hu mus rau ntawd:

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Tab sis qhov chaw sab hauv, tib tus neeg muag khoom cov khoom yog spinning - lub ntsiab, nuclear ib, uas peb ib zaug coj. Nyob ib ncig ntawm qhov kawg ntawm 2011, peb pom tau hais tias lub ntsiab bottleneck rau peb, ntawm chav kawm, yuav yog cov khoom tshwj xeeb no - peb yuav khiav mus rau hauv nws. Peb pom ib phab ntsa nyob rau hauv pem hauv ntej ntawm peb, nyob rau hauv uas peb tau khiav ntawm tag nrho cov gallop, raws li ntau tus neeg tuaj.
Yog li ntawd, peb yuav tsum ua ib yam dab tsi. Tau kawg, peb tau tshawb fawb ntau heev ntawm ntau yam khoom - ob qho tib si qhib qhov chaw thiab cov neeg muag khoom. Kuv yuav tsis nyob ntawm no tam sim no - tsis yog qhov peb tab tom tham txog. Qhov kev xaiv zaum kawg kawg uas peb xav txog yog ua peb tus kheej lub platform.

Thaum kawg, peb tuaj rau qhov kev xaiv no. Vim li cas? Vim tias txhua tus neeg muag khoom thiab cov khoom qhib tau tsim los daws cov teeb meem uas muaj hnub nyoog 10 xyoo. Zoo, yog tias muaj 10 xyoo, thiab qee qhov ntxiv! Qhov kev xaiv tau dhau los ua pom tseeb rau peb: txawm tias peb hais lus zoo rau peb lub tswv yim zoo ntawm kev pabcuam zoo tshaj plaws (rau cov neeg koom tes, cov neeg ua haujlwm thiab peb tus kheej), lossis peb ua qee yam ntawm peb tus kheej.

Peb txiav txim siab ua ib yam ntawm peb tus kheej!

Platform xav tau

Yog tias koj tau ua ib yam dab tsi ntev (siv lwm tus neeg cov khoom), ces qhov kev xav maj mam tsim hauv koj lub taub hau: Kuv yuav ua li cas rau kuv tus kheej? Txij li thaum peb yog tag nrho cov programmers hauv lub tuam txhab (tshwj tsis yog cov neeg muag khoom, tsis muaj cov programmers), peb cov kev cai tsim tau ntev dhau los, thiab lawv tau meej:

  1. Kev loj hlob ceev. Cov khoom muag uas tsim txom peb tsis txaus siab, ua ntej ntawm tag nrho cov, vim hais tias txhua yam tig tawm ntev thiab maj mam. Peb xav tau sai sai - peb muaj ntau lub tswv yim! Peb tseem muaj ntau lub tswv yim, tab sis tom qab ntawd cov npe ntawm cov tswv yim zoo li ntawd zoo li kaum xyoo ua ntej. Tam sim no tsuas yog rau ib xyoos xwb.
  2. Kev siv ntau tshaj plaws ntawm ntau cov tub ntxhais hlau. Qhov no kuj tseem ceeb rau peb, vim peb pom tias tsuas muaj ntau thiab ntau cov cores.
  3. Kev ntseeg siab. Ib yam peb kuj quaj nrog.
  4. Kev ua haujlwm siab rau kev ua tsis tiav.
  5. Peb xav kom xaus nrog cov txheej txheem ntawm kev tso tawm txhua hnub. Rau qhov no peb xav tau kev xaiv hom lus.

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Raws li, los ntawm cov kev cai rau cov khoom uas peb tau teem rau peb tus kheej, cov kev cai rau cov lus loj hlob nyob rau hauv ib tug kom meej lub tswv yim txoj kev.

  1. Yog tias peb xav tau kev txhawb nqa rau ntau lub tshuab ua haujlwm, ces peb xav tau kev txhawb nqa rau kev ua haujlwm sib luag.
  2. Yog tias peb xav tau kev loj hlob ceev, peb xav tau ib hom lus uas txhawb nqa kev sib tw, kev sib tw programming. Yog tias leej twg tsis tau ntsib qhov txawv, nws yooj yim heev:
    • Parallel programming yog hais txog yuav ua li cas ob txoj xov sib txawv raug tua ntawm cov cores sib txawv;
    • Concurrent execution, los yog ntau precisely, concurrency support, yog hais txog yuav ua li cas ib hom lus (los yog runtime, nws tsis muaj teeb meem) pab nkaum tag nrho cov complexity uas los ntawm parallel execution.
  3. Siab ruaj khov. Obviously, peb xav tau ib pawg, thiab ib qho zoo dua li peb muaj ntawm tus neeg muag khoom cov khoom.

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Peb yeej tsis muaj ntau txoj kev xaiv, yog tias koj nco qab. Ua ntej, Erlang - peb hlub thiab paub nws, nws yog kuv tus kheej, tus kheej nyiam. Qhov thib ob, Java tsis yog Java, tab sis tshwj xeeb Scala. Thib peb, ib hom lus uas lub sijhawm ntawd peb tsis paub txhua - Mus. Nws nyuam qhuav tshwm sim thaum ntawd, lossis qhov ntawd, nws twb muaj txog li ob xyoos, tab sis tseem tsis tau tso tawm.

Mus yeej!

Keeb kwm ntawm Go

Peb tau ua ib lub platform rau nws. Kuv mam li sim piav vim li cas.

Keeb Kwm Luv ntawm Go. Nws pib nyob rau hauv 2007, qhib nyob rau hauv 2009, thawj version tau tso tawm nyob rau hauv 2012 (uas yog, peb pib ua hauj lwm txawm ua ntej thawj tso tawm). Tus pib yog Google, uas xav hloov, raws li kuv xav tias, Java.

Cov kws sau ntawv muaj npe nrov heev:

  • Ken Thomson, uas yog tom qab Unix, tsim UTF-8, ua haujlwm ntawm Plan 9 system;
  • Rob Pike, uas tau tsim UTF-8 nrog Ken, kuj tau ua haujlwm ntawm Plan 9, Inferno, Limbo ntawm Tswb Labs;
  • Robert Giesmer, uas peb paub thiab hlub rau kev tsim Java HotSpot Compiler thiab rau nws txoj haujlwm ntawm lub tshuab hluav taws xob hauv V8 (Google tus txhais lus Javascript);
  • Thiab ntau dua 700 tus neeg koom nrog, suav nrog qee qhov ntawm peb thaj ua rau thaj.

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Mus: thawj saib

Peb pom tias hom lus no yooj yim dua los sis tsawg dua thiab nkag siab. Peb muaj cov hom kev pom tseeb: qee qhov lawv yuav tsum tau tshaj tawm, hauv lwm qhov lawv tsis tsim nyog (qhov no txhais tau hais tias cov hom yog inferred ib txoj kev los yog lwm yam).

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Nws tuaj yeem pom tias nws yog fashionable los piav txog cov qauv. Nws tuaj yeem pom tau tias peb muaj lub tswv yim ntawm tus taw tes (qhov twg lub hnub qub yog). Nws tuaj yeem pom tau tias muaj kev txhawb nqa tshwj xeeb rau kev tshaj tawm qhov pib ntawm arrays thiab associative arrays.

Nws yuav luag meej - koj tuaj yeem ua neej nyob. Wb sim sau nyob zoo, ntiaj teb:

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Peb pom dab tsi? Qhov no yog C-zoo li syntax, lub semicolon yog xaiv tau. Nws tuaj yeem yog qhov sib cais rau ob kab, tab sis tsuas yog tias cov no yog ob qho kev tsim kho uas nyob ntawm tib kab.

Peb pom tias cov hlua khi hauv cov qauv tswj (hauv kab 14) yog xaiv tau, tab sis cov hlua khi curly yeej ib txwm xav tau. Peb pom tias kev ntaus ntawv zoo li qub. Tim raug tshem tawm ntau lub sijhawm. Qhov piv txwv no yog qhov nyuaj me ntsis dua li qhov niaj hnub Hello, ntiaj teb - tsuas yog qhia tias muaj lub tsev qiv ntawv.

Dab tsi ntxiv uas peb pom tias tseem ceeb? Cov cai raug muab tso rau hauv pob. Thiab txhawm rau siv lub pob hauv koj tus kheej cov cai, koj yuav tsum tau import nws siv cov lus qhia ntshuam - qhov no tseem ceeb heev. Peb tso nws - nws ua haujlwm. Zoo heev!

Cia peb sim ib yam dab tsi nyuaj ntxiv tom ntej: Nyob zoo, ntiaj teb, tab sis tsuas yog tam sim no nws yog http server. Peb pom dab tsi nthuav ntawm no?

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Ua ntej, qhov muaj nuj nqi ua raws li qhov parameter. Qhov no txhais tau tias peb txoj haujlwm yog "thawj pej xeem hauv chav kawm" thiab koj tuaj yeem ua ntau yam nthuav nrog nws hauv kev ua haujlwm zoo. Tom ntej no peb pom ib yam dab tsi uas tsis tau xav txog: cov lus qhia ntshuam txuas ncaj qha mus rau GitHub repository. Yog lawm, qhov ntawd yog txoj kev nws yog - Ntxiv mus, qhov ntawd yog txoj kev nws yuav tsum ua.

Hauv Go, tus cim thoob ntiaj teb ntawm ib pob yog qhov url ntawm nws qhov chaw cia khoom. Nws muaj cov khoom siv tshwj xeeb Goget uas yuav nqa tag nrho cov kev vam khom, rub tawm, nruab lawv, sau lawv thiab npaj lawv siv yog tias tsim nyog. Tib lub sijhawm, Goget paub txog html-meta. Raws li, koj tuaj yeem khaws ib phau ntawv http uas yuav muaj cov kev txuas mus rau koj qhov chaw cia khoom tshwj xeeb (raws li peb ua, piv txwv).

Peb pom dab tsi ntxiv? Http thiab Json hauv lub tsev qiv ntawv txheem. Muaj, obviously, introspection - xav txog, uas yuav tsum tau siv nyob rau hauv encoding / json, vim hais tias peb tsuas hloov ib co arbitrary khoom rau nws.

Peb khiav nws thiab pom tias peb muaj cov cai muaj txiaj ntsig hauv 20 kab, uas suav nrog, khiav thiab tshaj tawm qhov nruab nrab ntawm lub tshuab tam sim no (ntawm lub tshuab uas nws tau pib).
Dab tsi ntxiv tseem ceeb uas peb tuaj yeem pom tam sim no? Nws tau muab tso ua ke rau hauv ib qho static binary (buinary). Qhov binary no tsis muaj kev vam meej, tsis muaj tsev qiv ntawv! Koj tuaj yeem luam nws mus rau txhua qhov system, khiav nws tam sim ntawd, thiab nws yuav ua haujlwm.

Cia peb mus.

Mus: Txoj Kev thiab Interfaces

Mus muaj txoj kev. Koj tuaj yeem tshaj tawm ib txoj hauv kev rau txhua hom kev cai. Ntxiv mus, qhov no tsis tas yuav yog ib qho qauv, tab sis tej zaum yog ib lub npe ntawm qee yam. Koj tuaj yeem tshaj tawm lub npe rau N32 thiab sau cov txheej txheem rau nws ua txhua yam muaj txiaj ntsig.

Thiab ntawm no peb poob rau hauv stupor thawj zaug ... Nws hloov tawm tias Go tsis muaj cov chav kawm li ntawd. Cov neeg paub Go yuav hais tias muaj hom kev suav nrog, tab sis qhov ntawd yog lwm yam nkaus. Qhov sai dua tus tsim tawm tsis xav txog nws li qub txeeg qub teg, qhov zoo dua. Tsis muaj chav kawm hauv Go, thiab tsis muaj qhov qub txeeg qub teg.

Lus nug! Lub tuam txhab ntawm cov kws sau ntawv coj los ntawm Google tau muab rau peb li cas txhawm rau txhawm rau cuam tshuam txog kev nyuaj ntawm lub ntiaj teb? Lawv muab peb interfaces!

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

Ib qho interface yog ib hom tshwj xeeb uas tso cai rau koj los sau cov txheej txheem yooj yim, cov qauv kos npe. Tsis tas li ntawd, txhua yam uas cov txheej txheem no muaj nyob (yog raug tua) yuav raug rau qhov kev sib tshuam no. Qhov no txhais tau hais tias koj tuaj yeem piav qhia txog cov haujlwm sib raug rau ib hom, rau lwm qhov (uas sib xws rau hom interface ntawd). Tom ntej no, tshaj tawm qhov sib txawv ntawm hom ntawm no interface thiab muab ib qho ntawm cov khoom no rau nws.

Rau cov kiv cua hardcore, kuv tuaj yeem hais tias qhov sib txawv no yuav muaj ob lub ntsiab lus: ib qho rau cov ntaub ntawv, lwm qhov mus rau lub rooj tshwj xeeb ntawm cov lus piav qhia, uas yog qhov zoo rau hom tshwj xeeb, rau qhov sib txuas ntawm hom no. Ntawd yog, lub compiler tsim cov lus piav qhia thaum lub sijhawm sib txuas.

Thiab hauv Go, tau kawg, muaj cov taw qhia kom tsis muaj dab tsi. Lo lus interface {} (nrog ob curly braces) yog qhov sib txawv uas tso cai rau koj taw tes rau txhua yam khoom hauv txoj cai.
Txog tam sim no txhua yam zoo, txhua yam yeej paub. Tsis muaj dab tsi ceeb.

Mus: goroutines

Tam sim no peb tuaj rau qhov peb nyiam: cov txheej txheem sib sib zog nqus - goroutines (goroutines) hauv Go terminology.

Alexey Naydenov. ITooLabs. Case ntawm kev txhim kho ntawm Go (Golang) xov tooj platform. Ntu 1

  1. Ua ntej, lawv hnyav heev (tsawg dua 2 KB).
  2. Thib ob, cov nqi ntawm kev tsim cov goroutine zoo li no tsis tsim nyog: koj tuaj yeem tsim ib txhiab ntawm lawv ib ob - tsis muaj dab tsi yuav tshwm sim.
  3. Lawv tau txais kev pabcuam los ntawm lawv tus kheej lub sijhawm teem sijhawm, uas tsuas yog hloov pauv kev tswj hwm ntawm ib lub goroutine mus rau lwm qhov.
  4. Hauv qhov no, kev tswj hwm tau pauv mus rau hauv cov xwm txheej hauv qab no:
    • Yog hais tias qhov mus qhia tau ntsib (yog tias tus goroutine pib lub goroutine tom ntej);
    • yog tias thaiv kev nkag / tawm hu tau qhib;
    • yog tias pib sau cov khib nyiab;
    • yog tias qee qhov kev ua haujlwm nrog cov channel tau pib.

Ntawd yog, thaum twg Go program khiav ntawm lub khoos phis tawj, nws txiav txim siab tus naj npawb ntawm cov cores hauv lub kaw lus, xa tawm ntau cov xov raws li xav tau (peb muaj pes tsawg cores nyob rau hauv lub kaw lus lossis pes tsawg tus koj tau hais rau nws). Raws li, tus teem sij hawm yuav khiav cov xov sib sib zog nqus ntawm kev ua tiav ntawm tag nrho cov kev khiav hauj lwm cov xov hauv txhua qhov tseem ceeb.

Nws yuav tsum raug sau tseg tias qhov no yog txoj hauv kev zoo tshaj plaws los siv hlau. Ntxiv rau qhov uas tau qhia, peb ua ntau yam ntxiv. Peb ua, piv txwv li, DPI systems uas tso cai rau ib chav ua haujlwm rau 40 gigabits (nyob ntawm seb muaj dab tsi tshwm sim hauv cov kab no).

Nyob ntawd, txawm tias ua ntej mus, peb tau siv tib lub tswv yim rau qhov tseeb vim li no: vim tias nws tso cai rau peb khaws cia cov chaw ntawm cov processor cache thiab txo cov naj npawb ntawm OS cov ntsiab lus hloov pauv (uas kuj siv sijhawm ntau). Kuv rov hais dua: qhov no yog txoj hauv kev zoo tshaj plaws los siv hlau.

Qhov no yooj yim 21 kab piv txwv yog ib qho piv txwv uas tsuas yog echo-server. Thov nco ntsoov tias txoj haujlwm pabcuam yog qhov yooj yim heev, nws yog linear. Tsis muaj callbacks, tsis tas yuav thab thiab xav ... Koj tsuas yog nyeem thiab sau!

Nyob rau tib lub sijhawm, yog tias koj nyeem thiab sau, nws yuav tsum tau thaiv - qhov goroutine no tsuas yog muab tso rau hauv ib kab thiab coj los ntawm tus teem sijhawm thaum ua tiav rov ua dua. Ntawd yog, txoj cai yooj yim no tuaj yeem ua tus ncha server rau ntau qhov kev sib txuas raws li OS ntawm lub tshuab tso cai.

Yuav tau txuas ntxiv sai sai no...

Ib co ads πŸ™‚

Ua tsaug uas koj tau nyob nrog peb. Koj puas nyiam peb cov ntawv? Xav pom cov ntsiab lus nthuav ntxiv? Txhawb nqa peb los ntawm kev tso ib qho kev txiav txim lossis qhia rau cov phooj ywg, huab VPS rau cov tsim tawm los ntawm $ 4.99, ib qho tshwj xeeb analogue ntawm nkag-theem servers, uas tau tsim los ntawm peb rau koj: Qhov tseeb tag nrho txog VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps los ntawm $ 19 los yog yuav ua li cas faib cov server? (muaj nrog RAID1 thiab RAID10, mus txog 24 cores thiab mus txog 40GB DDR4).

Dell R730xd 2x pheej yig dua hauv Equinix Tier IV data center hauv Amsterdam? Tsuas yog nyob ntawm no 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV los ntawm $ 199 hauv Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - los ntawm $ 99! Nyeem txog Yuav ua li cas tsim infrastructure Corp. chav kawm nrog kev siv Dell R730xd E5-2650 v4 servers muaj nqis 9000 euros rau ib lub nyiaj?

Tau qhov twg los: www.hab.com

Ntxiv ib saib