Suvel tĂ”useb traditsiooniliselt nii ostjate aktiivsus kui ka veebiprojektide infrastruktuuri muutumise intensiivsus, ĂŒtleb meile Kapten Ilmselgus. Lihtsalt sellepĂ€rast, et isegi IT-ala spetsialistid lĂ€hevad vahetevahel puhkusele. Ja CTO-d samuti. Sellega on raskem neil, kes jÀÀvad ametisse, kuid praegu sellest ei rÀÀgi: vĂ”ib-olla on just seetĂ”ttu suvi parim aeg rahulikult ĂŒle vaadata olemasolev varukoopiate skeem ja koostada plaan selle tĂ€iustamiseks. Ja selles aitab teid Egor Andreevi kogemus, , millest ta rÀÀkis konverentsil .
Varupindade ehitamisel ja varukoopiate tegemisel on mitmeid lĂ”kse, millesse on lihtne sattuda. Ja nendesse ei tohi kindlasti sattuda. Selle kĂ”ik hĂ€vitab meid, nagu ka paljus muus, perfektsionism ja⊠laiskus. Me pĂŒĂŒame teha kĂ”ike vĂ”imalikult ideaalselt, aga ideaalselt tegema tegelikult ei pea! Tuleb teha ainult teatud asju, kuid Ă”igesti, viia need lĂ”pule, et nad korralikult töötaksid.
Failover ei ole mingi lĂ”bus ja mĂ€nguline asi, "et oleks"; see on asi, mis peab tegema tĂ€pselt ĂŒhte asja â vĂ€hendama seisaku aega, et teenus, ettevĂ”te kaotaks vĂ€hem raha. Ja kĂ”igis varukoopiate meetodites soovitan mĂ”elda jĂ€rgmises kontekstis: kus on raha?

Esimene lĂ”ks: kui me ehitame suuri usaldusvÀÀrseid sĂŒsteeme ja tegeleme varukoopiate tegemisega â vĂ€hendame Ă”nnetuste arvu. See on hirmus eksiarvamus. Kui me tegeleme varukoopiate tegemisega, suurendab see tĂ”enĂ€oliselt Ă”nnetuste arvu. Ja kui me teeme kĂ”ik Ă”igesti, siis kokkuvĂ”ttes vĂ€hendame me seisaku aega. Ănnetusi on rohkem, kuid need juhtuvad vĂ€iksemate kuludega. Mis on varukoopia? â see on sĂŒsteemi keerukuse suurendamine. Iga keerukus on halb: meil on rohkem kruvikeerajaid, rohkem hammasrattaid, sĂ”naga, rohkem komponente â ja seega suurem tĂ”enĂ€osus rikete tekkeks. Ja nad tĂ”epoolest purunevad. Ja purunevad tihedamini. Lihtne nĂ€ide: ĂŒtleme, et meil on mingi veebileht PHP ja MySQL. Ja see tuleb kiiresti varundada.
Noh, vĂ”tame teise platvormi ja ehitame sarnase sĂŒsteemi⊠Raskusaste kahekordistub â meil on kaks ĂŒksust. Lisaks sellele rakendame teatud loogikat andmete ĂŒlekandmiseks ĂŒhelt platvormilt teisele â see tĂ€hendab andmete replikatsiooni, staatika kopeerimist ja nii edasi. Noh, replikatsiooni loogika on tavaliselt vĂ€ga keeruline, mistĂ”ttu vĂ”ib sĂŒsteemi koguraskus olla mitte 2, vaid 3, 5 vĂ”i isegi 10 korda suurem.
Teine lĂ”ks: kui ehitame tĂ”eliselt suuri ja keerulisi sĂŒsteeme, fantaseerime, mida me lĂ”puks soovime saada. VoilĂ : me tahame superusaldusvÀÀrset sĂŒsteemi, mis töötab tĂ€iesti katkestusteta, vahetub poolsesekundi jooksul (vĂ”i veel parem â koheselt) ja hakkame oma unistusi ellu viima. Kuid siin on ka nĂŒanss: mida vĂ€hem on soovitud vahetus aega, seda keerulisemaks muutub sĂŒsteemi loogika. Mida keerulisemad on meie sĂŒsteemilogika nĂ”uded, seda sagedamini see tĂ”rkuda vĂ”ib. Ja vĂ”ime sattuda tĂ”eliselt ebamugavasse olukorda: me pĂŒĂŒame igati katkestus aega vĂ€hendada, kuid tegelikult keerustame asju, ja kui midagi lĂ€heb valesti, on katkestus aeg lĂ”puks suurem. Tihti tabad end mĂ”ttelt: noh⊠parem ei oleks me reserveerinud. Paremini oleks ĂŒks nĂ”udmist tĂ€itnud ja mĂ”istetava katkestus ajaga.
Kuidas selle vastu vĂ”idelda? Tuleb lĂ”petada endale vale ĂŒtlemine, lĂ”petada endale kiitmine, et me hakkame siin kosmoselaeva ehitama, ja mĂ”ista adekvaatselt, kui kaua projekt tegelikult kestab. Ja selle maksimaalse aja pĂ”hjal valime, milliseid meetodeid usaldusvÀÀrsuse suurendamiseks rakendame.

On just Ôige aeg «jutustusteks elust»⊠elu, muidugi.
NĂ€ide number ĂŒks
Kujutage ette visiitkaarti torutootmisettevĂ”ttest N. linnas. Sellel on suurte tĂ€htedega kirjutatud â TORUTOOTMINE â1. Veidi madalamal on slogan: «Meie torud on kĂ”ige ĂŒmmargused torud N-s». Ja allpool on ettevĂ”tte direktori telefoninumber ja tema nimi. MĂ”istame, et broneerimine on vajalik â see on vĂ€ga oluline asi! Alustame vĂ€lja selgitamist, millest see koosneb. Html-staatika â see tĂ€hendab paar pilti, kus direktor, tegelikult, istub laua taga saunas oma partneriga, arutades mĂ”nda jĂ€rjekordset tehingut. Alustame mĂ”tlema seisakule. Tuleb pĂ€he: seal peab olema umbes viis minutit, mitte rohkem. Ja nĂŒĂŒd kĂŒsimus: kui palju meie saidilt on ĂŒldse mĂŒĂŒke olnud? Kui palju-kui palju? Mida tĂ€hendab «null»? Ameerika selgub: kuna kĂ”ik neli tehingut eelmise aasta jooksul tegi direktor just seal laua taga, samade inimestega, kellega nad koos saunas on. Ja mĂ”istame, et isegi kui sait lebab pĂ€eva, pole seal midagi kohutavat.
LĂ€htudes sisendist, on ĂŒhte pĂ€eva selle asja ĂŒles tĂ”stmiseks. Alustame mĂ”tlema broneerimisskeemile. Ja valime selle nĂ€ite jaoks kĂ”ige ideaalsema broneerimisskeemi: me ei kasuta broneerimist. KĂ”ik see tĂ”stetakse ĂŒles igasuguse administraatori poolt poole tunni jooksul koos pausidega. Veebiserveri seadistamine, failide ĂŒleslaadimine â kĂ”ik. See hakkab tööle. Ei pea millegi jĂ€lgimisega vaeva nĂ€gema, millelegi erilist tĂ€helepanu pöörama. Seega on esimese nĂ€ite jĂ€reldus ĂŒsna ilmselge: teenuseid, mida broneerida ei ole vaja â broneerida ei ole vaja.

Teine nÀide
EttevĂ”tte blogi: spetsiaalselt koolitatud inimesed kirjutavad sinna uudiseid, et osaleda nĂ€iteks mingil messil vĂ”i esitleda uut toodet ja nii edasi. Oletame, et see on standardne PHP koos WordPressiga, vĂ€ike andmebaas ja natuke staatikat. Loomulikult tuleb jĂ€lle meelde, et midagi ei tohi jĂ€tta lihtsalt seisma â "kuni viis minutit!", ja need asjad. Kuid mĂ”elgem edasi. Mida see blogi teeb? Siia tulevad kĂŒlastajad Yandexist, Google'ist mingite pĂ€ringute kaudu, orgaaniliselt. Huvitav. Aga kuidas on mĂŒĂŒgiga? Ăks teadlik avastus: ei kuigi palju. Reklaamiliiklus suundub peamisele saidile, mis asub teisel serveril. Hakkame mĂ”tlema, kuidas tagada blogi reserveerimine. Parima lahendusena peaksime olema valmis selle paariks tunniks ĂŒles tĂ”stma. MĂ”istlik oleks vĂ”tta teises andmekeskuses server, installida sellele keskkond, st veebiserver, PHP, WordPress, MySQL ja hoida seda nö. valmisolekus. Kui me mĂ”istame, et midagi on katki, tuleb teha kaks asja - taastada MySQL dump suurusega 50 MB, mis lĂ€bib seal minutiga, ja OAuth seansiga taastada mingi hulk pilte varukoopiast. See ei ole ka seal just tohutult palju. Nii tĂ”useb kogu see sĂŒsteem poole tunni pĂ€rast ĂŒles. Ei mingit replikatsiooni vĂ”i lunastust, Allah hoidku, automaatset failover'it. JĂ€reldus: mida saame kiiresti taastada varukoopiast, ei pea reserveerima.

NĂ€ide number kolm, keerulisem
Internetipood. PHP koos pisut kohandatud open heart'iga, MySQL korraliku andmebaasiga. Suur hulk staatikat (sest internetipoes on ilusad HD-pildid ja muud sellist), Redis sessioonide jaoks ja Elasticsearch otsinguks. Hakkame mĂ”tlema seisaku ajale. Ja siin on loomulikult ilmne, et pĂ€ev ilma probleemideta internetipood ei saa olla. Mida kauem see seisab, seda rohkem raha me kaotame. Tuleb kiirendada. Aga kui palju? Arvan, et kui me tunni seisame, siis keegi ei lĂ€he segaseks. Jah, me kaotame midagi, aga kui hakkame liiga agaralt pingutama â lĂ€heb vaid hullemaks. MÀÀrame tunni jooksul lubatava seisaku skeemi.
Kuidas seda kĂ”ike reserveerida? Masin on igal juhul vajalik: tund aega on ĂŒsna vĂ€he. Mysql: siin on juba vajalik replikatsioon, elav replikatsioon, sest tunni jooksul 100 GB dumpi tĂ”enĂ€oliselt ei mahu. Statiika, pildid: taas, tunni jooksul 500 GB ei pruugi jĂ”uda. Seega on parem kohe pildid kopeerida. Redis: siin on asi huvitavam. Redis'e seansid on seal â lihtsalt vĂ”tta ja hĂ€vitada me ei saa. Sest see ei oleks vĂ€ga hea: kĂ”ik kasutajad logivad vĂ€lja, ostukorvid on tĂŒhjad ja nii edasi. Inimesed peavad uuesti sisestama oma sisselogimise ja parooli, ja palju inimesi vĂ”ib loobuda ning ostu mitte lĂ”petada. JĂ€lle, konversioon langeb. Teiselt poolt, Redis on siiski tĂ€pselt nagu viimasena sisse logitud kasutajad, ilmselt ei ole ka see vajalik. Hea kompromiss oleks vĂ”tta Redis ja taastada see varukoopiast, eilsetest, vĂ”i kui see toimub iga tunni jĂ€rel, â tunni vanusest. Ănneks on selle taastamine varukoopiast ĂŒhe faili kopeerimine. Ja kĂ”ige huvitavam lugu on Elasticsearch. Kes on kunagi seadistanud MySQL replikatsiooni? Kes on kunagi seadistanud Elasticsearch'i replikatsiooni? Ja kellel see on pĂ€rast normaalselt töötanud? Mida ma mĂ”tlen: nĂ€eme meie sĂŒsteemis mingit olemust. See tundub olevat kasulik â aga see on keeruline.
See, our engineers have little to no experience working with it. Or they have some negative experiences. We understand that this is still a fairly new technology with nuances or immaturity. We're thinking⊠Damn, Elasticsearch is also quite bulky, and it takes a long time to recover it from backup, what do we do? We understand that Elasticsearch is used for searching in this case. But how does our online store sell? We ask the marketers where customers come from. They reply: "90% come directly from Yandex Market to the product card." And they either buy or they donât. Consequently, search is only needed by 10% of users. Maintaining the replication of Elasticsearch, especially between different data centers in various zones, indeed has many nuances. Whatâs the way out? We take Elasticsearch on a dedicated site and do nothing with it. If it takes longer, maybe we'll bring it back up someday, but that's not certain. Essentially, the conclusion remains more or less the same: services that donât affect revenue, we again donât reserve. To keep the scheme simpler.

Example number four, even more complicated.
Integrator: flower sales, taxi calls, product sales, in general, anything. A serious setup that operates 24/7 for a large number of users. With a fully featured interesting stack, containing intriguing databases, solutions, high loads, and most importantly, being down for more than 5 minutes is painful. Not just because people wonât buy, but because they will see that this thing isnât working, get upset, and might not come back at all.
Okay. Five minutes. What are we going to do about this? In this case, we seriously build a real backup site with replication of everything and possibly even automate the switch to this site to the maximum. And in addition to that, one important thing should not be forgotten: to actually write a switching procedure. The procedure, even if everything is automated, can be very simple. Like "run this ansible scenario," "check this box in Route 53," and so on â but it should be a precise list of actions.
Ja kĂ”ik tundub olevat selge. Replikatsiooni aktiveerimine on triviaalne ĂŒlesanne, vĂ”i siis aktiveerub see ise. Domeeninime mĂ”ttevahetus DNS-is kuulub sama kategooriasse. Probleem on selles, et kui sarnane projekt ebaĂ”nnestub, tekib paanika, ja isegi kĂ”ige tugevamad, kogenud administraatorid vĂ”ivad selle all murduda. Ilma selgete juhisteta "ava terminal, mine siia, meie serveri aadress on endiselt selline" on raske pidada 5-minutilist tĂ€htaega elustamiseks. Lisaks, kui me seda korda kasutame, on lihtne fikseerida mingeid muudatusi infrastruktuuris, nĂ€iteks â ja vastavalt sellele muuta korda.
Kuid, kui broneerimissĂŒsteem on vĂ€ga keeruline ja mingil hetkel teeme vea, vĂ”ime me lĂŒkata alla ka meie varukoha, ning lisaks muuta andmed mĂ”lemas kohas peaaegu kasutuks â see oleks tĂ”eliselt kurb.

NÀide number viis, tÀielik hardcore.
Rahvusvaheline teenus, millel on sadu milioneid kasutajaid ĂŒle kogu maailma. KĂ”ik ajavööndid, mis ainult olemas on, kĂ”rge koormus maksimaalselt, ei tohi ĂŒldse olla hĂ€ired. Ăks minut â ja olukord muutub kurvaks. Mida teha? Broneerida, jĂ€lle tĂ€ielikult. Tehtud on kĂ”ik, millest eelnevas nĂ€ites rÀÀkisin, ja veel natuke rohkem. Ideaalne maailm, ja meie infrastruktuur â see on kĂ”igis DevOps'i mĂ”istes IaaC. See tĂ€hendab, et kĂ”ik on git'is, ja vajuta lihtsalt nuppu.
Mida puudu jÀÀb? Ăht â harjutusi. Ilma nendeta ei saa. Tundub, et meil on kĂ”ik ideaalne, meil on tĂ”eliselt kĂ”ik kontrolli all. Vaatame nuppu, kĂ”ik juhtub. Isegi kui see nii on â ja me mĂ”istame, et see ei ole tĂ”si â meie sĂŒsteem suhtleb mingite teiste sĂŒsteemidega. NĂ€iteks, see on DNS Route 53-lt, S3 salvestamiseks, integreerimine mingite API-dega. KĂ”ike ette nĂ€ha selle hĂŒpoteetilise eksperimendi raames me ei suuda. Ja kuni me reaalsetl lĂŒlitit ei tĂ”mba â ei saa me teada, kas see töötab vĂ”i mitte.

Sellega on vist kĂ”ik. Ărge olge laisk ja Ă€rge ĂŒle pingutage. Ja las uptime olgu teiega!
Allikas: habr.com
