Metodologin för att rulla ut projekt som anvÀnds i Slack

Att lansera en ny version av projektet till produktion krÀver noggrant avvÀgande mellan hastigheten pÄ distributionen och tillförlitligheten hos lösningen. PÄ Slack vÀrderar man snabba iterationer, korta feedbackcykler och snabb respons pÄ anvÀndarfrÄgor. Dessutom finns det hundratals programmerare i företaget som strÀvar efter maximal produktivitet.

Metodologin för att rulla ut projekt som anvÀnds i Slack

Författarna till materialet, vars översÀttning vi publicerar idag, sÀger att ett företag som strÀvar efter att upprÀtthÄlla sÄdana vÀrderingar och samtidigt vÀxer, stÀndigt mÄste förbÀttra sitt system för distribution av projekt. Företaget mÄste investera i transparens och tillförlitlighet i arbetsprocesserna för att dessa processer ska motsvara projektets omfattning. HÀr handlar det om de arbetsprocesser som har utvecklats pÄ Slack och om nÄgra lösningar som har lett företaget till att anvÀnda det befintliga systemet för distribution av projekt.

Hur distributionsprocesserna för projekt fungerar idag

Varje PR (pull request) i Slack mÄste obligatoriskt genomgÄ kodgranskning och mÄste framgÄngsrikt klara alla tester. Först efter att dessa villkor har uppfyllts kan programmeraren slÄ samman sin kod med master-grenen i projektet. Dock utförs distribution av sÄdan kod endast under arbetstid enligt nordamerikansk tid. Som en följd Àr vi, eftersom vÄra anstÀllda Àr pÄ sina arbetsplatser, helt redo för att hantera eventuella ovÀntade problem.

Varje dag genomför vi runt 12 planerade distributioner. Vid varje distribution Àr den programmerare som Àr utsedd som huvudansvarig för distributionen ansvarig för att lansera den nya versionen i produktion. Detta Àr en flertrinsprocess som sÀkerstÀller en smidig övergÄng av byggnaden till drift. Tack vare denna metod kan vi upptÀcka fel innan de pÄverkar alla vÄra anvÀndare. Om det skulle uppstÄ för mÄnga fel kan distributionen av versionen ÄterstÀllas. Om dock ett enskilt problem upptÀcks efter lanseringen kan en fix enkelt slÀppas för det.

Metodologin för att rulla ut projekt som anvÀnds i Slack
GrÀnssnittet för Checkpoint-systemet som anvÀnds pÄ Slack för distribution av projekt

Processen för att distribuera en ny version i produktion kan beskrivas som bestÄende av fyra steg.

▍1. Skapa en releasegren

Varje release börjar med en ny releasegren, som markerar en punkt i vÄr Git-historia. Detta möjliggör att vi kan tilldela taggar till releasen och ger en plats för att göra akuta korrigeringar för fel som upptÀckts under förberedelserna för att slÀppa den i produktion.

▍2. Utrullning i staging-miljö

NÀsta steg Àr att rulla ut bygget pÄ staging-servrar och köra automatiserade tester för att kontrollera den övergripande funktionaliteten hos projektet (smoke test). Staging-miljön Àr en produktion-miljö dÀr extern trafik inte nÄr. I denna miljö utför vi ytterligare manuell testning. Detta ger oss extra trygghet i att det Àndrade projektet fungerar korrekt. Endast automatiserade tester Àr inte tillrÀckliga för att uppnÄ samma nivÄ av sÀkerhet.

▍3. Utrullning i dogfood- och canary-miljöer

Utrullningen i produktionen börjar med dogfood-miljön, som bestÄr av en uppsÀttning vÀrdar som hanterar vÄra interna arbetsytor i Slack. Eftersom vi Àr mycket aktiva anvÀndare av Slack har denna metod hjÀlpt oss att upptÀcka mÄnga fel i ett tidigt skede av utrullningen. NÀr vi har sÀkerstÀllt att systemets grundlÀggande funktionalitet inte har pÄverkats, utför vi utrullningen av bygget i canary-miljön. Denna miljö representerar system som fÄr ungefÀr 2% av produktionstrafiken.

▍4. Gradvis övergĂ„ng till produktion

Om övervakningsmÀtningarna för den nya releasen visar sig vara stabila, och om vi inte har fÄtt nÄgra klagomÄl efter att projektet rullats ut i canary-miljön, fortsÀtter vi den gradvisa övergÄngen av produktionsservrarna till den nya releasen. Utrullningsprocessen Àr uppdelad i följande steg: 10%, 25%, 50%, 75% och 100%. Detta gör att vi lÄngsamt kan dirigera produktionstrafiken till den nya releasen av systemet. Under tiden har vi tid att undersöka situationen ifall vi upptÀcker nÄgra anomalier.

▍Vad ska man göra om nĂ„got gĂ„r fel under utrullningen?

Att göra Àndringar i koden innebÀr alltid en risk. Men vi hanterar detta tack vare vÄra vÀlutbildade 'deploy-chefer' som leder processen för att fÄ ut nya versioner i produktion, övervakar övervakningsdata och koordinerar programmerarnas arbete med kodutgÄvor.

Om nÄgot faktiskt gÄr fel försöker vi upptÀcka problemet sÄ tidigt som möjligt. Vi undersöker problemet, hittar PR som orsakar fel, rullar tillbaka det, analyserar noggrant och skapar en ny byggnad. Ibland kan problemet dock förbli oupptÀckt fram till projektet gÄr i produktion. I sÄdana situationer Àr det viktigast att ÄterupprÀtta tjÀnsten. DÀrför rullar vi tillbaka till den senaste fungerande byggnaden innan vi pÄbörjar problemet.

Byggstenarna i vÄrt distributionssystem

LÄt oss titta pÄ teknologierna som ligger till grund för vÄrt projektdistributionssystem.

▍Snabba distributioner

Arbetsprocessen som beskrivits ovan kan i efterhand verka helt sjÀlvklart. Men vÄrt distributionssystem blev inte sÄ direkt.

NÀr företaget var betydligt mindre kunde hela vÄr applikation köras pÄ 10 Amazon EC2-instansar. Distribution av projektet i en sÄdan situation innebar att anvÀnda rsync för snabb synkronisering av alla servrar. Tidigare skilde det bara ett steg, representerat av en mellanliggande miljö, den nya koden frÄn produktion. Byggnader skapades och testades i en sÄdan miljö och gick sedan direkt till produktion. Det var mycket enkelt att förstÄ ett sÄdant system, det gjorde det möjligt för vilken programmerare som helst att nÀr som helst distribuera den kod de skrivit.

Men i takt med att antalet kunder ökade, vĂ€xte ocksĂ„ omfattningen av infrastrukturen som behövdes för att stödja projektets drift. Snart, med den kontinuerliga tillvĂ€xten av systemet, slutade vĂ„r distributionsmodell, som var baserad pĂ„ att skicka ny kod till servrar, att fungera. Varje ny server som lades till innebar en ökning av den tid som krĂ€vdes för distribution. Även strategier som baserades pĂ„ parallella rsync-tillĂ€mpningar har sina begrĂ€nsningar.

Som ett resultat beslutade vi att lösa detta problem genom att övergÄ till ett helt parallellt distributionssystem, som Àr uppbyggt pÄ ett annat sÀtt Àn det gamla systemet. NÀmligen, nu skickade vi inte koden till servrarna med hjÀlp av ett synkroniseringsskript. Nu laddade varje server ner den nya versionen sjÀlv, genom att ta reda pÄ att detta behövdes genom att observera förÀndringen av Consul-nyckeln. Servrarna laddade ner koden parallellt. Detta gjorde att vi kunde upprÀtthÄlla en hög distributionshastighet Àven i en miljö med stÀndig systemtillvÀxt.

Metodologin för att rulla ut projekt som anvÀnds i Slack
1. Produktionsservrarna övervakar Consul-nyckeln. 2. Nyckeln Àndras, vilket meddelar servrarna att de ska börja ladda ner ny kod. 3. Servrarna laddar ner tarball-filer med applikationskoden.

▍AtomĂ€ra distributioner

En annan lösning som hjÀlpte oss att nÄ ett flerlagers distributionssystem var atomÀr distribution.

Innan vi anvÀnde atomÀra distributioner kunde varje distribution leda till en stor mÀngd felmeddelanden. Det berodde pÄ att processen med att kopiera nya filer till produktionsservrarna inte var atomÀr. Detta ledde till att det fanns en kort tidsperiod dÄ koden som gav tillgÄng till nya funktioner var tillgÀnglig innan dessa funktioner sjÀlva var aktiverade. NÀr sÄdan kod anropades ledde det till interna fel. Det visade sig i misslyckade API-anrop och 'trasiga' webbsidor.

Teamet som arbetade med detta problem löste det genom att införa begreppen 'heta' (hot) och 'kalla' (cold) kataloger. Koden i den 'heta' katalogen ansvarar för behandlingen av produktionstrafik. I de 'kalla' katalogerna förbereds koden under systemets drift för anvÀndning. Under distributionen kopieras den nya koden till en oanvÀnd 'kall' katalog. Sedan, nÀr det inte finns nÄgra aktiva processer pÄ servern, görs en omedelbar vÀxling av katalogerna.

Metodologin för att rulla ut projekt som anvÀnds i Slack
1. Packa upp applikationskoden i den 'kalla' katalogen. 2. VÀxla systemet till den 'kalla' katalogen, som blir 'het' (atomÀr operation)

Sammanfattning: Förflyttning av fokus mot tillförlitlighet

Under 2018 nÄdde projektet en storlek dÀr snabb distribution började skada produktens stabilitet. Vi hade ett ganska avancerat distributionssystem, dÀr vi nedlagt mycket tid och kraft. Vi behövde bara omorganisera och förbÀttra distributionsprocesserna. Vi hade blivit ett tillrÀckligt stort företag, vars lösningar anvÀndes vÀrlden över för att sÀkerstÀlla oavbruten kommunikation och lösa viktiga problem. DÀrför blev tillförlitlighet vÄrt fokus.

Vi behövde göra processen för att distribuera nya Slack-versioner sÀkrare. Detta behov ledde oss till att förbÀttra vÄrt distributionssystem. Som vi nÀmnde tidigare diskuterade vi just detta förbÀttrade system. Inom systemet fortsÀtter vi att anvÀnda teknologier för snabb och atomÀr distribution. Det har förÀndrat sÀttet pÄ vilket distributionen utförs. VÄrt nya system Àr utformat för att gradvis distribuera ny kod pÄ olika nivÄer och i olika miljöer. Vi anvÀnder nu mer avancerade verktyg och övervakningsmedel Àn tidigare. Detta ger oss möjlighet att fÄnga och ÄtgÀrda fel lÄngt innan de fÄr chans att nÄ slutanvÀndaren.

Men vi tÀnker inte stanna hÀr. Vi förbÀttrar stÀndigt detta system genom att tillÀmpa mer avancerade hjÀlpverktyg och automatiseringsmedel.

KÀra lÀsare! Hur fungerar processen för distribution av nya projektversioner pÄ din arbetsplats?

Metodologin för att rulla ut projekt som anvÀnds i Slack

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster