Uue projekti versiooni leidmine tootmises nĂ”uab hoolikat tasakaalu arenduse kiirusel ja lahenduse usaldusvÀÀrsusel. Slackis hinnatakse kiireid iteratsioone, lĂŒhikesi tagasiside tsĂŒkleid ja kiiret reageerimist kasutajate pĂ€ringutele. Peale selle töötab ettevĂ”ttes sadu programmeerijaid, kes pĂŒĂŒdlevad maksimaalse produktiivsuse poole.
Materjali autorid, mille tĂ”lget me tĂ€na avaldame, ĂŒtlevad, et ettevĂ”te, kes soovib selliseid vÀÀrtusi jĂ€rgida ja samal ajal kasvada, peab pidevalt tĂ€iustama oma projektide arendamise sĂŒsteemi. EttevĂ”te peab panustama oma tööprotsesside lĂ€bipaistvusse ja usaldusvÀÀrsusesse, tagades, et need protsessid vastaksid projekti mastaabile. Siin rÀÀgime Slackis vĂ€lja kujunenud tööprotsessidest ja mĂ”ningatest lahendustest, mis on viinud ettevĂ”tte sellise olemasoleva projektide arenduseni.
Kuidas projektide arendamise protsessid tÀna toimivad
Iga PR (pull request) Slackis peab olema kindlasti lÀbinud koodivaatamise ning edukalt sooritanud kÔik testid. Ainult pÀrast nende tingimuste tÀitmist vÔib programmeerija oma koodi liita projekti master haruga. Siiski toimub sellise koodi arendamine ainult pÔhjaameerika tööaegadel. Tulemuseks on see, et meie töötajad on oma kohtades ning tÀielikult valmis lahendama kÔiki ootamatuid probleeme.
Iga pĂ€ev viime lĂ€bi umbes 12 planeeritud arendust. Iga arenduse kĂ€igus vastutab arenduse juht, kes on mÀÀratud kĂ”igepealt, uue kogumi tootmisse viimise eest. See on mitmeastmeline protsess, mis tagab sujuva kogumi kĂ€ivitamise tööreĆŸiimis. TĂ€nu sellele lĂ€henemisele saame vigu avastada enne, kui need mĂ”jutavad kĂ”iki meie kasutajaid. Kui vigu osutub liiga palju â arendust saab tagasi keerata. Kui mĂ”ni eraldi probleem avastatakse pĂ€rast vĂ€lja laskmist, saab selle hĂ”lpsasti parandada.

Checkpoini sĂŒsteemi liides, mida Slack kasutab projektide arendamiseks
Uue versiooni arendamise protsessi tootmises vÔib jagada neljaks sammuks.
â1. Uue versiooni haru loomine
Iga versioon algab uue versiooni haru loomisega meie Git-i ajaloos. See vÔimaldab versioonile mÀÀrata silte ja loob koha, kuhu saab teha kiireid parandusi vigadele, mis avastatakse versiooni tootmisse laskmise ettevalmistamise kÀigus.
â2. Kasutusele vĂ”tmine vahekeskkonnas
Töötamise jĂ€rgmine samm on kogumise kasutusele vĂ”tmine vahe-serverites ning automaatse testi kĂ€ivitamine projekti ĂŒldise toimivuse kontrollimiseks (smoke test). Vahekeskkond on tootmiskeskkond, kuhu vĂ€line liiklus ei jĂ”ua. Selles keskkonnas teeme tĂ€iendavat kĂ€sitsitestimist. See annab meile lisakindluse, et muudetud projekt töötab Ă”igesti. Ainult automatiseeritud testidest ei piisa sellise kindluse saavutamiseks.
â3. Kasutusele vĂ”tmine dogfood- ja canary-keskkondades
Tootmises kasutusele vĂ”tmine algab dogfood-keskkonnast, mis koosneb hulkadest hostidest, mis teenindavad meie sisemisi tööruume Slackis. Kuna oleme Slacki ĂŒsna aktiivsed kasutajad, on selline lĂ€henemine aidanud varakult paljusid vigu avastada. PĂ€rast seda, kui oleme kinnitanud, et sĂŒsteemi pĂ”hifunktsionaalsus ei ole kahjustatud, toimub kogumise kasutusele vĂ”tmine canary-keskkonnas. See tĂ€histab sĂŒsteeme, millele suunatakse umbes 2% tootmistrafikust.
â4. Aeglane tootmisse viimine
Kui uue versiooni jĂ€lgimise nĂ€itajad on stabiilsed ja kui pĂ€rast projekti kasutusele vĂ”tmist canary-keskkonnas me ei saa kaebusi, jĂ€tkame aeglast tootmisse viimist. Kasutusele vĂ”tmise protsess jaguneb jĂ€rgmistesse etappidesse: 10%, 25%, 50%, 75% ja 100%. Selle tulemusena saame aeglaselt suunata tootmistrafiku sĂŒsteemi uuele versioonile. Samuti on meil aega olukorra uurimiseks, kui mingeid anomaaliaid tekib.
âKuidas kĂ€ituda, kui kasutuselevĂ”tu kĂ€igus lĂ€heb midagi valesti?
Koodi muutmine on alati risk. Kuid me saame sellega hakkama tĂ€nu meie hĂ€sti ettevalmistatud âdeploy juhtideleâ, kes juhivad uue versiooni tootmisesse toomise protsessi, jĂ€lgivad jĂ€lgimisnĂ€itajaid ja koordineerivad programmeerijate tööd, kes koodi vabastavad.
Kui midagi tĂ”eliselt valesti lĂ€heb, pĂŒĂŒame probleemi avastada nii vara kui vĂ”imalik. Uurime probleemi, leiame PR-i, mis vead pĂ”hjustab, rullime selle tagasi, analĂŒĂŒsime hoolikalt ja loome uue versiooni. TĂ”si, mĂ”nikord jÀÀb probleem tootmisse toimetamise ajal mĂ€rkamatuks. Sellises olukorras on kĂ”ige olulisem teenuse töö taastamine. SeetĂ”ttu rullime enne probleemide uurimist kohe tagasi eelmise töötava versioonini.
TöötlussĂŒsteemi ehitusblokid
Uurime tehnoloogiaid, mis on meie projektide kĂ€itussĂŒsteemi aluseks.
âKiired kĂ€ivitused
Eelpool kirjeldatud tööprotsess vĂ”ib tagantjĂ€rele tunduda tĂ€iesti ilmne. Kuid meie kĂ€itussĂŒsteem ei ole selliseks kujunenud ĂŒleöö.
Kui ettevĂ”te oli oluliselt vĂ€iksem, suutis kogu meie rakendus töötada 10 Amazon EC2 instantsil. Projekti kĂ€itamine sellises olukorras tĂ€hendas rsynci kasutamist kĂ”igi serverite kiireks sĂŒnkroniseerimiseks. Varem eraldas uue koodi tootmisest vaid ĂŒks samm, mis oli vahekeskkond. Versioonid loodi ja kontrolliti sellises keskkonnas ning siis saadeti kohe tootmisse. Sellises sĂŒsteemis oli lihtne orienteeruda, see vĂ”imaldas igal programmeerijal igal ajal kĂ€itada tema kirjutatud koodi.
Kuid koos meie klientide arvu kasvamisega kasvas ka vajalik infrastruktuuri ulatus projekti toimimise tagamiseks. Peagi, arvesse vĂ”ttes sĂŒsteemi pidevat kasvu, lĂ”petas meie kĂ€itusmudel, mis pĂ”hines uue koodi tĂ”ukamisel serveritesse, oma ĂŒlesande tĂ€itmise. Iga uue serveri lisamine tĂ€hendas kaua kĂ€ivitamiseks vajaliku aega. Ieven strateegiad, mis pĂ”hinevad rsynci paralleelses rakendamises, omavad oma piiranguid.
KokkuvĂ”ttes lahendasime selle probleemi, liikudes tĂ€ielikult paralleelsele juurutussĂŒsteemile, mis oli korraldatud teisiti kui vana sĂŒsteem. Nimelt ei saatnud me enam koodi serveritesse, kasutades sĂŒnkroniseerimise skripti. Iga server laadis nĂŒĂŒd uusi kogusid iseseisvalt, saades teada, et see on vajalik, jĂ€lgides Consul'i vĂ”tme muutust. Serverid laadisid koodi paralleelselt. See vĂ”imaldas meil hoida kĂ”rget juurutuskiirus isegi pideva sĂŒsteemi kasvu tingimustes.

1. Tootmisserverid jÀlgivad Consul'i vÔtit. 2. VÔti muutub, teavitades servereid, et nad peavad alustama uue koodi laadimist. 3. Serverid laadivad tarball-failid, mis sisaldavad rakenduse koodi.
âAatomaarne juurutamine
Veel ĂŒhe lahendusena, mis aitas meil jĂ”uda mitmetasandilise juurutussĂŒsteemini, oli aatomaarne juurutamine.
Enne aatomaarsete juurutamiste kasutuselevĂ”ttu vĂ”is iga juurutamine pĂ”hjustada rohkelt tĂ”rketeateid. Probleem oli selles, et uute failide kopeerimise protsess tootmisserveritesse ei olnud aatomaarne. See viis lĂŒhikese ajavahemiku tekkeni, mil koodiga, mis kutsus uusi funktsioone, oli saadaval enne nende funktsioonide kĂ€ttesaadavust. Kui selliseid koodi kutsuti, pĂ”hjustas see sisemisi vigu. See avaldus ebaĂ”nnestunud API pĂ€ringutena ja âkatkisteâ veebilehtedena.
Probleemiga tegelev meeskond lahendas selle, tutvustades mĂ”isteid âkuumadâ (hot) ja âkĂŒlmadâ (cold) kataloogid. Kood âkuumasâ kataloogis vastutab tootmisliiklusest. Ja âkĂŒlmadesâ kataloogides valmistatakse kood sĂŒsteemi töö ajal lihtsalt ette kasutamiseks. Juhtimise kĂ€igus kopeeritakse uus kood kasutamata âkĂŒlmaâ katalooge. SeejĂ€rel, kui serveris ei ole aktiivseid protsesse, toimub hetkeline kataloogide vahetamine.

1. Rakenduse koodi pakkimine âkĂŒlmasâ kataloogis. 2. SĂŒsteemi ĂŒleminek âkĂŒlmaleâ kataloogile, mis muutub âkuumaksâ (aatomaarne operatsioon).
KokkuvÔtted: rÔhuasetuse nihkumine usaldusvÀÀrsusele.
2018. aastal kasvas projekt selliste mÔÔtmeteni, kus vĂ€ga kiire juurutamine hakkas toote stabiilsusele kahjulikult mĂ”juma. Meil oli ĂŒsna arenenud juurutussĂŒsteem, millele olime panustanud palju jĂ”udu ja aega. Meil oli vaja vaid ĂŒmberkorraldada ja tĂ€iustada juurutamise korralduse protsesse. Meist sai ĂŒsna suur ettevĂ”te, mille arendusi kasutati maailmas pideva side tagamiseks ja oluliste probleemide lahendamiseks. SeetĂ”ttu keskendusime usaldusvÀÀrsusele.
Me peame juurutamise protsessi Slacki uute vĂ€ljaannete osas muutma turvalisemaks. Just see vajadus viis meid meie juurutussĂŒsteemi tĂ€iustamiseni. Ătlematagi selge, et ĂŒlalpool rÀÀkisime sellest tĂ€iustatud sĂŒsteemist. SĂŒsteemi sĂŒgavustes jĂ€tkame me kiirete ja atomaarsete juurutustehnoloogiate kasutamist. Muutunud on see, kuidas tĂ€pselt juurutamine toimub. Meie uus sĂŒsteem on mĂ”eldud uue koodi jĂ€rkjĂ€rguliseks juurutamiseks erinevatel tasemetel ja erinevates keskkondades. NĂŒĂŒd kasutame arenenumaid abivahendeid ja sĂŒsteemi jĂ€lgimise vahendeid kui kunagi varem. See vĂ”imaldab meil vigu tuvastada ja kĂ”rvaldada kaua enne, kui need jĂ”uavad lĂ”ppkasutajani.
Aga me ei kavatse sellel lĂ”petada. Me tĂ€iustame seda sĂŒsteemi pidevalt, rakendades arenenumaid abivahendeid ja automaatikavahendeid.
Lugupeetud lugejad! Kuidas toimub uute vÀljaannete juurutamise protsess projektides, kus teie töötate?
Allikas: habr.com
