Slack izmantotā projekta izvietoŔanas metodoloģija

Lai ieviestu jaunu projekta laidienu ražoÅ”anā, ir nepiecieÅ”ams rÅ«pÄ«gs lÄ«dzsvars starp izvietoÅ”anas ātrumu un risinājuma uzticamÄ«bu. Slack novērtē ātras iterācijas, Ä«sus atgriezeniskās saites ciklus un ātru atbildi uz lietotāju pieprasÄ«jumiem. Turklāt uzņēmumā ir simtiem programmētāju, kuri cenÅ”as bÅ«t pēc iespējas produktÄ«vāki.

Slack izmantotā projekta izvietoŔanas metodoloģija

Materiāla, kura tulkojumu mēs Å”odien publicējam, autori saka, ka uzņēmumam, kas cenÅ”as pieturēties pie Ŕādām vērtÄ«bām un vienlaikus aug, ir pastāvÄ«gi jāuzlabo sava projektu ievieÅ”anas sistēma. Uzņēmumam ir jāiegulda darba procesu caurskatāmÄ«bā un uzticamÄ«bā, to darot, lai nodroÅ”inātu Å”o procesu atbilstÄ«bu projekta mērogam. Å eit mēs runāsim par darbplÅ«smām, kas ir izstrādātas Slack, un par dažiem lēmumiem, kuru dēļ uzņēmums izmantoja Å”odien esoÅ”o projektu izvietoÅ”anas sistēmu.

Kā Ŕodien darbojas projektu izvietoŔanas procesi

Katrs PR (izvilkÅ”anas pieprasÄ«jums) pakalpojumā Slack ir jāpārskata kods, un tam ir sekmÄ«gi jānokārto visi testi. Tikai pēc Å”o nosacÄ«jumu izpildes programmētājs var sapludināt savu kodu projekta galvenajā atzarā. Tomēr Å”is kods tiek izvietots tikai darba laikā, pēc Ziemeļamerikas laika. Rezultātā, ņemot vērā to, ka mÅ«su darbinieki atrodas savās darba vietās, esam pilnÄ«bā gatavi risināt jebkādas negaidÄ«tas problēmas.

Katru dienu mēs veicam aptuveni 12 plānotas izvietoÅ”anas. Katras izvietoÅ”anas laikā programmētājs, kas izraudzÄ«ts kā izvietoÅ”anas vadÄ«tājs, ir atbildÄ«gs par jaunās versijas ievieÅ”anu ražoÅ”anā. Å is ir daudzpakāpju process, kas nodroÅ”ina vienmērÄ«gu montāžas uzsākÅ”anu ražoÅ”anā. Pateicoties Å”ai pieejai, mēs varam atklāt kļūdas, pirms tās ietekmē visus mÅ«su lietotājus. Ja kļūdu ir pārāk daudz, montāžas izvietoÅ”anu var atcelt. Ja pēc izlaiÅ”anas tiek atklāta konkrēta problēma, tai var viegli izlaist labojumu.

Slack izmantotā projekta izvietoŔanas metodoloģija
Checkpoint sistēmas saskarne, kas tiek izmantota Slack projektu izvietoÅ”anai

Jauna laidiena izvietoŔanas procesu var uzskatīt par četriem posmiem.

ā–1. Izlaiduma filiāles izveide

Katrs laidiens sākas ar jaunu laidiena atzaru, kas ir punkts mÅ«su Git vēsturē. Tas ļauj laidienam pieŔķirt atzÄ«mes un nodroÅ”ina vietu, kur varat veikt reāllaika kļūdu labojumus, kas tika atrasti, gatavojot laidienu izlaiÅ”anai produkcijas versijai.

ā–2. IzvietoÅ”ana inscenÄ“Å”anas vidē

Nākamais solis ir izvietot montāžu uz inscenÄ“Å”anas serveriem un palaist automātisku projekta vispārējās veiktspējas pārbaudi (dÅ«mu tests). IestudÄ“Å”anas vide ir ražoÅ”anas vide, kas nesaņem ārēju trafiku. Å ajā vidē mēs veicam papildu manuālo testÄ“Å”anu. Tas dod mums papildu pārliecÄ«bu, ka pārveidotais projekts darbojas pareizi. Ar automatizētiem testiem vien nepietiek, lai nodroÅ”inātu Ŕādu pārliecÄ«bas lÄ«meni.

ā–3. IzvietoÅ”ana suņu pārtikas un Kanāriju vidēs

IzvietoÅ”ana uz ražoÅ”anu sākas ar izstrādes programmatÅ«ras vidi, ko pārstāv saimnieku kopa, kas apkalpo mÅ«su iekŔējās Slack darbvietas. Tā kā mēs esam ļoti aktÄ«vi Slack lietotāji, Ŕīs pieejas izmantoÅ”ana palÄ«dzēja mums atklāt daudzas kļūdas jau izvietoÅ”anas sākumā. Pēc tam, kad esam pārliecinājuÅ”ies, ka sistēmas pamata funkcionalitāte nav bojāta, montāža tiek izvietota kanāriju vidē. Tas atspoguļo sistēmas, kas veido aptuveni 2% no ražoÅ”anas trafika.

ā–4. Pakāpeniska izlaiÅ”ana ražoÅ”anā

Ja pārraudzÄ«bas rādÄ«tāji jaunajam laidienam izrādÄ«sies stabili un ja pēc projekta izvietoÅ”anas kanāriju vidē neesam saņēmuÅ”i nekādas sÅ«dzÄ«bas, turpinām pakāpeniski pārcelt ražoÅ”anas serverus uz jauno laidienu. IzvērÅ”anas process ir sadalÄ«ts Ŕādos posmos: 10%, 25%, 50%, 75% un 100%. Rezultātā mēs varam lēnām pārsÅ«tÄ«t ražoÅ”anas trafiku uz jauno sistēmas laidienu. Tajā paŔā laikā mums ir laiks izmeklēt situāciju, ja tiek konstatētas kādas novirzes.

ā–Ko darÄ«t, ja izvietoÅ”anas laikā kaut kas noiet greizi?

Koda modifikāciju veikÅ”ana vienmēr ir risks. Taču mēs ar to tiekam galā, pateicoties labi apmācÄ«tu ā€œizvietoÅ”anas vadÄ«tājuā€ klātbÅ«tnei, kuri pārvalda jaunas laidiena ievieÅ”anas procesu ražoÅ”anā, uzrauga uzraudzÄ«bas rādÄ«tājus un koordinē programmētāju darbu, kas izlaiž kodu.

GadÄ«jumā, ja kaut kas patieŔām noiet greizi, mēs cenÅ”amies problēmu atklāt pēc iespējas ātrāk. Mēs izmeklējam problēmu, atrodam PR, kas izraisa kļūdas, atceļam to, rÅ«pÄ«gi analizējam un izveidojam jaunu bÅ«vējumu. Tiesa, dažkārt problēma paliek nepamanÄ«ta, lÄ«dz projekts nonāk ražoÅ”anā. Šādā situācijā svarÄ«gākais ir servisa atjaunoÅ”ana. Tāpēc, pirms sākam izmeklēt problēmu, nekavējoties atgriežamies pie iepriekŔējās darba versijas.

IzvērÅ”anas sistēmas pamatelementi

ApskatÄ«sim tehnoloÄ£ijas, kas ir mÅ«su projektu ievieÅ”anas sistēmas pamatā.

ā–Ä€tra izvietoÅ”ana

IepriekÅ” aprakstÄ«tā darbplÅ«sma retrospektÄ«vi var Ŕķist acÄ«mredzama. Taču mÅ«su izvietoÅ”anas sistēma nekļuva par Ŕādu uzreiz.

Kad uzņēmums bija daudz mazāks, visa mÅ«su lietojumprogramma varēja darboties 10 Amazon EC2 gadÄ«jumos. Projekta izvietoÅ”ana Å”ajā situācijā nozÄ«mēja rsync izmantoÅ”anu, lai ātri sinhronizētu visus serverus. IepriekÅ” jaunais kods bija tikai viena soļa attālumā no ražoÅ”anas, ko pārstāvēja iestudÄ“Å”anas vide. Asamblejas tika izveidotas un pārbaudÄ«tas Ŕādā vidē, un pēc tam uzreiz tika uzsākta ražoÅ”ana. Šādu sistēmu bija ļoti viegli saprast; tā ļāva jebkuram programmētājam jebkurā laikā izvietot kodu, ko viņŔ bija uzrakstÄ«jis.

Taču, pieaugot mÅ«su klientu skaitam, pieauga arÄ« projekta atbalstam nepiecieÅ”amās infrastruktÅ«ras apjoms. DrÄ«z, ņemot vērā sistēmas pastāvÄ«go izaugsmi, mÅ«su izvietoÅ”anas modelis, kura pamatā ir jauna koda nosÅ«tÄ«Å”ana uz serveriem, vairs nepildÄ«ja savu darbu. Proti, katra jauna servera pievienoÅ”ana nozÄ«mēja palielināt laiku, kas nepiecieÅ”ams izvietoÅ”anas pabeigÅ”anai. Pat stratēģijām, kuru pamatā ir paralēla rsync izmantoÅ”ana, ir noteikti ierobežojumi.

Mēs galu galā atrisinājām Å”o problēmu, pārejot uz pilnÄ«gi paralēlu izvietoÅ”anas sistēmu, kas tika izstrādāta atŔķirÄ«gi no vecās sistēmas. Proti, tagad mēs nenosÅ«tÄ«jām kodu uz serveriem, izmantojot sinhronizācijas skriptu. Tagad katrs serveris neatkarÄ«gi lejupielādēja jauno komplektu, zinot, ka tas jādara, pārraugot Consul atslēgas maiņu. Serveri paralēli ielādēja kodu. Tas ļāva mums saglabāt lielu izvietoÅ”anas ātrumu pat nepārtrauktas sistēmas izaugsmes vidē.

Slack izmantotā projekta izvietoŔanas metodoloģija
1. RažoÅ”anas serveri uzrauga Consul atslēgu. 2. Atslēgas izmaiņas, tas norāda serveriem, ka viņiem jāsāk jauna koda lejupielāde. 3. Serveri lejupielādē tarball failus ar lietojumprogrammas kodu

ā–Atomu izvietoÅ”ana

Vēl viens risinājums, kas mums palÄ«dzēja sasniegt vairāku lÄ«meņu izvietoÅ”anas sistēmu, bija atomu izvietoÅ”ana.

Pirms atomu izvietoÅ”anas izmantoÅ”anas katra izvietoÅ”ana var izraisÄ«t lielu skaitu kļūdu ziņojumu. Fakts ir tāds, ka jaunu failu kopÄ“Å”anas process uz ražoÅ”anas serveriem nebija kodolÄ«gs. Tas radÄ«ja Ä«su laika periodu, kurā kods, kas izsauca jaunas funkcijas, bija pieejams, pirms bija pieejamas paÅ”as funkcijas. Kad Ŕāds kods tika izsaukts, tā rezultātā tika atgrieztas iekŔējas kļūdas. Tas izpaudās neveiksmÄ«gos API pieprasÄ«jumos un bojātās tÄ«mekļa lapās.

Komanda, kas strādāja pie Ŕīs problēmas, to atrisināja, ievieÅ”ot "karsto" un "auksto" direktoriju jēdzienu. Karstajā direktorijā esoÅ”ais kods ir atbildÄ«gs par ražoÅ”anas trafika apstrādi. Un ā€œaukstajosā€ direktorijos kods, kamēr sistēma darbojas, tiek tikai sagatavots lietoÅ”anai. IzvietoÅ”anas laikā jaunais kods tiek kopēts neizmantotā aukstā direktorijā. Pēc tam, kad serverÄ« nav aktÄ«vu procesu, tiek veikta tÅ«lÄ«tēja direktoriju maiņa.

Slack izmantotā projekta izvietoŔanas metodoloģija
1. Lietojumprogrammas koda izsaiņoÅ”ana ā€œaukstāā€ direktorijā. 2. Sistēmas pārslēgÅ”ana uz ā€œaukstoā€ direktoriju, kas kļūst ā€œkarstsā€ (atomu darbÄ«ba)

Rezultāti: uzsvara maiņa uz uzticamību

2018. gadā projekts izauga lÄ«dz tādam mērogam, ka ļoti strauja ievieÅ”ana sāka kaitēt produkta stabilitātei. Mums bija ļoti progresÄ«va izvietoÅ”anas sistēma, kurā mēs ieguldÄ«jām daudz laika un pūļu. Viss, kas mums bija jādara, bija atjaunot un uzlabot mÅ«su izvietoÅ”anas procesus. Esam izauguÅ”i par diezgan lielu uzņēmumu, kura izstrādnes izmantotas visā pasaulē, lai organizētu nepārtrauktas komunikācijas un risinātu svarÄ«gas problēmas. Tāpēc mÅ«su uzmanÄ«bas centrā kļuva uzticamÄ«ba.

Mums vajadzēja padarÄ«t droŔāku jauno Slack laidienu izvietoÅ”anas procesu. Å Ä« vajadzÄ«ba lika mums uzlabot mÅ«su izvietoÅ”anas sistēmu. Faktiski mēs iepriekÅ” apspriedām Å”o uzlaboto sistēmu. Sistēmas dziļumos mēs turpinām izmantot ātras un atomāras izvietoÅ”anas tehnoloÄ£ijas. Ir mainÄ«jies veids, kā tiek veikta izvietoÅ”ana. MÅ«su jaunā sistēma ir izstrādāta, lai pakāpeniski izvietotu jaunu kodu dažādos lÄ«meņos un dažādās vidēs. Tagad mēs izmantojam modernākus atbalsta rÄ«kus un sistēmas uzraudzÄ«bas rÄ«kus nekā iepriekÅ”. Tas dod mums iespēju uztvert un izlabot kļūdas ilgi, pirms tām ir iespēja sasniegt galalietotāju.

Bet mēs neapstāsimies pie tā. Mēs pastāvÄ«gi pilnveidojam Å”o sistēmu, izmantojot modernākus palÄ«grÄ«kus un darba automatizācijas rÄ«kus.

Cienījamie lasītāji! Kā notiek jaunu projektu laidienu izvietoŔanas process jūsu darbavietā?

Slack izmantotā projekta izvietoŔanas metodoloģija

Avots: www.habr.com

Pievieno komentāru