Om sommeren falder bÄde kÞbsaktivitet og intensiteten af Êndringer i infrastrukturen for webprojekter, fortÊller Captain Obvious os. Bare fordi selv it-folk, sker der, gÄr pÄ ferie. Og CTO'er ogsÄ. Det gÞr det svÊrere for dem, der bliver pÄ posten, men det handler ikke om det nu; muligvis er det derfor, at sommeren er den bedste tid til at tage sig tid til at overveje den eksisterende backup-ordning og lave en plan for at forbedre den. Og her kan du have gavn af erfaringen fra Yegor Andreev fra , som han delte pÄ konferencen .
NÄr vi bygger backup-steder, er der flere fÊlder, vi kan falde i. Og det er helt uacceptabelt at falde i dem. Det, der skader os i alt dette, som i meget andet, er perfektionisme og... dovenskab. Vi prÞver at fÄ alt gjort perfekt, men det er ikke nÞdvendigt at gÞre alt perfekt! Det er vigtigt kun at gÞre bestemte ting, men gÞre dem korrekt og fuldfÞre dem, sÄ de fungerer ordentligt.
Failover er ikke noget sjovt og underholdende, der bare er for sjov; det er noget, der skal gĂžre prĂŠcis Ă©n ting â reducere nedetid, sĂ„ tjenesten, firmaet, taber fĂŠrre penge. Og i alle metoder til backup foreslĂ„r jeg at tĂŠnke i fĂžlgende kontekst: hvor er pengene?

Den fĂžrste fĂŠlde: nĂ„r vi bygger store pĂ„lidelige systemer og arbejder med backup â reducerer vi antallet af nedbrud. Det er en frygtelig misforstĂ„else. NĂ„r vi arbejder med backup, Ăžger vi sandsynligvis antallet af nedbrud. Og hvis vi gĂžr alt rigtigt, vil vi samlet set reducere nedetiden. Der vil vĂŠre flere nedbrud, men de vil ske med fĂŠrre omkostninger. Hvad er backup? â det er en komplikation af systemet. Enhver komplikation er en dĂ„rlig ting: vi fĂ„r flere smĂ„ dele, flere tandhjul, kort sagt, flere elementer â og dermed er der en hĂžjere chance for, at noget gĂ„r i stykker. Og de vil faktisk gĂ„ i stykker. Og de vil bryde oftere. Et enkelt eksempel: lad os sige, at vi har en hjemmeside, der bruger PHP og MySQL. Og den skal hurtigt sikres.
SÄ, vi tager den anden platform, bygger et identisk system... Kompleksiteten fordobles - vi har to enheder. Og sÄ opbygger vi en bestemt logik for overfÞrsel af data fra den ene platform til den anden - altsÄ datareplication, kopiering af statiske filer osv. Logikken for replication er som regel meget kompleks, og dermed kan den samlede kompleksitet af systemet vÊre ikke 2, men 3, 5, 10 gange stÞrre.
Den anden fÊlde: nÄr vi bygger virkelig store komplekse systemer, fantasere vi om, hvad vi Þnsker at opnÄ i sidste ende. Voilà : Vi Þnsker at fÄ et superpÄlideligt system, der fungerer uden nedetid, skifter over pÄ et halvt sekund (eller endnu bedre Þjeblikkeligt), og vi begynder at gÞre vores drÞmme til virkelighed. Men der er ogsÄ en nuance her: jo mindre den Þnskede skiftetid er, desto mere kompleks bliver logikken i systemet. Jo mere kompleks logikken bliver, desto oftere vil systemet gÄ i stykker. Man kan havne i en meget ubehagelig situation: vi prÞver med alle krÊfter at reducere nedetid, men i virkeligheden gÞr vi alt mere kompliceret, og nÄr noget gÄr galt, vil nedetiden i sidste ende vÊre stÞrre. Her fanger man ofte sig selv i tanken: ah... det ville have vÊret bedre ikke at have reserveret. Det ville have vÊret bedre, hvis det bare fungerede med en forstÄelig nedetid.
Hvordan kan man bekÊmpe dette? Vi mÄ stoppe med at lyve for os selv, stoppe med at rose os selv, om at vi her nu vil bygge et rumskib, men realistisk forstÄ, hvor lÊnge projektet egentlig kan tage. Og til denne maksimale tid vil vi vÊlge, hvilke metoder vi vil bruge til at Þge pÄlideligheden af vores system.

Det er tid til nogle "historier fra livet"⊠fra livet, selvfÞlgelig.
Eksempel nummer et
Forestil dig en visitkort website for rĂžrproduktionsfabrikken nr. 1 i by N. Der stĂ„r med store bogstaver - RĂRPRODUKTION FABRIK NR. 1. Lidt lĂŠngere nede - sloganet: "Vore rĂžr er de mest runde rĂžr i N". Og nederst telefonnummeret til direktĂžren og hans navn. Vi forstĂ„r, at det er vigtigt at reservere - det er virkelig en vigtig ting! Vi begynder at finde ud af, hvad det bestĂ„r af. Html-statik - det vil sige et par billeder, hvor direktĂžren faktisk sidder ved bordet i saunaen med sin partner og diskuterer en eller anden aftale. Vi begynder at tĂŠnke pĂ„ nedetid. Det kommer til at tĂŠnke, at man skal ligge der i fem minutter, ikke mere. Og sĂ„ spĂžrgsmĂ„let: hvor mange salg har vi egentlig haft fra vores hjemmeside? Hvor mange? Hvad betyder "nul"? Eller faktisk: fordi alle fire handler fra det sidste Ă„r gjorde direktĂžren ved det samme bord, med de samme mennesker, som de gĂ„r i sauna med og sidder ved bordet. Og vi forstĂ„r, at selv hvis dagen gĂ„r, kommer der ikke til at ske noget skrĂŠmmende.
Ud fra de indledende oplysninger er der en dag til at fÄ denne historie op at kÞre. Vi begynder at tÊnke pÄ reservationsskemaet. Og vi vÊlger det mest ideelle skema til reservation for dette eksempel: vi bruger ikke reservation. Hele denne ting kan enhver administrator sÊtte op pÄ en halv time med pauser. SÊtte en webserver op, lÊgge filer - det hele. Det vil kÞre. Der er ikke noget, man skal holde Þje med, intet der krÊver sÊrlig opmÊrksomhed. SÄ konklusionen fra eksempel nummer et er temmelig indlysende: tjenester, som ikke krÊver reservation - skal ikke reserveres.

Eksempel nummer to
Virksomhedens blog: specialuddannede skriver nyheder der, som deltagelse i en bestemt messe, eller vores lancering af et nyt produkt osv. Antag, at det er standard PHP med WordPress, en lille database og lidt statisk indhold. Det er klart, at vi ikke mÄ lade det ligge stille - "ikke mere end fem minutter!", og alt det der. Men lad os tÊnke videre. Hvad gÞr denne blog? Den tiltrÊkker besÞgende fra Yandex og Google via forskellige sÞgninger, via organisk trafik. Det er fantastisk. Men hvordan hÊnger salget sammen med dette? à benbaring: ikke rigtig. Annoncetransporten gÄr til hovedsiden, som er pÄ en anden server. Vi begynder at overveje en backup-plan for bloggen. Ideelt set skal den kunne genoprettes pÄ et par timer, og det ville vÊre godt at forberede sig pÄ det. Det ville vÊre fornuftigt at tage en maskine i et andet datacenter, installere et miljÞ pÄ den, altsÄ webserver, PHP, WordPress, MySQL, og lade den stÄ stille. I det Þjeblik vi indser, at alt er brudt sammen, skal vi gÞre to ting - genskabe en MySQL-dump pÄ 50 megabyte, det vil tage et minut, og genskabe et antal billeder fra backupen. Det er heller ikke sÄ mange. PÄ den mÄde kan hele denne ting sÊttes op pÄ en halv time. Ingen replikationer, eller Gud forbyde det, automatisk failover. Konklusion: det vi hurtigt kan genskabe fra backup - det behÞver ikke at blive reserveret.

Eksempel nummer tre, lidt mere kompliceret
Onlinebutik. PHP med open heart er lidt modificeret, MySQL med en solid database. Ret meget statisk indhold (for der er flotte HD-billeder i en onlinebutik og alt det der), Redis til sessioner og Elasticsearch til sÞgning. Vi begynder at tÊnke pÄ nedetid. Her er det klart, at en dag uden problemer kan internetbutikken ikke ligge stille. Jo lÊngere tid den ligger stille, jo flere penge mister vi. Det er tid til at skynde sig. Og hvor meget? Jeg tÊnker, at hvis vi ligger stille i en time, sÄ gÄr ingen amok. Ja, vi vil miste noget, men hvis vi arbejder hÄrdere, sÄ bliver det kun vÊrre. Vi definerer niveauet for acceptabel nedetid, i timer.
Hvordan kan man reservere alt dette? Man har brug for en maskine uanset hvad: en time er ikke meget. Mysql: her krĂŠves der allerede replikation, live replikation, fordi man sandsynligvis ikke vil kunne overfĂžre 100 GB data pĂ„ Ă©n time. Statiske filer, billeder: igen, 500 GB kan muligvis ikke overfĂžres pĂ„ en time. Derfor er det bedre straks at kopiere billederne. Redis: her bliver det interessant. I Redis ligger sessioner â vi kan ikke bare slette den. For det ville ikke vĂŠre godt: alle brugere vil blive logget ud, indkĂžbskurve ryddes osv. Folk vil vĂŠre tvunget til at indtaste deres loginoplysninger igen, og mange kan vĂŠlge at forlade og ikke gennemfĂžre kĂžbet. Igen, konverteringen vil falde. PĂ„ den anden side er Redis prĂŠcis aktuelt med de senest loggede ind brugere, sĂ„ det er mĂ„ske heller ikke nĂždvendigt. En god kompromis er at tage Redis og gendanne det fra en backup, fra i gĂ„r, eller hvis der laves backup hver time â sĂ„ fra en time tilbage. Heldigvis er gendannelse fra backup lige sĂ„ simpelt som at kopiere Ă©n fil. Den mest interessante historie er Elasticsearch. Hvem har nogensinde opsat MySQL replikation? Hvem har nogensinde opsat Elasticsearch replikation? Og hos hvem har den fungeret ordentligt bagefter? Jeg siger: vi ser en eller anden enhed i vores system. Den virker nyttig â men den er kompleks.
Kompleks, fordi vores ingeniÞrkolleger ikke har erfaring med den. Enten har de haft en negativ erfaring, eller ogsÄ forstÄr vi, at det stadig er en ret ny teknologi med nuancer eller ufuldkommenheder. Vi tÊnker... Hmm, elastic er ogsÄ stort, det tager ogsÄ lang tid at gendanne fra backup, hvad gÞr vi? Vi forstÄr, at elastic i vores tilfÊlde bruges til sÞgning. Hvordan sÊlger vores internetbutik? Vi gÄr til marketingfolkene og spÞrger, hvor folk kommer fra. De svarer: "90% kommer direkte fra Yandex-markedet til produktkortet." Og enten kÞber de eller gÞr de ikke. Derfor har 10% af brugerne brug for sÞgning. Og at opretholde replikering af elastic, isÊr mellem forskellige datacentre i forskellige zoner, er der virkelig mange nuancer. Hvad er lÞsningen? Vi tager elastic pÄ et reserveret sted og gÞr ikke noget med det. Hvis det trÊkker ud, sÄ mÄske rejser vi det en dag, men det er ikke sikkert. Egentlig er konklusionen plus-minus den samme: tjenester, der ikke pÄvirker penge, reserverer vi ikke igen. For at holde systemet simplere.

Eksempel nummer fire, endnu svĂŠrere.
Integrator: blomstersalg, taxaopkald, salg af varer, kort sagt, hvad som helst. En seriÞs ting, der arbejder 24/7 for mange brugere. Med en komplet og interessant stak, hvor der er interessante databaser, lÞsninger, hÞj belastning, og vigtigst af alt, kan det ikke vÊre nede i mere end 5 minutter. Ikke kun fordi folk ikke vil kÞbe, men fordi folk vil se, at denne ting ikke fungerer, bliver skuffede og mÄske slet ikke kommer tilbage.
Okay. Fem minutter. Hvad skal vi gĂžre ved dette? I dette tilfĂŠlde bygger vi, som voksne, en rigtig reserveret platform, med replikering af det hele og mĂ„ske endda automatiserer overgangen til denne platform sĂ„ meget som muligt. Og derudover mĂ„ vi ikke glemme at gĂžre Ă©n vigtig ting: faktisk at skrive en overgangsprocedure. Proceduren, selvom alt er automatiseret, kan vĂŠre meget simpel. I stil med "start dette ansible-scenarie", "klik pĂ„ den bestemte boks i route 53" osv. â men det skal vĂŠre en prĂŠcis liste over handlinger.
Og det virker til at vÊre klart. At skifte replikationen er en triviel opgave, ellers skifter den automatisk. At omskrive domÊnenavnet i DNS er af samme slags. Problemet er, at nÄr et sÄdant projekt falder, opstÄr der panik, og selv de stÊrkeste og mest erfarne administratorer kan blive ramt af det. Uden en klar instruktion som "Äbn terminalen, gÄ hertil, og vores servers adresse er stadig sÄdan her" er det svÊrt at overholde en tidsramme pÄ 5 minutter til genoplivning. Og nÄr vi bruger denne retningslinje, er det let at registrere Êndringer i infrastrukturen, for eksempel, og Êndre retningslinjen tilsvarende.
Men hvis reserveringssystemet er meget komplekst, og vi pÄ et tidspunkt laver en fejl, kan vi bÄde nedlÊgge vores backup-lokation og samtidig forvandle dataene til grÞd pÄ begge lokationer - det vil vÊre meget trist.

Eksempel nummer fem, hardcore.
En international tjeneste med hundred millioner brugere over hele verden. Alle tidszoner, der findes, highload pÄ max, mÄ ikke gÄ ned overhovedet. Et minut, og det bliver trist. Hvad skal man gÞre? Reservering, igen, fuldt program. Vi gjorde alt, hvad jeg nÊvnte i det forrige eksempel, og lidt mere. En ideel verden, og vores infrastruktur - den er efter alle definitioner DevOps IaaC. SÄ alt ligger i git, og man skal bare trykke pÄ knappen.
Hvad mangler? En ting - trĂŠning. Uden det kan vi ikke. Det virker som om, at alt er perfekt, og at vi har alles kontrol. Vi trykker pĂ„ knappen, og alt sker. Selv hvis det er sĂ„dan - og vi ved, at det ikke sker - interagerer vores system med nogle andre systemer. For eksempel DNS fra route 53, S3-lagring, integration med nogle APIâer. Vi kan ikke forudse alt i dette hypotetiske eksperiment. Og indtil vi faktisk trĂŠkker kontakten - finder vi ikke ud af, om det virker eller ej.

Det var nok det hele. VÊr ikke doven og overdriv ikke. Og mÄ oppetiden vÊre med dig!
Kilde: habr.com
