Elavad andmebaasid Kuberneteses?

Elavad andmebaasid Kuberneteses?

Ajalooliselt on IT-tööstus jagunenud kaheks tinglikuks leeriks: need, kes on "pool" ja need, kes on "vastu". Ja teemad, mille ĂŒle vaieldakse, vĂ”ivad olla tĂ€iesti ettearvamatud. Milline operatsioonisĂŒsteem on parem: Win vĂ”i Linux? Kas nutitelefon peab olema Android vĂ”i iOS? Kas hoida kĂ”ik pilves vĂ”i laadida need kĂŒlmade RAID-hoidlatele ja panna kĂ”vakettad seifi? Kas PHP arendajad vĂ”ivad end programmeerijateks nimetada? Need vaidlused on mĂ”nikord rangelt eksistentsiaalsed ja neil ei ole mingit muud, peale spordihuvitava, alust.

Nii ongi juhtunud, et koos konteinerite tekkimisega ja kogu selle armastatud Docker'i ja jĂ€tkuva k8s'iga, algasid vaidlused "poolte" ja "vastu" uute vĂ”imaluste kasutamise ĂŒle erinevates tagaridade valdkondades. (Enne algust tasub mainida, et kuigi antud arutelus kasutatakse orkestrimise tööriistana sageli Kubernetes, ei ole selle tööriista valik pĂ”himĂ”tteliselt oluline. Selle asemel vĂ”ib kasutada mis tahes muud, mis tundub teile kĂ”ige mugavam ja tuttavam.)

Ja tundub, et see oleks lihtsalt vaidlus kahe poole vahel nagu kahepoolne mĂŒnt. Niisama mĂ”ttetu ja halastamatu, nagu igavene vastasseis Win vs Linux, kus adekvaatsed inimesed eksisteerivad kuskil keskel. Kuid konteineriseerimise osas ei ole kĂ”ik nii lihtne. Tavalistes vaidlustes ei ole enamasti Ă”igustavat poolt, kuid seisukohal "kas rakendada" vĂ”i "mitte rakendada" konteinerid andmebaaside hoidmiseks pööratakse kĂ”ik tagurpidi. Sest teatud mĂ”ttes on nii pooldajad kui ka vastased selle lĂ€henemise suhtes Ă”iged.

Hea Pool

Hea Poole argumendi lĂŒhike kirjeldamine vĂ”ib mahtuda ĂŒhte lausesse: “Halloo, 2k19 on möödas!” See kĂ”lab kahtlemata populistlikuna, kuid kui olukorraga pĂ”hjalikult tutvuda, siis seal on oma eelised. NĂŒĂŒd vaatame neid lĂ€hemalt.

Oletame, et sul on suur veebiprojekt. See vĂ”is algselt olla rajatud mikroteenuste lĂ€henemisel vĂ”i jĂ”uda selleni evolutsioonilise tee kaudu – see pole tegelikult oluline. Sa jagasid oma projekti eraldi mikroteenusteks, seadistasid orkestreerimise, koormuse jaotamise, skaleeritavuse. Ja nĂŒĂŒd naudid rahuliku sĂŒdamega mĂ€hkides maltet, mitte ei tĂ”sta maha kukkunud servereid. Kuid kĂ”igis tegudes tuleb olla jĂ€rjepidev. VĂ€ga sageli konteineriseeritakse ainult rakendus ise – kood. Mis meil veel koodi kĂ”rval on?

Õige, andmed. Iga projekti sĂŒda on selle andmed: need vĂ”ivad olla nagu tĂŒĂŒpiline andmebaasisĂŒsteem – MySQL, Postgre, MongoDB, samuti ladustamislahendused, mida kasutatakse otsinguks (ElasticSearch), key-value ladustamislahendused vahemĂ€luks – nĂ€iteks Redis jne. Praegu ei hakka me rÀÀkima kummalistest tagasiside lahendustest, kus andmebaas kukub alla halvasti kirjutatud pĂ€ringute tĂ”ttu, vaid rÀÀgime sellest, kuidas tagada selle andmebaasi töökindlus kliendi koormuse all. Sest kui me konteineriseerime oma rakenduse ja lubame sellel vabalt skaleeruda, et töödelda mis tahes arvu sisendeid, suureneb paratamatult ka koormus andmebaasile.

Tegelikult muutuvad andmebaasi ja serveri, kus see töötab, ĂŒhenduspunktiks kitsaskoha meie kaunis konteineriseeritud tagaplaanis. Samal ajal on konteinerite virtualiseerimise pĂ”hieesmĂ€rk ĂŒlesehituse liikuvus ja paindlikkus, mis vĂ”imaldavad koormuse jaotamist meie kogu kergesti kĂ€tte saadavas infrastruktuuris maksimaalselt efektiivselt. See tĂ€hendab, et kui me ei konteineriseeri ja ei laota kĂ”iki sĂŒsteemi komponente klastrisse – teeme me vĂ€ga tĂ”sise vea.

On logiilisem klasterdada mitte ainult rakendust, vaid ka teenuseid, mis vastutavad andmete salvestamise eest. Klasterdamisel ja iseseisvalt töötavate veebiserverite juurutamisel k8s-is lahendame me juba andmete sĂŒnkroonimise probleemi — nĂ€iteks kommentaaride postitustele, kui tuua nĂ€itena mĂ”ni meedia vĂ”i blogiplatvorm. Meil on igal juhul loodud siseklaster, olgu see isegi virtuaalne, andmebaasi kujutis kui ExternalService. KĂŒsimus on selles, et ise andmebaas ei ole hetkel klasterdatud — kubises juurutatud veebiserverid vĂ”tavad teavet muudatuste kohta meie staatilisest tootmisandmebaasist, mis töötab eraldi.

Kas tunnetad ohtu? Me kasutame k8s-i vĂ”i Swarm'i koormuse jaotamiseks ning peamise langemise vĂ€ltimiseks, veebiserver, kuid me ei tee seda andmebaasi jaoks. Kuid kui andmebaas kukub, siis pole meie klasterdatud infrastruktuuri mĂ”tet - mis kasu on meil tĂŒhi veebileht, mis tagastab andmebaasi juurdepÀÀsuviga?

SeetĂ”ttu tuleb klasterdada mitte ainult veebiserverid, nagu tavaliselt tehakse, vaid ka andmebaasi infrastruktuur. Ainult sel viisil saame tagada, et kĂ”ik funktsioneerib ĂŒhes paaris, kuid omavahel iseseisvana. Ja isegi kui meie tagaplaanist poole koormusega «kukub», jÀÀb ĂŒlejÀÀnud ellu ning andmebaaside sĂŒnkroonimise sĂŒsteem klastris ja lĂ”pmatu skaleerimise ja uute klastrite juurutamise vĂ”imalus aitab kiiresti saavutada nĂ”utavad vĂ”imed - olgu andmehoidlatele andmekeskuses.

Lisaks vĂ”imaldab klasterdatud andmebaasimudel viia andmebaasi sinna, kus seda on vajalik; kui me rÀÀgime globaalset teenusest, on ĂŒsna ebaotstarbekas hoida veebiklaster kusagil San Franciscos ja samal ajal saata paketid andmebaasi poole Moskvas ja tagasi.

Samuti vĂ”imaldab andmebaasi konteinerimine tĂ”sta kĂ”ik sĂŒsteemi elemendid ĂŒhele abstraktsioonitasemele. See omakorda vĂ”imaldab arendajatel seda sĂŒsteemi otse koodist hallata, ilma et oleks vaja aktiivset administraatorite kaasamist. Arendajatel tuli mĂ”te, et uut ala projekti jaoks on vaja eraldi andmebaasi - kergesti! Kirjutasid yaml-faili, laadisid selle klastrisse ja valmis.

Ja loomulikult, sisemine haldamine lihtsustub mitmekordseks. Öelge, kui sageli olete silmad kinni pigistanud hetkel, kui uus meeskonnaliige ulatab kĂ€ed tootmisandmebaasi? Mis teil, tĂ”eliselt, on olemas ja millega te praegu töötate? Loomulikult, me kĂ”ik oleme tĂ€iskasvanud inimesed ja kuskil on meil vĂ€rske varukoopia, ning veel kaugemal — vanade kurkide ja suuskade taga — veel ĂŒks varukoopia, vĂ”ib-olla isegi kĂŒlmhoidlas, sest teie kontor on juba kord pĂ”lenud. Kuid ikkagi, iga uue meeskonnaliikme liitumine, kes pÀÀseb tootmisinfrastruktuuri ja loomulikult tootmisandmebaasi — see on kĂ”ikidele ĂŒmbritsevatele ĂŒks suur rahustav tablett. Kes teab seda uuest tulijat? VĂ”ib-olla on ta oskamatu? See on hirmutav, nĂ”ustute.

Konteineriseerimine ja sisuliselt teie projekti andmebaasi jaotatud fĂŒĂŒsiline topoloogia aitab selliseid rahustavaid olukordi vĂ€ltida. Ei usalda uut töötajat? Pole probleemi! Loome talle iseseisva klastritööstuse ja lahutame selle ĂŒlejÀÀnud andmebaasiklasteritest — sĂŒnkroniseerimine ainult kĂ€sitsi edastamise ja kahe vĂ”tme sĂŒnkroonse pööramise kaudu (ĂŒks tiimijuhile, teine administraatorile). Ja kĂ”ik on Ă”nnelikud.

Ja nĂŒĂŒd on aeg astuda vastu andmebaasi klasteriseerimise vastastele.

Tume Pool

MĂ”eldes, miks ei peaks andmebaasi konteineriseerima ja seda ĂŒhel kesksel seadmel tööle panema, serveris, ei lasku me ortodokside retoorikasse ja vĂ€idete tasemeni, nagu „vanaemad töötasid andmebaasidega rauast, ja me teeme ka!” Selle asemel proovime arendada olukorda, kus konteineriseerimine tĂ”eliselt toob kaubal tugevat kasu.

NĂ”ustute, et projekte, mis tĂ”eliselt vajavad andmebaasi konteineris, saab lugeda ĂŒhe halvima freesija sĂ”rmedel. Enamikul juhtudel on lausa k8s vĂ”i Docker Swarmi kasutamine liig, kuna neid tööriistu kasutatakse ĂŒsna sageli ainult tehnoloogia ja seadmete „kĂ”rgemate” soovituste tĂ”ttu, et kĂ”ik viia pilve ja konteineritesse. Noh, kuna see on praegu moes ja kĂ”ik teevad seda.

Poolha arvavad, et Kubernetes vĂ”i Docker kasutamine projektis on enamasti ĂŒleliigne. KĂŒsimus on selles, et mitte kĂ”ik meeskonnad vĂ”i infrastruktuuri hooldamiseks palgatud vĂ€lisfirmad ei teadvusta seda. Halvem on see, kui konteinerid on sunnitud kasutusele, kuna see toob kliendile kaasa teatud kulud.

Üldiselt levinud arvamus on, et Docker/K8s mafias lihtsalt allutab endale kliente, kes usaldavad need infrastruktuuri kĂŒsimused vĂ€lismaistele teenusepakkujatele. LĂ”ppude lĂ”puks, klastritega töötamiseks on vaja insenere, kes suudavad seda teha ja kes ĂŒldse mĂ”istavad rakendatud lahenduse arhitektuuri. Oleme juba kirjeldanud oma juhtumit vĂ€ljaande Republiciga — seal koolitasime kliendi meeskonda töötama Kubernetesese tingimustes, ja kĂ”ik jĂ€id rahule. See oli korralik. Kuid tihti vĂ”tavad „rakendajad“ K8s-i kliendi infrastruktuuri pantvangi — sest nĂŒĂŒd mĂ”istavad seda ainult nemad, kliendi poolel spetsialiste pole.

Ja nĂŒĂŒd kujutage ette, et sel viisil anname mitte ainult veebiserveri osa vĂ€liseks teenuseks, vaid ka andmebaasi hoolduse. Oleme öelnud, et andmebaas on sĂŒda ja sĂŒdame kaotus on fataalne igasuguste elusolendite jaoks. ÜhesĂ”naga, perspektiivid pole kĂ”ige paremad. Seega, hype'liku Kubernetes'e asemel peaks paljusid projekte lihtsalt mitte kokku hoidma normaalse AWS-i hinnataseme pealt, mis lahendab kĂ”ik nende veebisaidi/projekti koormusprobleemid. Kuid AWS ei ole enam moes, ja uhkus maksab rohkem kui raha — kahjuks ka IT-valdkonnas.

Okei. VÔib-olla on projekti jaoks klasterdamine tÔeliselt vajalik, kuid kui stateless-rakendustega on kÔik selge, siis kuidas korraldada korralikku vÔrgukonne klasterdatud andmebaasi jaoks?

Kui me rÀÀgime sujuvast insenerlahendusest, millega kaasneb ĂŒleminek k8s-ile, siis peamine mure on andmete replikatsioon klasterdatud andmebaasis. MĂ”ned andmebaasid suhtuvad algselt suhteliselt leebelt andmete jaotamisse oma individuaalsete instantside vahel. Paljud teised ei ole siiski nii lahked. Ja ĂŒsna sageli ei ole peamine argument andmebaasi valikul meie projekti jaoks sugugi mitte suutlikkus replitseerida minimaalseid ressursi- ja insenerikulusid. Eriti kui projekt ei olnud algselt mĂ”eldud mikroteenustena, vaid arenes lihtsalt sinna suunas.

Arvatavasti ei ole vaja rÀÀkida vĂ”rgudiskide töökiirusest — need on aeglased. See tĂ€hendab, et meil ei ole reaalset vĂ”imalust, kui midagi juhtub, tuua andmebaasi instants kuskile, kus on rohkem nĂ€iteks protsessori vĂ”imekust vĂ”i vaba operatiivmĂ€lu. Me jĂ”uame vĂ€ga kiiresti virtuaalsete distsipliinide tootlikkuse piiridesse. Seega peab andmebaas olema seotud oma isikliku masina komplektiga, mis asub otseses lĂ€heduses. VĂ”i tuleb kuidagi eraldi luua piisavalt kiire andmete sĂŒnkroonimise lahendus kavandatud reservide jaoks.

JĂ€tkates teemat virtuaalsetest failisĂŒsteemidest: Docker Volume'ide probleemid ei ole kahjuks kadunud. Üldiselt oleks soovitav pikaajalise usaldusvÀÀrse andmete sĂ€ilitamise osas kasutada maksimaalselt lihtsaid tehnilisi skeeme. Uue abstraktsioonikihi lisamine konteineri failisĂŒsteemist vanema hosti failisĂŒsteemi — on juba ise risk. Kuid kui sĂŒsteemis, mis tagab konteinerit, tekivad keerukused andmete edastamisel nende kihtide vahel, siis on asi tĂ”eliselt hull. Praeguseks on enamik tuntud progressiivsete probleemide lahendatud. Kuid te mĂ”istate, et mida keerulisem on mehhanism, seda tĂ”enĂ€olisem on, et see puruneb.

KĂ”ikide nende "seikluste" valguses on palju kasulikum ja lihtsam hoida andmebaasi ĂŒhes kohas, ning isegi kui teil on vaja rakenduse konteineriseerimist — las see töötab iseseisvalt ja pÀÀseb jaotussĂŒsteemi kaudu samal ajal andmebaasiga, mis loetakse ja kirjutatakse vaid ĂŒks kord ja ĂŒhes kohas. Selline lĂ€henemine vĂ€hendab vigade ja desĂŒnkroniseerimise tĂ”enĂ€osust minimaalseteks vÀÀrtusteks.

Kuhu me jĂ”uame? TĂ”demuseni, et andmebaasi konteineriseerimine on asjakohane seal, kus see on tĂ”eliselt vajalik. Te ei saa mahutada andmebaasi tĂ€israkenduse ja kĂ€itada seda nii, nagu teil oleks kaks tosinat mikroteenust — see ei tööta nii. Ja seda tuleb selgelt mĂ”ista.

VĂ€ljundi asemel

Kui te ootate arusaadavat vastust kĂŒsimusele "kas virtualiseerida andmebaas vĂ”i mitte", siis peame teid pettuma: sellist vastust siin ei tule. Sest iga infrastruktuuri lahenduse loomisel tuleb lĂ€htuda mitte moest ja arengust, vaid eeskĂ€tt terve mĂ”istuse pĂ”himĂ”tetest.

On projekte, kuhu pĂ”himĂ”tted ja tööriistad, mis tulevad koos Kubernetesega, sobivad ideaalselt, ja sellistes projektides saavutatakse rahu vĂ€hemalt tagumises osas. Kuid on projekte, mis vajavad mitte konteineriseerimist, vaid normaalset serveri infrastruktuuri, sest nad ei suuda pĂ”himĂ”tteliselt mikroteenuste klastrimudeli alla ĂŒmber skaaleerida, muidu kukuvad nad kokku.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster