Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Alexei Naidenov, Ceannard ITooLabs, a’ bruidhinn air leasachadh àrd-ùrlar cian-conaltraidh airson luchd-obrachaidh cian-chonaltraidh anns a’ chànan prògramadh Go (Golang). Bidh Alexey cuideachd a’ roinn a chuid eòlais air a bhith a’ cleachdadh agus ag obrachadh an àrd-ùrlar ann an aon de na gnìomhaichean cian-chonaltraidh Àisianach as motha, a chleachd an àrd-ùrlar gus post-gutha (VoiceMail) agus seirbheisean Virtual PBX (Cloud PBX) a thoirt seachad.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Alexey Naydenov (an dèidh seo - AN): - Hi uile! Is e m ’ainm Alexei Naidenov. Tha mi nam stiùiriche air ITooLabs. An toiseach, bu mhath leam freagairt a thoirt air na tha mi a 'dèanamh an seo agus mar a chrìochnaich mi an seo.

Ma choimheadas tu air Bitrix24 Marketplace (roinn “Fòn”), is e sinne 14 tagraidhean agus 36 a tha ann (40%):

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Nas mionaidiche, is iad sin na companaidhean com-pàirteach againn, ach air cùl seo tha an àrd-ùrlar againn (Àrd-ùrlar mar Sheirbheis) - na bhios sinn a’ reic riutha airson sgillinn bheag. Gu fìrinneach, bu mhath leam bruidhinn mu leasachadh an àrd-ùrlar seo agus mar a thàinig sinn gu Go.

Is e na h-àireamhan airson an àrd-ùrlar againn a-nis:

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

44 gnìomhaiche com-pàirteach, nam measg MegaFon. San fharsaingeachd, is toil leinn a dhol air tachartasan, agus gu dearbh tha cothrom againn air 100 millean neach-clàraidh de 44 gnìomhaichean an seo san Ruis. Mar sin, ma tha beachdan gnìomhachais aig cuideigin, bidh sinn an-còmhnaidh toilichte èisteachd riutha.

  • 5000 companaidhean luchd-cleachdaidh.
  • 20 fo-sgrìobhaichean uile gu lèir. Tha e uile b000b - chan obraich sinn ach le companaidhean.
  • 300 fios gach mionaid tron ​​latha.
  • 100 millean mionaid gairm an-uiridh (chomharraich sinn). Tha seo gun a bhith a’ toirt aire do na còmhraidhean taobh a-staigh a tha air an àrd-ùrlar againn.

Ciamar a thòisich e?

Ciamar a thòisicheas na dudes ceart a’ dèanamh an àrd-ùrlar aca fhèin? Feumaidh sinn cuideachd a bhith mothachail gu robh eachdraidh de leasachadh "hardcore iomairt" againn, agus eadhon aig an àm as cinntiche den bhliadhna airson iomairt! B ’e an àm toilichte sin a bh’ ann nuair a thig thu chun neach-ceannach agus ag ràdh: “Tha feum againn air càraid a bharrachd frithealaichean." Agus an neach-ceannach: “Tha, gun cheist! Tha deichnear againn anns a’ chrann.

Mar sin rinn sinn Oracle, Java, WebSphere, Db2 agus sin uile. Mar sin, ghabh sinn, gu dearbh, na fuasglaidhean reiceadair as fheàrr, gan amalachadh agus dh’ fheuch sinn ri toirt air falbh leis. Chluich iad leotha fhèin. Bhiodh e na leithid de thòiseachadh a-staigh.

Thòisich e uile ann an 2009. Bho 2006, tha sinn air a bhith gu dlùth an sàs ann an co-dhùnaidhean gnìomhaiche, aon dòigh no dòigh eile. Rinn sinn grunn PBXan brìgheil àbhaisteach (mar a tha againn a-nis air òrdugh): choimhead sinn, cho-dhùin sinn gu robh e math, agus chuir sinn romhainn tòiseachadh a-staigh a bhrosnachadh.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Gabh VMWare. Leis gu robh sinn a’ coiseachd leinn fhìn, b’ fheudar dhuinn an reiceadair fionnar Storage a thrèigsinn sa bhad. Tha fios againn uile mun deidhinn: bu chòir na geallaidhean sin a bhith air an roinn le 3, agus bu chòir an cosgais a bhith air iomadachadh le 10. Mar sin, rinn sinn DirDB agus mar sin air adhart.

An uairsin thòisich e a 'fàs. Chaidh an t-seirbheis cunntais a chuir ri seo, leis nach b’ urrainn don àrd-ùrlar dèiligeadh tuilleadh. An uairsin ghluais am frithealaiche bileachaidh bho MySQL gu Mongo. Mar thoradh air an sin, fhuair sinn fuasgladh obrach a bhios a’ làimhseachadh a h-uile fios a thèid ann:

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Ach an àiteigin an sin, a-staigh, tha an aon toradh reiceadair a ’snìomh - am prìomh fhear, niùclasach, a ghabh sinn aon uair. Mu thimcheall ro dheireadh 2011, thuig sinn dhuinn fhìn gur e am prìomh bhotal dhuinn, gu dearbh, an toradh sònraichte seo - ruithidh sinn a-steach dha. Chunnaic sinn balla air ar beulaibh, anns an do ruith sinn aig làn ghal, mar a bha luchd-ceannach a 'coiseachd, air an cur ris.
Mar sin, bha againn ri rudeigin a dhèanamh. Gu dearbh, rinn sinn tòrr rannsachaidh air diofar thoraidhean - an dà chuid stòr fosgailte agus feadhainn reic. Cha ghabh mi còmhnaidh air seo a-nis - chan e sin a 'phuing. B’ e an cùl-taic mu dheireadh a smaoinich sinn air ar n-àrd-ùrlar fhèin a chruthachadh.

Mu dheireadh, thàinig sinn chun roghainn seo. Carson? Leis gun deach a h-uile toradh reiceadair agus stòr fosgailte a dhèanamh gus fuasgladh fhaighinn air duilgheadasan 10 bliadhna air ais. Uill, ma tha leanabh 10-bliadhna, agus cuid eile! Tha an roghainn air fàs follaiseach dhuinn: an dàrna cuid bidh sinn a’ leigeil soraidh leis a’ bheachd mhòr againn air seirbheis air leth (airson com-pàirtichean, gnìomhaichean agus sinn fhìn), no nì sinn rudeigin dhuinn fhìn.

Cho-dhùin sinn rudeigin eadar-dhealaichte a dhèanamh!

Riatanasan àrd-ùrlair

Ma nì thu rudeigin airson ùine mhòr (bidh thu a’ gabhail brath air toradh cuideigin eile), bidh an smuain gu slaodach a’ tighinn nad cheann: ciamar a dhèanadh mi mi-fhìn? Leis gu bheil sinn uile nar prògramadairean anns a ’chompanaidh (ach a-mhàin luchd-reic, chan eil luchd-prògramaidh ann), chaidh na riatanasan againn a chruthachadh airson ùine mhòr, agus bha iad soilleir:

  1. Àrd astar leasachaidh. Cha robh toradh an neach-reic, a bha gar cràdh, a’ freagairt oirnn sa chiad àite oir dh’ obraich a h-uile càil a-mach airson ùine mhòr agus gu slaodach. Bha sinn ag iarraidh luath - bha tòrr bheachdan againn! Tha tòrr bheachdan againn fhathast, ach an uairsin bha an liosta bheachdan cho mòr is gun robh e coltach ri deich bliadhna air thoiseach. A-nis dìreach airson bliadhna.
  2. Cleachdadh as motha de iarann ​​​​ioma-cridhe. Bha seo cudromach dhuinn cuideachd, oir chunnaic sinn nach biodh ann ach barrachd is barrachd choraichean.
  3. Àrd earbsachd. An tè a ghlaodh sinn cuideachd.
  4. Fulangas locht àrd.
  5. Bha sinn airson crìoch a chuir air pròiseas fuasglaidh làitheil. Airson seo a dhèanamh, bha feum againn air taghadh cànain.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Mar sin, bho na riatanasan airson an toradh a tha sinn air a thaisbeanadh dhuinn fhìn, tha na riatanasan airson a’ chànain a’ fàs ann an dòigh a tha soilleir gu loidsigeach.

  1. Ma tha sinn ag iarraidh taic airson siostaman ioma-cridhe, feumaidh sinn taic airson coileanadh co-shìnte.
  2. Ma tha feum againn air astar leasachaidh, feumaidh sinn cànan a tha a’ toirt taic do leasachadh farpaiseach, prògramadh farpaiseach. Mura h-eil duine air coinneachadh ris an eadar-dhealachadh, tha e gu math sìmplidh:
    • tha prògramadh co-shìnte mu dheidhinn mar a tha dà snàithlean eadar-dhealaichte a’ ruith air coraichean eadar-dhealaichte;
    • tha coileanadh co-aontach, gu sònraichte taic co-aontach, mu dheidhinn mar a tha an cànan (no runtime, ge bith dè) a’ cuideachadh le bhith a’ falach a h-uile iom-fhillteachd a thig bho choileanadh co-shìnte.
  3. Seasmhachd àrd. Gu dearbh, bha feum againn air brabhsair, agus bha e na b’ fheàrr na na bha againn air toradh an reiceadair.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Cha robh mòran roghainnean againn dha-rìribh, ma chuimhnicheas tu. An toiseach, Erlang - tha sinn dèidheil air agus tha sinn eòlach air, b’ e am fear pearsanta, pearsanta as fheàrr leam. San dàrna h-àite, chan e Java eadhon Java, ach gu sònraichte Scala. San treas àite, a' chainnt nach b'aithne dhuinn aig an àm sin idir — Imich. Bha e dìreach air nochdadh an uairsin, nas mionaidiche, bha e air a bhith ann mu thràth airson timcheall air dà bhliadhna, ach cha deach a leigeil ma sgaoil fhathast.

A’ chùis air falbh!

Eachdraidh Go

Rinn sinn àrd-ùrlar air. Feuchaidh mi ri mìneachadh carson.

Eachdraidh ghoirid air Go. Thòisich e ann an 2007, fhosgladh ann an 2009, chaidh a 'chiad dreach fhoillseachadh ann an 2012 (is e sin, thòisich sinn ag obair eadhon ron chiad fhoillseachadh). B’ e Google an neach-tòiseachaidh, a bha airson Java a chuir na àite, mar a tha mi an amharas.

Tha na h-ùghdaran gu math ainmeil:

  • Dh'innlich Ken MacThòmais, a bha air cùl Unix, UTF-8, air siostam Plana 9;
  • Bha Rob Pike, a dhealbhaich UTF-8 le Ken, cuideachd ag obair air Plan 9, Inferno, Limbo aig Bell Labs;
  • Robert Gizmer, air a bheil sinn eòlach agus measail airson a bhith a 'cruthachadh an Java HotSpot Compiler agus airson a bhith ag obair air a' ghineadair ann an V8 (eadar-theangair Javascript aig Google);
  • Agus còrr air 700 com-pàirtiche, a’ toirt a-steach cuid de na badan againn.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Rach gu sgiobalta

Tha sinn a’ faicinn gu bheil an cànan gu ìre mhòr sìmplidh agus so-thuigsinn. Tha seòrsaichean follaiseach againn: ann an cuid de chùisean feumaidh iad a bhith air an cur an cèill, ann an cuid eile chan eil iad (a 'ciallachadh gu bheil na seòrsaichean air an co-dhùnadh co-dhiù).

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Chithear gu bheil e fasanta cunntas a thoirt air structaran. Chithear gu bheil bun-bheachd puing againn (far a bheil an reult). Chithear gu bheil taic shònraichte ann airson a bhith a’ cur an cèill tùsachadh arrays agus arrays co-cheangail.

Gu math furasta a thuigsinn - faodaidh tu a bhith beò. A’ feuchainn ri Hello, saoghal a sgrìobhadh:

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Dè a chì sinn? Is e seo co-chòrdadh coltach ri C, tha an leth-dhuilleag roghainneil. Faodaidh e a bhith na sgaradh airson dà loidhne, ach dìreach ma tha iad sin nan dà thogalach a tha dìreach air an aon loidhne.

Tha sinn a 'faicinn gu bheil na camagan anns na structaran smachd (air an 14mh loidhne) roghainneil, ach tha feum air feadhainn lùbach an-còmhnaidh. Chì sinn gu bheil an clò-sgrìobhadh statach. Tim sa mhòr-chuid de chùisean air a thaisbeanadh. Tha an eisimpleir seo beagan nas iom-fhillte na an àbhaist Hello, world - dìreach airson sealltainn gu bheil leabharlann ann.

Dè eile a tha sinn a’ faicinn cudromach? Tha an còd air a eagrachadh ann am pasganan. Agus gus am pasgan a chleachdadh sa chòd agad fhèin, feumaidh tu a thoirt a-steach leis an stiùireadh in-mhalairt - tha seo cudromach cuideachd. Bidh sinn a 'tòiseachadh - tha e ag obair. Sgoinneil!

Feuchaidh sinn rudeigin nas toinnte: Halo, an t-saoghail, ach a-nis is e frithealaiche http a th’ ann. Dè tha sinn a’ faicinn inntinneach an seo?

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

An toiseach, tha an gnìomh ag obair mar paramadair. Tha seo a’ ciallachadh gur e “saoranach den chiad ìre” an gnìomh a th’ againn agus faodaidh tu tòrr rudan inntinneach a dhèanamh leis ann an stoidhle gnìomh. Chì sinn an ath rud ris nach robh dùil: tha an stiùireadh in-mhalairt a’ toirt iomradh dìreach air stòr GitHub. Tha sin ceart, sin mar a tha e - a bharrachd air an sin, sin mar a bu chòir a dhèanamh.

Ann an Go, is e aithnichear uile-choitcheann pacaid url an stòrais aige. Tha goireas Goget sònraichte ann a bhios a ’dol airson a h-uile eisimeileachd, gan luchdachadh sìos, gan stàladh, gan cur ri chèile, agus gan ullachadh airson an cleachdadh ma tha sin riatanach. Aig an aon àm, tha fios aig Goget mu dheidhinn html-meta. Mar sin, faodaidh tu eòlaire http a chumail, anns am bi ceanglaichean ris an stòr sònraichte agad (mar a nì sinn, mar eisimpleir).

Dè eile a chì sinn? Http agus Json anns an leabharlann àbhaisteach. Tha, gu follaiseach, introspection - meòrachadh, a bu chòir a chleachdadh ann an còdachadh / json, oir tha sinn dìreach a’ cur rud neo-riaghailteach air a shon.

Bidh sinn ga ruith agus chì sinn gu bheil 20 loidhne de chòd feumail againn a bhios a’ cur ri chèile, a’ ruith agus a’ toirt an luchd cuibheasach gnàthach den inneal (air an inneal air a bheil e a’ ruith).
Dè eile a tha cudromach bho na chì sinn sa bhad an seo? Bidh e a’ cruinneachadh ann an aon binary statach (buinary). Chan eil eisimeileachd sam bith aig a’ binary seo idir, gun leabharlannan! Faodar a chopaigeadh gu siostam sam bith, ruith sa bhad, agus obraichidh e.

A ’gluasad air adhart.

Rach: dòighean agus eadar-aghaidh

Tha dòighean aig Go. Faodaidh tu dòigh fhoillseachadh airson seòrsa àbhaisteach sam bith. A bharrachd air an sin, chan e gu feum structar a tha seo, ach faodaidh e a bhith na alias de sheòrsa air choreigin. Faodaidh tu alias ainmeachadh airson N32 agus dòighean a sgrìobhadh air a shon gus rudeigin feumail a dhèanamh.

Agus seo far a bheil sinn a 'tuiteam a-steach do stupor airson a' chiad uair ... Tha e a 'tionndadh a-mach nach eil Go clasaichean mar sin. Is dòcha gum bi an fheadhainn a tha eòlach air Go ag ràdh gu bheil in-ghabhail seòrsa ann, ach tha seo gu tur eadar-dhealaichte. Mar as luaithe a stadas an leasaiche a bhith a’ smaoineachadh air mar oighreachd, ’s ann as fheàrr. Chan eil clasaichean ann an Go, agus chan eil oighreachd ann nas motha.

Ceist! Dè thug a’ chompanaidh ùghdaran air an stiùireadh le Google dhuinn gus iom-fhillteachd an t-saoghail a thaisbeanadh? Tha sinn air eadar-aghaidh a thoirt dhuinn!

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

Is e seòrsa sònraichte a th’ ann an eadar-aghaidh a leigeas leat dòighean sìmplidh a sgrìobhadh, ainmean modh. A bharrachd air an sin, bidh seòrsa sam bith airson a bheil na dòighean sin ann (air an cur an gnìomh) a rèir an eadar-aghaidh seo. Tha seo a 'ciallachadh gun urrainn dhut dìreach an gnìomh co-fhreagarrach a sgrìobhadh airson aon seòrsa, airson seòrsa eile (a tha a' freagairt ris an t-seòrsa eadar-aghaidh sin). An uairsin, cuir an cèill caochladair den t-seòrsa eadar-aghaidh seo agus sònraich gin de na stuthan sin dha.

Airson luchd-leantainn cruaidh-chruaidh, is urrainn dhomh a ràdh gum bi dà chomharra anns a 'chaochladair seo: aon gu dàta, am fear eile gu clàr tuairisgeul sònraichte a tha sònraichte don t-seòrsa sònraichte seo, don eadar-aghaidh den t-seòrsa seo. Is e sin, bidh an neach-cruinneachaidh a’ dèanamh chlàran de thuairisgeulan mar sin aig àm a’ cheangail.

Agus, gu dearbh, tha comharran ann airson falamh ann an Go. Tha am facal eadar-aghaidh {} (le dà braces lùbach) na chaochladair a leigeas leat rud sam bith a chomharrachadh ann am prionnsapal.
Gu ruige seo, tha a h-uile dad ann an òrdugh, tha a h-uile dad eòlach. Chan eil dad iongantach.

Rach: goroutines

A-nis tha sinn a 'tighinn gu na tha ùidh againn ann: pròiseasan aotrom - goroutines (goroutines) ann am briathrachas Go.

Alexei Naidenov. ITooLabs. Cùis leasachaidh air àrd-ùrlar fòn Go (Golang). Pàirt 1

  1. An toiseach, tha iad gu math aotrom (nas lugha na 2 Kb).
  2. San dàrna h-àite, tha cosgais cruthachadh a leithid de goroutine glè bheag: faodaidh tu mìle dhiubh a chruthachadh gach diog - cha tachair dad.
  3. Bidh an clàr-ama aca fhèin a 'frithealadh orra, a tha dìreach a' gluasad smachd bho aon goroutine gu fear eile.
  4. Anns a 'chùis seo, tha smachd air a ghluasad anns na cùisean a leanas:
    • ma thachras aithris falbh (ma thòisicheas an goroutine an ath goroutine);
    • ma tha gairm bacadh Cuir a-steach/A-mach air a chomasachadh;
    • ma thèid cruinneachadh sgudail a bhrosnachadh;
    • ma thèid beagan obrachaidh le seanalan a thòiseachadh.

Is e sin, nuair a thèid prògram Go a ruith air coimpiutair, bidh e a’ lorg an àireamh de choraichean san t-siostam, a’ tòiseachadh na h-uimhir de shnàithleanan a dh’ fheumar (cia mheud cores a tha san t-siostam, no cia mheud a dh’ innis thu dha). Mar sin, ruithidh an clàr-ama na snàithleanan gnìomhachaidh aotrom sin air na snàithleanan siostam obrachaidh sin anns gach cridhe.

Bu chòir a thoirt fa-near gur e seo an dòigh as èifeachdaiche air iarann ​​​​a chleachdadh. A bharrachd air na tha sinn air sealltainn, bidh sinn a’ dèanamh tòrr a bharrachd. Bidh sinn a’ dèanamh, mar eisimpleir, siostaman DPI a leigeas le bhith a’ frithealadh 40 gigabits ann an aon aonad (a rèir dè thachras anns na loidhnichean sin).

An sin, eadhon ro Go, chleachd sinn an aon sgeama airson an dearbh adhbhar seo: leis gu bheil e a ’toirt cothrom dhut sgìre tasgadan a’ phròiseasar a shàbhaladh, lughdaich gu mòr an àireamh de suidsichean co-theacsa OS (a bheir ùine mhòr cuideachd). Bidh mi ag ath-aithris: is e seo an dòigh as èifeachdaiche air iarann ​​​​a chleachdadh.

Tha an eisimpleir sìmplidh 21-loidhne seo na eisimpleir a tha dìreach a’ dèanamh echo-server. Aig an aon àm, thoir an aire gu bheil an t-seirbheis seirbheis gu math sìmplidh, tha e sreathach. Chan eil fios air ais ann, chan eil feum air dragh agus smaoineachadh... Tha thu dìreach a’ leughadh agus a’ sgrìobhadh!

Aig an aon àm, ma leughas tu agus a sgrìobhas tu, bu chòir dha casg a chuir air - tha an goroutine seo dìreach air a chiudha agus air a thoirt leis a’ chlàr-ama nuair a thig e gu bàs a-rithist. Is e sin, faodaidh an còd sìmplidh seo a bhith na fhrithealaiche mac-talla airson na h-uimhir de cheanglaichean a cheadaicheas an OS air an inneal seo.

Ri leantainn gu math luath ...

Cuid de shanasan 🙂

Tapadh leibh airson fuireach còmhla rinn. An toil leat na h-artaigilean againn? A bheil thu airson susbaint nas inntinniche fhaicinn? Thoir taic dhuinn le bhith a’ cur òrdugh no a’ moladh do charaidean, sgòth VPS airson luchd-leasachaidh bho $4.99, analog sònraichte de luchd-frithealaidh ìre inntrigidh, a chaidh a chruthachadh leinn dhut: An fhìrinn gu lèir mu VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps bho $ 19 no ciamar a roinn thu frithealaiche? (ri fhaighinn le RAID1 agus RAID10, suas ri 24 cores agus suas ri 40GB DDR4).

Dell R730xd 2x nas saoire ann an ionad dàta Equinix Tier IV ann an Amsterdam? A-mhàin an seo 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV bho $199 anns an Òlaind! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - bho $99! Leugh mu dheidhinn Ciamar a thogail bun-structair Corp. clas le bhith a’ cleachdadh frithealaichean Dell R730xd E5-2650 v4 luach 9000 iùro airson sgillinn?

Source: www.habr.com

Cuir beachd ann