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.
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.
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Ä.
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.
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Ä?
Avots: www.habr.com