Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Il-kumpanija tagħna tinsab fil-proċess li tintegra tim SRE. Dħalt f'din l-istorja kollha min-naħa tal-iżvilupp. Fil-proċess, ħarġt bi ħsibijiet u għarfien li nixtieq naqsam ma 'żviluppaturi oħra. F’dan l-artiklu ta’ riflessjoni nitkellem dwar x’qed jiġri, kif qed jiġri, u kif kulħadd jista’ jkompli jgħix miegħu.

Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Kontinwazzjoni ta’ sensiela ta’ artikli miktuba bbażati fuq diskorsi fl-avveniment intern tagħna DevForum:

1. Il-qattus ta' Schrödinger mingħajr kaxxa: il-problema tal-kunsens f'sistemi distribwiti.
2. Infrastruttura bħala kodiċi. (Int qiegħed hawn)
3. Ġenerazzjoni ta 'kuntratti Typescript bl-użu ta' mudelli C#. (Fil-progress...)
4. Introduzzjoni għall-algoritmu ta 'kunsens Raft. (Fil-progress...)
...

Iddeċidejna li noħolqu tim SRE, li nimplimentaw l-ideat google sre. Huma rreklutaw programmaturi minn fost l-iżviluppaturi tagħhom stess u bagħtuhom jitħarrġu għal diversi xhur.

It-tim kellu l-kompiti ta’ taħriġ li ġejjin:

  • Iddeskrivi l-infrastruttura tagħna, li hija l-aktar fil-Microsoft Azure fil-forma ta 'kodiċi (Terraform u kollox madwar).
  • Tgħallem lill-iżviluppaturi kif jaħdmu mal-infrastruttura.
  • Ipprepara żviluppaturi għad-dmir.

Nintroduċu l-kunċett ta 'Infrastruttura bħala kodiċi

Fil-mudell tas-soltu tad-dinja (amministrazzjoni klassika), l-għarfien dwar l-infrastruttura jinsab f'żewġ postijiet:

  1. Jew fil-forma ta 'għarfien fil-kapijiet ta' esperti.Infrastruttura bħala kodiċi: l-ewwel konoxxenza
  2. Jew din l-informazzjoni tinsab fuq xi tajprajters, li wħud minnhom huma magħrufa mill-esperti. Iżda mhuwiex fatt li barrani (f'każ li t-tim kollu tagħna jmut f'daqqa) se jkun jista 'jifhem x'jaħdem u kif jaħdem. Jista’ jkun hemm ħafna informazzjoni fuq magna: aċċessorji, cronjobs, intimidat (ara. immuntar tad-diska) disk u biss lista bla tarf ta' x'jista' jiġri. Huwa diffiċli li tifhem x'qed jiġri verament.Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Fiż-żewġ każijiet, insibu ruħna maqbuda biex insiru dipendenti:

  • jew minn persuna li hija mortali, soġġetta għal mard, li tinħabb, tibdil fil-burdata u sensji sempliċiment banali;
  • jew minn magna li taħdem fiżikament, li wkoll taqa’, tinsteraq, u tippreżenta sorpriżi u inkonvenjenzi.

M’hemmx għalfejn ngħidu li idealment kollox għandu jiġi tradott f’kodiċi li jinqara mill-bniedem, li jista’ jinżamm, u miktub tajjeb.

Għalhekk, l-infrastruttura bħala kodiċi (Incfastructure as Code - IaC) hija deskrizzjoni tal-infrastruttura eżistenti kollha fil-forma ta 'kodiċi, kif ukoll għodod relatati biex taħdem magħha u timplimenta infrastruttura reali minnha.

Għaliex tittraduċi kollox f'kodiċi?In-nies mhumiex magni. Ma jistgħux jiftakru kollox. Ir-reazzjoni ta 'persuna u magna hija differenti. Kwalunkwe ħaġa awtomatizzata hija potenzjalment aktar mgħaġġla minn kull ħaġa magħmula minn bniedem. L-iktar ħaġa importanti hija sors wieħed tal-verità.

Minn fejn ġejjin inġiniera SRE ġodda?Allura, iddeċidejna li nimpjegaw inġiniera SRE ġodda, imma minn fejn niksbuhom? Ktieb bit-tweġibiet korretti (Ktieb Google SRE) jgħidilna: mill-iżviluppaturi. Wara kollox, jaħdmu bil-kodiċi, u int tikseb l-istat ideali.

Fittixna ħafna għal żmien twil għalihom fis-suq tal-persunal barra l-kumpanija tagħna. Imma rridu nammettu li ma sibna lil ħadd li jaqbel mat-talbiet tagħna. Kelli nfittex fost in-nies tiegħi stess.

Problemi Infrastruttura bħala kodiċi

Issa ejja nħarsu lejn eżempji ta 'kif l-infrastruttura tista' tiġi kkodifikata f'kodiċi. Il-kodiċi huwa miktub tajjeb, ta 'kwalità għolja, b'kummenti u indentazzjonijiet.

Eżempju ta' kodiċi minn Terraforma.

Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Eżempju ta' kodiċi minn Ansible.

Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Sinjuri, kieku kien daqshekk sempliċi! Ninsabu fid-dinja reali, u huwa dejjem lest li jissorprendik, jippreżentak sorpriżi u problemi. Ma tistax tgħaddi mingħajrhom hawn lanqas.

1. L-ewwel problema hija li f'ħafna każijiet IaC huwa xi tip ta 'dsl.

U DSL, min-naħa tagħha, hija deskrizzjoni tal-istruttura. B'mod aktar preċiż, dak li għandu jkollok: Json, Yaml, modifiki minn xi kumpaniji kbar li ħarġu bid-dsl tagħhom stess (HCL jintuża f'terraform).

L-inkwiet huwa li jista 'faċilment ma jkunx fih affarijiet familjari bħal:

  • varjabbli;
  • kundizzjonijiet;
  • x'imkien m'hemm l-ebda kummenti, pereżempju, f'Json, b'mod awtomatiku ma jiġux ipprovduti;
  • funzjonijiet;
  • u lanqas biss qed nitkellem dwar affarijiet ta’ livell għoli bħal klassijiet, wirt u dak kollu.

2. It-tieni problema b'tali kodiċi hija li ħafna drabi huwa ambjent eteroġenju. Normalment inti toqgħod u taħdem b'C#, i.e. b'lingwa waħda, munzell wieħed, ekosistema waħda. U hawn għandek varjetà kbira ta 'teknoloġiji.

Hija sitwazzjoni reali ħafna meta bash ma 'python iniedi xi proċess li fih jiddaħħal Json. Int tanalizzaha, imbagħad xi ġeneratur ieħor jipproduċi 30 fajl ieħor. Għal dan kollu, il-varjabbli tal-input jiġu riċevuti minn Azure Key Vault, li jinġabru flimkien minn plugin għal drone.io miktub f'Go, u dawn il-varjabbli jgħaddu minn yaml, li ġie ġġenerat bħala riżultat tal-ġenerazzjoni mill-magna tal-mudell jsonnet. Huwa pjuttost diffiċli li jkollok kodiċi strettament deskritt tajjeb meta jkollok ambjent daqshekk divers.

L-iżvilupp tradizzjonali fil-qafas ta' kompitu wieħed jiġi b'lingwa waħda. Hawnhekk naħdmu b'numru kbir ta' lingwi.

3. It-tielet problema hija l-irfinar. Aħna mdorrijin inkessħu edituri (Ms Visual Studio, Jetbrains Rider) li jagħmlu kollox għalina. U anke jekk aħna stupidi, jgħidu li aħna żbaljati. Jidher normali u naturali.

Iżda x'imkien fil-qrib hemm VSCode, li fih hemm xi plugins li huma b'xi mod installati, appoġġjati jew mhux appoġġjati. Verżjonijiet ġodda ħarġu u ma kinux appoġġjati. Transizzjoni banali għall-implimentazzjoni ta' funzjoni (anke jekk teżisti) issir problema kumplessa u mhux trivjali. Tismija sempliċi ta 'varjabbli hija replay fi proġett ta' tużżana fajls. Int tkun xortik tajba jekk ipoġġi dak li għandek bżonn. Naturalment, hemm backlighting hawn u hemm, hemm awto-tlestija, x'imkien hemm ifformattjar (għalkemm ma ħadmitx għalija f'terraform fuq Windows).

Fiż-żmien ta’ din il-kitba plugin vscode-terraform għadhom ma ġewx rilaxxati biex jappoġġjaw il-verżjoni 0.12, għalkemm ilu rilaxxat għal 3 xhur.

Wasal iż-żmien li tinsa...

  1. Debugging.
  2. Għodda ta' refactoring.
  3. Tlestija awtomatika.
  4. Tiskopri żbalji waqt il-kumpilazzjoni.

Huwa umoristiċi, iżda dan iżid ukoll il-ħin ta 'żvilupp u jżid in-numru ta' żbalji li inevitabbilment iseħħu.

L-agħar ħaġa hija li aħna mġiegħla naħsbu mhux dwar kif niddisinjaw, norganizzaw fajls f'folders, niddekomponu, nagħmlu l-kodiċi li jista' jinżamm, jinqara, eċċ, iżda dwar kif nista' nikteb dan il-kmand b'mod korrett, għax b'xi mod ktibtu ħażin. .

Bħala Bidu, qed tipprova titgħallem terraforms, u l-IDE m'hu qed jgħinek xejn. Meta jkun hemm dokumentazzjoni, idħol u ara. Imma kieku kont qed iddaħħal lingwa ta 'programmar ġdida, l-IDE jgħidlek li hemm tali tip, iżda m'hemm l-ebda ħaġa bħal din. Mill-inqas fil-livell int jew string. Dan huwa spiss utli.

Xi ngħidu dwar it-testijiet?

Inti tistaqsi: "Xi ngħidu dwar it-testijiet, rġulija programmaturi?" Guys serji jittestjaw kollox fuq il-produzzjoni, u hija iebsa. Hawn eżempju ta 'test unitarju għal modulu terraform mill-websajt Microsoft.

Infrastruttura bħala kodiċi: l-ewwel konoxxenza

Għandhom dokumentazzjoni tajba. Dejjem għoġobni Microsoft għall-approċċ tagħha għad-dokumentazzjoni u t-taħriġ. Imma m'għandekx bżonn tkun Ziju Bob biex tifhem li dan mhuwiex kodiċi perfett. Innota l-validazzjoni fuq il-lemin.

Il-problema b'test unitarju hija li jien u int nistgħu niċċekkjaw il-korrettezza tal-output Json. I threw fil-parametri 5 u ngħatat footcloth Json b'2000 linja. Kapaċi nanalizza x'inhu għaddej hawn, nivvalida r-riżultat tat-test...

Huwa diffiċli li parse Json f'Go. U trid tikteb f'Go, għax terraform f'Go hija prattika tajba għall-ittestjar fil-lingwa li tikteb biha. L-organizzazzjoni tal-kodiċi innifsu hija dgħajfa ħafna. Fl-istess ħin, din hija l-aħjar librerija għall-ittestjar.

Microsoft stess tikteb il-moduli tagħha, tittestjahom b'dan il-mod. Naturalment huwa Open Source. Dak kollu li qed nitkellem int tista’ tiġi u tirranġa. Nista' noqgħod bilqiegħda u nirranġa kollox f'ġimgħa, plugins open source VS code, terraforms, nagħmel plugin għar-rikkieb. Forsi tikteb koppja ta 'analizzaturi, żid linters, tikkontribwixxi librerija għall-ittestjar. Kapaċi nagħmel kollox. Imma dan mhux dak li għandi nagħmel.

L-aħjar prattiki Infrastruttura bħala kodiċi

Ejja nimxu fuq. Jekk ma jkunx hemm testijiet fl-IaC, l-IDE u l-irfinar huma ħżiena, allura għandu mill-inqas ikun hemm l-aħjar prattiki. Għadni kemm mort Google Analytics u qabbilt żewġ mistoqsijiet ta’ tfittxija: l-aħjar prattiki ta’ Terraform u l-aħjar prattiki ta’ c#.

Infrastruttura bħala kodiċi: l-ewwel konoxxenza

X'naraw? Statistika bla ħniena mhix favur tagħna. L-ammont ta 'materjal huwa l-istess. Fl-iżvilupp tas-C#, aħna sempliċement awash fil-materjali, għandna l-aqwa prattiki, hemm kotba miktuba minn esperti, u wkoll kotba miktuba fuq kotba minn esperti oħra li jikkritikaw dawk il-kotba. Baħar ta 'dokumentazzjoni uffiċjali, artikoli, korsijiet ta' taħriġ, u issa wkoll żvilupp ta 'sors miftuħ.

Fir-rigward tat-talba tal-IaC: hawn qed tipprova tiġbor informazzjoni daqsxejn minn rapporti highload jew HashiConf, minn dokumentazzjoni uffiċjali u bosta kwistjonijiet fuq Github. Kif tqassam dawn il-moduli b'mod ġenerali, x'għandek tagħmel magħhom? Jidher li din hija problema reali... Hemm komunità, rġulija, fejn għal kwalunkwe mistoqsija se tingħata 10 kummenti fuq Github. Imma mhux eżattament.

Sfortunatament, f'dan il-mument, l-esperti għadhom qed jibdew joħorġu. S'issa hemm ftit wisq minnhom. U l-komunità nnifisha qed tistrieħ fuq livell rudimentali.

Fejn sejjer dan kollu u x'għandek tagħmel

Tista 'waqqa' kollox u tmur lura għal C#, għad-dinja tar-rikkieb. Imma le. Għaliex kieku inti anki jolqot tagħmel dan jekk inti ma tistax issib soluzzjoni. Hawn taħt nippreżenta l-konklużjonijiet suġġettivi tiegħi. Tista' targumenta miegħi fil-kummenti, se jkun interessanti.

Personalment, qed nagħmel imħatri fuq ftit affarijiet:

  1. L-iżvilupp f'dan il-qasam qed iseħħ malajr ħafna. Hawnhekk hawn skeda ta' talbiet għal DevOps.

    Infrastruttura bħala kodiċi: l-ewwel konoxxenza

    Is-suġġett jista 'jkun hype, iżda l-fatt stess li l-isfera qed tikber tagħti xi tama.

    Jekk xi ħaġa tikber daqshekk malajr, allura definittivament jidhru nies intelliġenti li jgħidulek x'għandek tagħmel u x'mgħandekx tagħmel. Iż-żieda fil-popolarità twassal għall-fatt li forsi xi ħadd ikollu ħin biex finalment iżid plugin ma jsonnet għal vscode, li jippermettilek li timxi biex timplimenta l-funzjoni, aktar milli tfittexha permezz ta 'ctrl+shift+f. Hekk kif l-affarijiet jevolvu, jidhru aktar materjali. Ir-rilaxx ta 'ktieb minn Google dwar SRE huwa eżempju eċċellenti ta' dan.

  2. Hemm tekniki u prattiċi żviluppati fl-iżvilupp konvenzjonali li nistgħu napplikaw b'suċċess hawn. Iva, hemm sfumaturi bl-ittestjar u ambjent eteroġenju, għodda insuffiċjenti, iżda ġew akkumulati numru kbir ta 'prattiki li jistgħu jkunu utli u ta' għajnuna.

    Eżempju trivjali: kollaborazzjoni permezz ta 'programmazzjoni ta' par. Jgħin ħafna biex insemmu. Meta jkollok ġar fil-qrib li wkoll qed jipprova jifhem xi ħaġa, flimkien tifhem aħjar.

    Il-fehim ta’ kif isir ir-refactoring jgħin biex jitwettaq anke f’sitwazzjoni bħal din. Jiġifieri, ma tistax tbiddel kollox f'daqqa, iżda tbiddel l-ismijiet, imbagħad ibdel il-post, allura tista 'tenfasizza xi parti, oh, iżda m'hemmx biżżejjed kummenti hawn.

Konklużjoni

Minkejja l-fatt li r-raġunament tiegħi jista 'jidher pessimist, inħares lejn il-futur b'tama u sinċerament nittama li kollox se jirnexxi għalina (u għalik).

It-tieni parti tal-artiklu qed titħejja li jmiss. Fiha, ser nitkellem dwar kif ippruvajna nużaw prattiki ta' żvilupp b'aġilità biex intejbu l-proċess ta' tagħlim tagħna u naħdmu mal-infrastruttura.

Sors: www.habr.com

Żid kumment