Failover: perfeksjonisme og
 latskap þdelegger oss

Om sommeren synker tradisjonelt bĂ„de kjĂžpsaktiviteten og intensiteten av endringer i infrastrukturen for webprosjekter, forteller oss Kaptein Åpenbaring. Bare fordi selv IT-folk, som det hender, gĂ„r pĂ„ ferie. Og CTO-er ogsĂ„. Det er tyngre for dem som blir igjen pĂ„ posten, men det er ikke det vi snakker om nĂ„: kanskje er det derfor sommeren er den beste perioden for Ă„ i ro og mak overveie den eksisterende reservelĂžsningen og lage en plan for Ă„ forbedre den. Og erfaringen til Egor Andreev fra AdminDivision, som han delte pĂ„ konferansen Uptime day.

NÄr vi bygger reservedatasteder, er det flere feller som man kan falle i. Og det er helt uakseptabelt Ä gjÞre det. Det som Þdelegger oss i dette, som i mye annet, er perfeksjonisme og
 latskap. Vi prÞver Ä gjÞre alt helt perfekt, men det er ikke nÞdvendig Ä gjÞre alt perfekt! Det er bare nÞdvendig Ä gjÞre visse ting, men gjÞre dem riktig, fullfÞre dem slik at de fungerer som de skal.

Failover er ikke bare en morsom ting «bare for moro skyld»; det er noe som skal gjĂžre Ă©n ting — redusere nedetid, slik at tjenesten og selskapet taper mindre penger. Og i alle metoder for reservasjoner foreslĂ„r jeg Ă„ tenke i fĂžlgende kontekst: hvor er pengene?

Failover: perfeksjonisme og
 latskap þdelegger oss

Den fĂžrste fellen: NĂ„r vi bygger store, pĂ„litelige systemer og jobber med reservasjon — reduserer vi antallet uhell. Dette er en skremmende misforstĂ„else. NĂ„r vi jobber med reservasjoner, Ăžker vi sannsynligvis antallet uhell. Og hvis vi gjĂžr alt riktig, vil vi totalt redusere nedetiden. Det vil bli flere uhell, men de vil skje med mindre kostnader. For hva er reservasjon? — det er en komplisering av systemet. Enhver komplisering er dĂ„rlig: vi fĂ„r flere skruer, flere tannhjul, med andre ord, flere elementer — og dermed hĂžyere sjanse for feil. Og de vil faktisk gĂ„ i stykker. Og de vil gĂ„ i stykker oftere. Et enkelt eksempel: si at vi har et nettsted, med PHP, MySQL. Og det mĂ„ haste reserveres.

Vel, vi tar den andre plattformen og bygger et identisk system... Kompleksiteten dobles — vi har to enheter. Og i tillegg implementerer vi en viss logikk for dataoverfĂžring fra den ene plattformen til den andre — det vil si databasering, kopiering av statiske ressurser, og sĂ„ videre. SĂ„, logikken for replikering — den er vanligvis veldig kompleks, og dermed kan den samlede kompleksiteten i systemet vĂŠre ikke bare 2, men 3, 5, 10 ganger mer.

Den andre fella: nÄr vi bygger virkelig store, komplekse systemer, liker vi Ä fantasere om hva vi Þnsker Ä oppnÄ til slutt. Voilà: vi Þnsker Ä skape et superpÄlitelig system som fungerer uten nedetid, som kan veksle over pÄ et halvt sekund (eller enda bedre, helt umiddelbart), og vi begynner Ä realisere drÞmmer. Men her er det ogsÄ en nyanse: jo kortere Þnsket vekselverdi er, desto mer kompleks blir logikken i systemet. Jo mer komplisert logikken mÄ vÊre, jo oftere vil systemet bryte sammen. Og man kan havne i en veldig uheldig situasjon: vi prÞver med alle midler Ä redusere nedetiden, men vi gjÞr det bare mer komplisert, og nÄr noe gÄr galt, blir nedetiden i stedet lengre. Her fanger man seg selv med tanken: det ville vÊrt bedre om vi ikke hadde reservert. Det ville vÊrt bedre om det leverte én gang og med forstÄelig nedetid.

Hvordan kan vi kjempe mot dette? Vi mÄ slutte Ä lyve for oss selv, slutte Ä skryte av at vi nÄ skal bygge romskip, men i stedet realistisk forstÄ hvor lenge prosjektet kan vare. Og i henhold til denne maksimale tiden, vil vi velge hvilke metoder vi vil bruke for Ä Þke pÄliteligheten til systemet vÄrt.

Failover: perfeksjonisme og
 latskap þdelegger oss

Det er pÄ hÞy tid for 'historier fra livet'... fra virkeligheten, selvsagt.

Eksempel nummer én

Tenk pĂ„ et digitalt visittkort for rĂžrfabrikk nr. 1 i byen N. Det stĂ„r med store bokstaver — RØRFABRIKK NR. 1. Litt lenger ned er slagordet: «RĂžrene vĂ„re er de mest runde rĂžrene i N». Og nederst stĂ„r telefonnummeret til direktĂžren og navnet hans. Vi forstĂ„r at det er viktig Ă„ reservere — det er jo en veldig viktig ting! La oss begynne Ă„ finne ut av hva det bestĂ„r av. Html-statiske filer — det vil si et par bilder der direktĂžren sitter ved bordet i badstuen med sin partner og diskuterer en ny avtale. Vi begynner Ă„ tenke pĂ„ nedetid. Det kommer til hodet vĂ„rt: vi mĂ„ vĂŠre der i fem minutter, ikke mer. Og sĂ„ spĂžrsmĂ„let: hvor mange salg har vi gjort fra denne nettsiden? Hvor mange? Hva mener du med «null»? Vel, det betyr at alle fire avtalene fra i fjor ble gjort ved samme bord med de samme folkene som de gĂ„r i badstuen med. Vi forstĂ„r at selv om nettsiden ligger nede en dag, vil det ikke vĂŠre sĂ„ farlig.

Basert pĂ„ informasjonen, har vi en dag til Ă„ fĂ„ dette pĂ„ plass. Vi begynner Ă„ tenke pĂ„ reservasjonsordningen. Og vi velger den ideelle reservasjonslĂžsningen for dette eksempelet: vi bruker ikke reservasjon. Hele denne greia kan settes opp av hvilken som helst administrator pĂ„ en halvtime, med pauser. Installere webserveren, legge inn filene — ferdig. Det vil fungere. Ingenting mĂ„ overvĂ„kes, ingenting trenger spesiell oppmerksomhet. AltsĂ„ er konklusjonen fra eksempel nummer Ă©n ganske Ă„penbar: tjenester som ikke trenger Ă„ reserveres — trenger ikke Ă„ reserveres.

Failover: perfeksjonisme og
 latskap þdelegger oss

Eksempel nummer to

Firmaens blogg: spesialiserte personer skriver nyheter der, for eksempel deltok vi pĂ„ en viss utstilling, eller vi har lansert et nytt produkt og sĂ„ videre. La oss si at dette er standard PHP med WordPress, en liten database og litt statisk innhold. Man tenker selvsagt at man ikke bĂžr vĂŠre inaktiv — "ikke mer enn fem minutter!", alt det der. Men la oss tenke mer pĂ„ det. Hva gjĂžr denne bloggen? Den fĂ„r besĂžk fra Yandex, fra Google etter bestemte sĂžk, fra organisk trafikk. Flott. Men er salgene i det hele tatt knyttet til den? Erkjennelse: ikke spesielt. Annonsetrafikk gĂ„r til hovedsiden, som er pĂ„ en annen server. Vi begynner Ă„ tenke pĂ„ en reserveordning for bloggen. Ideelt sett bĂžr vi kunne gjenopprette den pĂ„ et par timer, sĂ„ det ville vĂŠrt bra Ă„ forberede seg pĂ„ det. Det ville vĂŠre fornuftig Ă„ ta en maskin i et annet datasenter, installere miljĂžet der, altsĂ„ webserver, PHP, WordPress, MySQL, og la det ligge inaktivt. I det Ăžyeblikket vi innser at noe har gĂ„tt galt, mĂ„ vi gjĂžre to ting — gjenopprette en MySQL-dump pĂ„ 50 MB, som gĂ„r raskt, og gjenopprette et visst antall bilder fra sikkerhetskopien. Dette tar heller ikke lang tid. PĂ„ denne mĂ„ten kan vi fĂ„ alt oppe igjen pĂ„ en halvtime. Ingen replikasjoner, eller, for guds skyld, automatisk failover. Konklusjon: det vi raskt kan gjenopprette fra sikkerhetskopi, trenger ikke Ă„ reservert.

Failover: perfeksjonisme og
 latskap þdelegger oss

Eksempel nummer tre, litt mer komplisert

Nettbutikk. PHP med litt modifisert open heart, MySQL med en solid database. Ganske mye statisk innhold (for en nettbutikk har vi jo fine HD-bilder og alt det der), Redis for sesjoner og Elasticsearch for sĂžk. Vi begynner Ă„ tenke pĂ„ nedetid. Og her er det Ă„penbart at nettbutikken ikke kan vĂŠre ute av drift en hel dag uten alvorlige konsekvenser. Jo lenger den er nede, desto mer penger taper vi. Det er pĂ„ tide Ă„ handle. Men hvor mye? Jeg tror at hvis vi er nede i en time, vil ingen gĂ„ fra forstanden. Ja, vi mister noe, men hvis vi begynner Ă„ stresse — vil det bare bli verre. Vi definerer tolerant nedetid, tillatt pr. time.

Hvordan kan alt dette reserveres? En maskin er nĂždvendig uansett: en time er ganske lite. Mysql: her trenger vi replikasjon, levende replikasjon, fordi 100 GB i dump mest sannsynlig ikke vil vĂŠre mulig Ă„ overfĂžre pĂ„ en time. Statikk, bilder: igjen, pĂ„ en time kan 500 GB ikke rekke Ă„ lastes opp. Derfor er det best Ă„ begynne Ă„ kopiere bildene med en gang. Redis: her blir det mer interessant. I Redis ligger sesjoner — vi kan ikke bare ta det og begrave det. For det vil ikke vĂŠre bra: alle brukere vil bli logget ut, handlekurvene vil bli tĂžmt, og sĂ„ videre. Folk mĂ„ tvinges til Ă„ skrive inn brukernavn og passord pĂ„ nytt, og mange kan bli borte og ikke fullfĂžre kjĂžpet. Igjen, konverteringen vil falle. PĂ„ den annen side, Redis er helt aktuell, med de sist pĂ„loggede brukerne, kanskje det heller ikke er nĂždvendig. En god kompromiss er Ă„ ta Redis og gjenopprette det fra en backup, fra i gĂ„r, eller, hvis det blir gjort hver time, fra en time siden. Heldigvis er gjenopprettingen fra backup ganske enkelt en kopiering av Ă©n fil. Den mest interessante historien er Elasticsearch. Hvem har noen gang satt opp MySQL-replikasjon? Hvem har noen gang satt opp Elasticsearch-replikasjon? Og hvem har hatt den til Ă„ fungere ordentlig etterpĂ„? Jeg mener: vi ser en viss enhet i systemet vĂ„rt. Den virker nyttig — men den er komplisert.
Vanskelig i den forstand at vÄre ingeniÞrkolleger har ingen erfaring med det. Enten har de negativ erfaring. Eller vi forstÄr at dette fortsatt er en ganske ny teknologi med sÊrtrekk eller umodenhet. Vi tenker... Pokker, elastic er ogsÄ stort, det tar lang tid Ä gjenopprette fra backup, hva gjÞr vi? Vi forstÄr at elastic brukes til sÞk i vÄrt tilfelle. Men hvordan selger nettbutikken vÄr? Vi gÄr til markedsfÞrerne og spÞr hvor folk kommer fra. De svarer: "90 % kommer direkte fra Yandex-markedet til produktsiden." Og enten kjÞper de, eller sÄ gjÞr de det ikke. FÞlgelig trenger 10 % av brukerne sÞk. Og Ä ha replikasjon av elastic, spesielt mellom forskjellige datasentre i ulike soner, har virkelig mange nyanser. Hva er lÞsningen? Vi tar elastic pÄ et reservert sted og gjÞr ingenting med det. Hvis saken drar ut, kan vi muligens heve det senere, men det er ikke sikkert. Egentlig er konklusjonen pluss-minus den samme: Tjenester som ikke pÄvirker inntektene, reserverer vi ikke igjen. For Ä holde ordningen enklere.

Failover: perfeksjonisme og
 latskap þdelegger oss

Eksempel nummer fire, enda vanskeligere.

Integrator: salg av blomster, bestilling av taxi, salg av varer, kort sagt, hva som helst. En seriĂžs greie som fungerer 24/7 for et stort antall brukere. Med en fullverdig interessant teknologistack, hvor det er spennende databaser, lĂžsninger, hĂžy belastning, og viktigst av alt, den bĂžr ikke vĂŠre nede i mer enn 5 minutter. Ikke bare fordi folk ikke kjĂžper, men fordi de vil se at denne tingen ikke fungerer, bli frustrert og kanskje ikke komme tilbake igjen.

Greit. Fem minutter. Hva skal vi gjĂžre med dette? I dette tilfellet bygger vi seriĂžst, for alle penger, en ekte reserveplass, med replikasjon av alt og alle, og muligens automatiserer vi ogsĂ„ overgangen til denne plassen. Og i tillegg til dette er det viktig Ă„ huske pĂ„ Ă©n ting: Ă„ faktisk skrive en bytteprosess. Prosedyren, selv om alt er automatisert, kan vĂŠre veldig enkel. Av typen "kjĂžr dette ansible-scenarioet", "trykk pĂ„ den aktuelle avmerkingsboksen i route 53", osv.— men det mĂ„ vĂŠre en presis liste over handlingene.

Og det virker som om alt er klart. Å bytte replikasjon er en triviel oppgave, eller sĂ„ kan den bytte seg selv. Å skrive domene navnet inn i DNS er av samme sjanger. Problemet er at nĂ„r et slikt prosjekt faller, begynner panikken, og selv de sterkeste, erfarne administratorene kan bli rammet av den. Uten en klar instruksjon "Ă„pne terminalen, gĂ„r hit, adressen til serveren vĂ„r er fortsatt slik" er det vanskelig Ă„ holde tidsrammen pĂ„ 5 minutter for gjenoppretting. Og i tillegg, nĂ„r vi bruker denne reguleringen, er det lett Ă„ fikse endringer i infrastrukturen, for eksempel, og endre reguleringen deretter.
Men, hvis reservasjons-systemet er veldig komplisert og vi pĂ„ et tidspunkt gjorde en feil, kan vi ogsĂ„ legge ned vĂ„rt backup-sted, og i tillegg kan dataene bli til gresskar pĂ„ begge steder — det ville vĂŠrt ganske trist.

Failover: perfeksjonisme og
 latskap þdelegger oss

Eksempel nummer fem, hardcore.

Internasjonal tjeneste med hundre millioner brukere over hele verden. Alle tidssoner, som finnes, highload pĂ„ maks, kan ikke vĂŠre nede i det hele tatt. Ett minutt — og det blir trist. Hva gjĂžr vi? Vi reserverer, igjen, fullt ut. Vi gjorde alt jeg snakket om i forrige eksempel, og litt mer. Den ideelle verden, og vĂ„r infrastruktur — den er i henhold til alle definisjoner av devops IaaC. Det vil si at alt er i git, og du mĂ„ bare trykke pĂ„ knappen.

Hva mangler? En ting — Ăžvelser. Uten dem kan vi ikke. Det ser ut til at alt er perfekt, vi har alt under kontroll. Vi trykker pĂ„ knappen, alt skjer. Selv om det er slik — og vi forstĂ„r at det ikke alltid er slik — vĂ„rt system interagerer med andre systemer. For eksempel, dette er DNS fra route 53, s3-lagring, integrasjon med noen API-er. Vi kan ikke forutse alt i dette hypotetiske eksperimentet. Og fĂžr vi faktisk drar i strĂžmbryteren — vil vi ikke vite om det fungerer eller ikke.

Failover: perfeksjonisme og
 latskap þdelegger oss

Det er vel alt. Ikke vÊr lat, og ikke overdriv. Og mÄtte uptime vÊre med dere!

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster