Infrastruktur sakumaha kode: kenalan munggaran

Pausahaan urang dina prosés onboarding hiji tim SRE. Kuring datang kana sakabeh carita ieu ti sisi ngembangkeun. Dina prosésna, kuring datang sareng pikiran sareng wawasan anu kuring hoyong bagikeun sareng pamekar anu sanés. Dina artikel réfléksi ieu kuring ngobrol ngeunaan naon anu lumangsung, kumaha éta lumangsung, sarta kumaha dulur bisa neruskeun hirup kalawan eta.

Infrastruktur sakumaha kode: kenalan munggaran

Tuluyan tina runtuyan artikel anu ditulis dumasar kana pidato dina acara internal urang DevForum:

1. Ucing Schrödinger tanpa kotak: masalah konsensus dina sistem disebarkeun.
2. Infrastruktur salaku kode. (Anjeun aya didieu)
3. Generasi kontrak Typescript ngagunakeun model C #. (Nuju prosés...)
4. Bubuka kana algoritma konsensus Rakit. (Nuju prosés...)
...

Urang mutuskeun pikeun nyieun tim SRE, ngalaksanakeun gagasan google sre. Aranjeunna ngarekrut programer ti pamekar sorangan sareng ngirim aranjeunna pikeun ngalatih sababaraha bulan.

Tim ieu ngagaduhan tugas latihan di handap ieu:

  • Ngajelaskeun infrastruktur urang, nu lolobana aya dina Microsoft Azure dina bentuk kode (Terraform jeung sagalana sabudeureun).
  • Ngajarkeun pamekar cara dianggo sareng infrastruktur.
  • Nyiapkeun pamekar pikeun tugas.

Urang ngenalkeun konsép Infrastruktur salaku kode

Dina modél biasa dunya (administrasi klasik), pangaweruh ngeunaan infrastruktur lokasina di dua tempat:

  1. Atawa dina wangun pangaweruh dina kapala ahli.Infrastruktur sakumaha kode: kenalan munggaran
  2. Atanapi inpormasi ieu aya dina sababaraha mesin tik, sababaraha diantarana dipikanyaho ku para ahli. Tapi éta sanés kanyataan yén urang luar (upami sadayana tim urang ujug-ujug maot) bakal tiasa terang naon anu dianggo sareng kumaha jalanna. Aya seueur inpormasi ngeunaan mesin: asesoris, cronjobs, intimidasi (tingali. disk ningkatna) disk jeung ngan hiji daptar sajajalan naon bisa lumangsung. Hésé ngartos naon anu lumangsung.Infrastruktur sakumaha kode: kenalan munggaran

Dina duanana kasus, urang manggihan diri urang trapped dina jadi gumantung:

  • atawa ti jalma anu fana, tunduk kana gering, ragrag asih, swings wanda jeung PHK banal;
  • atawa ti mesin fisik digawé, nu ogé ragrag, meunang dipaling, sarta presents kejutan tur inconveniences.

Éta henteu kedah nyarios yén idéal sadayana kedah ditarjamahkeun kana kode anu tiasa dibaca manusa, dijaga, sareng ditulis kalayan saé.

Ku kituna, infrastruktur salaku kode (Incfastructure salaku Code - IaC) mangrupa pedaran sakabéh infrastruktur aya dina bentuk kode, kitu ogé parabot patali pikeun gawé bareng jeung nerapkeun infrastruktur nyata ti dinya.

Naha narjamahkeun sadayana kana kode?Jalma teu mesin. Aranjeunna teu tiasa nginget sadayana. Réaksi jalma sareng mesin béda. Naon waé anu otomatis berpotensi langkung gancang tibatan naon waé anu dilakukeun ku manusa. Hal pangpentingna nyaéta sumber tunggal bebeneran.

Ti mana asalna insinyur SRE anyar?Janten, urang mutuskeun pikeun nyewa insinyur SRE énggal, tapi ti mana kéngingkeunana? Buku kalayan jawaban anu leres (Buku Google SRE) ngabejaan urang: ti pamekar. Barina ogé, aranjeunna damel sareng kode, sareng anjeun ngahontal kaayaan idéal.

Urang milarian pisan kanggo waktos anu lami pikeun aranjeunna dina pasar tanaga di luar perusahaan kami. Tapi urang kedah ngaku yén urang henteu mendakan saha waé anu cocog sareng pamundut urang. Kuring kungsi neangan diantara urang sorangan.

Masalah Infrastruktur salaku kode

Ayeuna hayu urang nempo conto kumaha infrastruktur bisa hardcoded kana kode. Kode ieu ditulis ogé, kualitas luhur, kalawan komentar na indentations.

Conto kode tina Terraforma.

Infrastruktur sakumaha kode: kenalan munggaran

Kode conto ti Ansible.

Infrastruktur sakumaha kode: kenalan munggaran

Tuan-tuan, upami éta saderhana pisan! Kami di alam nyata, sarta éta salawasna siap kaget anjeun, nampilkeun anjeun kejutan jeung masalah. Teu tiasa ngalakukeun tanpa aranjeunna di dieu ogé.

1. Masalah kahiji nyaeta di hal nu ilahar IaC sababaraha jenis dsl.

Sareng DSL, kahareupna mangrupikeun pedaran ngeunaan struktur. Leuwih tepat, naon nu kudu: Json, Yaml, modifikasi tina sababaraha pausahaan badag nu datang nepi ka dsl sorangan (HCL dipaké dina terraform).

Masalahna nyaéta yén éta gampang henteu ngandung hal-hal anu biasa sapertos:

  • variabel;
  • kaayaan;
  • wae aya euweuh komentar, contona, dina Json, sacara standar maranéhna teu disadiakeun;
  • fungsi;
  • sarta kuring malah teu ngawangkong ngeunaan hal-hal tingkat tinggi kayaning kelas, warisan jeung sagala rupa nu.

2. Masalah kadua kode sapertos anu paling sering éta lingkungan hétérogén. Biasana anjeun diuk jeung digawekeun ku C #, i.e. kalawan hiji basa, hiji tumpukan, hiji ékosistem. Sareng di dieu anjeun gaduh rupa-rupa téknologi.

Ieu mangrupikeun kaayaan anu nyata nalika bash sareng python ngaluncurkeun sababaraha prosés dimana Json diselapkeun. Anjeun nganalisis eta, lajeng sababaraha generator séjén ngahasilkeun sejen 30 file. Pikeun sakabéh ieu, variabel input ditampi ti Azure Key Kolong, nu ditarik babarengan ku plugin pikeun drone.io ditulis dina Go, sarta variabel ieu ngaliwatan yaml, nu dihasilkeun salaku hasil tina generasi ti mesin template jsonnet. Rada hese gaduh kode anu dijelaskeun sacara ketat nalika anjeun gaduh lingkungan anu rupa-rupa.

Ngembangkeun tradisional dina kerangka hiji tugas hadir kalawan hiji basa. Di dieu urang damel sareng sajumlah ageung basa.

3. Masalah katilu nyaeta tuning. Kami dipaké pikeun niiskeun redaktur (Ms Visual Studio, Jetbrains Rider) anu ngalakukeun sagalana pikeun urang. Komo lamun urang bodo, maranéhna bakal nyebutkeun yén urang salah. Sigana normal sareng alami.

Tapi di tempat anu caket aya VSCode, dimana aya sababaraha plugins anu kumaha waé dipasang, dirojong atanapi henteu dirojong. Vérsi anyar kaluar sarta teu dirojong. Transisi banal pikeun ngalaksanakeun fungsi (sanajan aya) janten masalah anu rumit sareng teu pati penting. Ganti ngaran basajan tina variabel nyaéta replay dina proyék belasan file. Anjeun bakal untung lamun anjeunna nempatkeun naon nu peryogi. Tangtosna, aya lampu tukang di ditu di dieu, aya auto-completion, dimana waé aya pormat (sanaos éta henteu dianggo pikeun kuring dina terraform dina Windows).

Dina waktu tulisan ieu plugin vscode-terraform teu acan dileupaskeun pikeun ngarojong versi 0.12, sanajan geus dileupaskeun pikeun 3 bulan.

Geus waktuna pikeun poho ngeunaan ...

  1. Debugging.
  2. Alat refactoring.
  3. Otomatis réngsé.
  4. Ngadeteksi kasalahan nalika kompilasi.

Ieu lucu, tapi ieu ogé ngaronjatkeun waktu ngembangkeun sarta ngaronjatkeun jumlah kasalahan anu inevitably lumangsung.

Hal anu paling parah nyaéta urang kapaksa mikir henteu ngeunaan kumaha mendesain, ngatur file kana polder, nguraikeun, ngajantenkeun kode anu tiasa diurus, tiasa dibaca, sareng saterasna, tapi ngeunaan kumaha kuring tiasa nyerat paréntah ieu kalayan leres, sabab kuring kumaha waé nyeratna henteu leres. .

Salaku pemula, anjeun nyobian diajar terraforms, sareng IDE henteu ngabantosan anjeun pisan. Nalika aya dokuméntasi, lebet sareng tingali. Tapi lamun anjeun ngasupkeun basa programming anyar, IDE bakal ngabejaan Anjeun yen aya jenis kitu, tapi teu aya nanaon. Sahenteuna dina tingkat int atanapi string. Ieu sering mangpaat.

Kumaha upami tés?

Anjeun naros: "Kumaha upami tes, tuan-tuan programer?" Lalaki anu serius nguji sadayana dina produksi, sareng éta tangguh. Ieu conto tes unit pikeun modul terraform tina website Microsoft.

Infrastruktur sakumaha kode: kenalan munggaran

Aranjeunna gaduh dokuméntasi anu saé. Kuring sok resep Microsoft pikeun pendekatan kana dokuméntasi sareng pelatihan. Tapi anjeun henteu kedah janten Paman Bob pikeun ngartos yén ieu sanés kode anu sampurna. Catet validasi ka katuhu.

Masalah sareng tes unit nyaéta anjeun sareng kuring tiasa pariksa kabeneran kaluaran Json. Kuring threw di 5 parameter sarta dibéré footcloth Json kalawan 2000 garis. Abdi tiasa nganalisis naon anu aya di dieu, validasi hasil tés ...

Hésé pikeun parse Json di Go. Sareng anjeun kedah nyerat dina Go, sabab terraform di Go mangrupikeun prakték anu saé pikeun nguji dina basa anu anjeun nyerat. Organisasi kode sorangan lemah pisan. Dina waktos anu sami, ieu mangrupikeun perpustakaan anu pangsaéna pikeun uji.

Microsoft sorangan nyerat modulna, nguji ku cara ieu. Tangtu éta Open Source. Sadaya anu kuring nyarioskeun anjeun tiasa sumping sareng ngalereskeun. Abdi tiasa calik sareng ngalereskeun sadayana dina saminggu, open source VS code plugins, terraforms, ngadamel plugin pikeun pengendara. Panginten nyerat sababaraha analisa, tambahkeun linters, nyumbang perpustakaan pikeun uji. Abdi tiasa ngalakukeun sagalana. Tapi éta sanés anu kuring kedah laksanakeun.

Praktek pangalusna Infrastruktur salaku kode

Hayu urang ngaléngkah. Upami teu aya tés dina IaC, IDE sareng tuning goréng, maka sahenteuna kedah aya prakték anu pangsaéna. Kuring ngan indit ka Google Analytics tur dibandingkeun dua queries pilarian: Terraform lila pangalusna sarta c # lila pangalusna.

Infrastruktur sakumaha kode: kenalan munggaran

Naon anu urang tingali? Statistik kejam henteu nguntungkeun urang. Jumlah bahan sarua. Dina pamekaran C #, urang ngan saukur ngahudangkeun bahan, urang gaduh prakték super-pangalusna, aya buku-buku anu ditulis ku para ahli, sareng ogé buku-buku anu ditulis ku para ahli sanés anu ngritik buku-buku éta. Lautan dokuméntasi resmi, tulisan, kursus pelatihan, sareng ayeuna ogé pamekaran open source.

Pikeun pamundut IaC: di dieu anjeun nyobian ngumpulkeun inpormasi sakedik-sakedik tina laporan highload atanapi HashiConf, tina dokuméntasi resmi sareng seueur masalah dina Github. Kumaha ngadistribusikaeun modul ieu sacara umum, naon anu kudu dipigawé kalayan aranjeunna? Sigana nu ieu masalah nyata ... Aya komunitas, gentlemen, dimana pikeun sual naon anjeun bakal dibéré 10 komentar on Github. Tapi teu persis.

Hanjakalna, dina waktos ieu, para ahli nembé mimiti muncul. Aya saeutik teuing di antarana jadi jauh. Jeung komunitas sorangan nongkrong di tingkat rudimentary.

Dimana sadayana ieu bade sarta naon anu kudu dipigawé

Anjeun tiasa lungsur sagalana tur balik ka C #, ka dunya rider nu. Tapi henteu. Naha anjeun bakal repot ngalakukeun ieu upami anjeun henteu mendakan solusi. Di handap ieu kuring nampilkeun kacindekan subjektif kuring. Anjeun tiasa ngabantah kuring dina koméntar, éta bakal pikaresepeun.

Pribadi, kuring bet dina sababaraha hal:

  1. Pangwangunan di daérah ieu lumangsung gancang pisan. Ieu jadwal pamundut pikeun DevOps.

    Infrastruktur sakumaha kode: kenalan munggaran

    Topikna tiasa janten hype, tapi kanyataan yén sphere na ngembang masihan sababaraha harepan.

    Upami aya anu gancang pisan, maka jalma-jalma pinter pasti bakal muncul anu bakal nyarioskeun ka anjeun naon anu kudu dilakukeun sareng anu henteu kedah dilakukeun. Kanaékan popularitas ngabalukarkeun kanyataan yén meureun batur bakal boga waktu pikeun tungtungna nambahkeun plugin ka jsonnet pikeun vscode, nu bakal ngidinan Anjeun pikeun ngaléngkah ka ngalaksanakeun fungsi, tinimbang neangan eta via ctrl + shift + f. Salaku hal mekar, leuwih bahan muncul. Pelepasan buku ti Google ngeunaan SRE mangrupikeun conto anu saé ieu.

  2. Aya téknik sareng prakték anu dikembangkeun dina pamekaran konvensional anu urang tiasa suksés nerapkeun di dieu. Leres, aya nuansa sareng tés sareng lingkungan hétérogén, alat anu teu cekap, tapi sajumlah ageung prakték parantos akumulasi anu tiasa mangpaat sareng ngabantosan.

    Hiji conto trivial: kolaborasi ngaliwatan program pasangan. Éta ngabantosan pisan pikeun terang. Nalika anjeun gaduh tatangga caket dieu anu ogé nyobian ngartos hiji hal, babarengan anjeun bakal ngartos langkung saé.

    Ngartos kumaha refactoring dilakukeun ngabantosan ngalaksanakeun éta sanajan dina kaayaan sapertos kitu. Nyaéta, anjeun moal tiasa ngarobih sadayana sakaligus, tapi ngarobih nami, teras robih lokasi, teras anjeun tiasa nyorot sababaraha bagian, oh, tapi henteu cekap koméntar di dieu.

kacindekan

Sanaos kanyataan yén penalaran kuring sigana pesimis, kuring ningali ka hareup kalayan harepan sareng ngarep-ngarep pisan yén sadayana bakal jalan pikeun urang (sareng anjeun).

Bagian kadua artikel keur disiapkeun salajengna. Dina éta, kuring bakal ngobrol ngeunaan kumaha urang nyobian ngagunakeun prakték pangembangan tangkas pikeun ningkatkeun prosés diajar sareng damel sareng infrastruktur.

sumber: www.habr.com

Tambahkeun komentar