Andmete salvestamise mustrid Kuberneteses

Andmete salvestamise mustrid Kuberneteses
Tere, Habr!

Tuletame meelde, et oleme vĂ€lja andnud uue, ÀÀrmiselt huvitava ja kasuliku raamat Kubernetes'e mustrite kohta. KĂ”ik algas "Mustritest" Brendan Burnsilt, ja muide, meie töö sellel alal keeb. TĂ€na pakume teile lugeda MinIO blogi artiklit, mis lĂŒhidalt kĂ€sitleb andmemustrite hoidmise suundi ja spetsiifikat Kuberneteses.

Kubernetes on pĂ”himĂ”tteliselt muutnud traditsioonilisi rakenduste arendamise ja juurutamise mustreid. NĂŒĂŒd vĂ”ivad meeskondadel minna pĂ€evad rakenduse arendamiseks, testimiseks ja juurutamiseks – erinevates keskkondades, ja seda kĂ”ike Kubernetes klastrite piirides. Selline töö eelneva pĂ”lvkonna tehnoloogiatega vĂ”ttis tavaliselt tervete nĂ€dalate, kui mitte kuude, jagu aega.

Selline kiirus on vĂ”imalik tĂ€nu Kubernetes'e pakkumisele, vĂ”rreldes eelnevate pĂ”lvkondade tehnoloogiatega – see tĂ€hendab, et Kubernetes ise tegeleb fĂŒĂŒsiliste vĂ”i virtuaalsete masinate madalama tasandi detailidega, vĂ”imaldades kasutajatel mĂ€rgata teiste parameetrite seas vajalikku protsessorit, vajaliku mĂ€lumahtu ja konteinerite koopiate arvu. Kuna Kubernetes'e toetab tohutu kogukond ja selle rakendamine laieneb pidevalt, on see kaugel ees kĂ”igist konteinerite orkestreerimise platvormidest.

Kubernetes'e kasutamise kasvu korral suureneb ka segadus andmete hoidmise mustrite osas.

Kuna kĂ”ik konkureerivad Kubernetes'e kukeldamise nimel (st andmete hoidmine), kadub andmete hoidmise arutelu siia segasesse mĂŒrasse.
Kubernetes kehastab kaasaegset rakenduste arendamise ja juurutamise mudelit, samuti nende haldamist. See kaasaegne mudel eraldab andmete hoidmise arvutustest. Et tÀielikult mÔista sellist eraldamist Kubernetes'e kontekstis, peab mÔistma ka, mis on olekuga ja staatilise sÀilitamisega rakendused ning kuidas andmete hoidmine sellega seondub. Just siin on S3 kasutatav REST API lÀhenemisviisil selged eelised vÔrreldes teiste lahenduste iseloomuliku POSIX/CSI lÀhenemisega.

Selles artiklis rÀÀgime andmete salvestamise mustritest Kuberneteses ning kÀsitleme eraldi arutelu rakendustest, mis töötavad ilma ja koos oleku salvestamisega, et mÔista, mis nende vahel vahe on ja miks see on oluline. Edasi teksis vaatleme rakendusi ja kasutatavaid andmete salvestamise mustreid konteinerite ja Kubernetesega töötamise parimate praktikate valguses.

Oleku salvestamata konteinerid

Konteinerid on oma olemuselt kerged ja ajutised. Neid saab kergesti peatada, kustutada vĂ”i teisele sĂ”lmele rakendada – sellele kulub vaid mĂ”ned sekundid. Suures konteinerite orkestreerimise sĂŒsteemis toimuvad sellised toimingud pidevalt ning kasutajad ei mĂ€rkagi selliseid muutusi. Siiski on liikuvus vĂ”imalik ainult juhul, kui konteineril ei ole mingeid sĂ”ltuvusi sĂ”lmest, kus see asub. Selliste konteinerite kohta öeldakse, et need töötavad ilma oleku salvestamiseta.

Oleku salvestavad konteinerid

Kui konteiner salvestab andmeid kohalikult ĂŒhendatud seadmetes (vĂ”i plokkseadmestikes), peab andmete salvestus, kus ta asub, koos konteineriga uuele sĂ”lmele liikuma – juhul kui tekib tĂ”rge. See on oluline, kuna muidu ei saa konteineris kĂ€ivituv rakendus korralikult toimida, sest tal on vaja juurdepÀÀsu andmetele, mis on salvestatud kohalikesse mĂ€luseadmetesse. Selliste konteinerite kohta öeldakse, et need töötavad oleku salvestamisega.

Puht tehnilisest vaatenurgast on oleku salvestavaid konteinerid vĂ”imalik samuti teisele sĂ”lmele liigutada. TĂŒĂŒpiliselt saavutatakse see kaudu jaotatud failisĂŒsteemide vĂ”i plokkide vĂ”rgu andmesalvestuse kasutamisega, mis on seotud kĂ”ikide sĂ”lmedega, kus konteinerid töötavad. Sel moel saavad konteinerid juurdepÀÀsu pĂŒsivale andmesalvestusele ja teave salvestatakse kettale, mis asuvad kogu vĂ”rgus. Seda meetodit nimetaksin ma "oleku salvestava konteineri lĂ€henemiseks", ja artikli ĂŒlejÀÀnud osas nimetan seda niimoodi ĂŒhtsuse nimel.

Andmete salvestamise mustrid Kuberneteses

TĂŒĂŒpilise konteineripĂ”hise lĂ€henemise korral, kus sĂ€ilitatakse riik, kinnitatakse kĂ”ik rakenduste podid ĂŒhte hajutatud failisĂŒsteemi – saadakse omamoodi jagatud salvestus, kus on kĂ”ik rakenduste andmed. Kuigi vĂ”ivad esineda mĂ”ned variatsioonid, on see kĂ”rgetasemeline lĂ€henemine.

NĂŒĂŒd uurigem, miks konteineripĂ”hine lĂ€henemine riigi sĂ€ilitamisega pilvekeskses maailmas on antipattern.

Pilvekesksed rakenduste projekteerimise pÔhimÔtted

Traditsiooniliselt kasutasid rakendused andmebaase struktureeritud teabe salvestamiseks ja kohalikke kettaid vĂ”i hajutatud failisĂŒsteeme, kuhu salvestati kĂ”ik struktureerimata vĂ”i isegi osaliselt struktureeritud andmed. Aja jooksul, kui struktureerimata andmete maht kasvas, mĂ”istsid arendajad, et POSIX on liiga "rÀÀkiv", seondub mĂ€rkimisvÀÀrsete kuludega ja lĂ”puks hĂ€irib rakenduse tööd, kui minnakse tĂ”eliselt suurte mastaapide juurde.

See aitas oluliselt kaasa uue andmete salvestamise standardi tekkimisele, st pilvekesksed salvestussĂŒsteemid, mis töötavad peamiselt REST API alusel ja vabastavad rakenduse koormavast kohaliku andmesalvestuse haldamisest. Sellisel juhul töötab rakendus sisuliselt seisundita reĆŸiimis (kuna olek asub kaugandmesalves). Kaasaegsed rakendused ehitatakse juba algusest peale arvesse vĂ”ttes seda tegurit. Üldiselt on iga kaasaegne rakendus, mis töötleb mingi teabe tĂŒĂŒpi (logid, metaandmed, blobid jne), ĂŒles ehitatud pilvekesksesse paradigmasse, kus olek viiakse spetsiaalselt selle jaoks nĂ€htud tarkvarasĂŒsteemi.

KonteineripÔhine lÀhenemine riigi sÀilitamisega sunnib kogu selle paradigma tagasi minema aufs kanti, kust see alguse sai!

Kasutades POSIX-liideseid rakenduste andmete salvestamiseks töötavad rakendused nagu nad salvestaksid olekut, mis toob kaasa kÔrvalekaldeid kÔige olulisematest pilvepÔhisest disaini postulaatidest, nagu vÔimalus varieerida rakenduse töövoogude suurusi vastavalt sisenevale koormusele, liikuda uuele sÔlmele kohe, kui aktiivne sÔlm ebaÔnnestub, jne.

Sellele olukorrale lĂ€hemalt vaatates leiame, et andmesalvestuse valimisel puutume taas kokku dilemma «POSIX vs REST API», kuid lisaks POSIX-i probleemide sĂŒvenemisele, mis on tingitud Kubernetes'e jaotatud keskkonnadest. EeskĂ€tt,

  • POSIX on jutukas: POSIX-i semantika nĂ”uab, et iga toiminguga seostataks metainformatsioon ja failidesse viitavad descriptor'id, mis aitavad operatsiooni olekut sĂ€ilitada. See toob kaasa oluliselt suurenenud kulud, millel pole reaalselt mingit vÀÀrtust. Objektide salvestus-API, sealhulgas S3 API, on need nĂ”udmised eemaldanud, vĂ”imaldades rakendusel toimida ja seejĂ€rel
  • VĂ”rgupiirangud: Jaotatud sĂŒsteemis eeldatakse, et vĂ”ib eksisteerida mitmeid rakendusi, mis pĂŒĂŒavad kirjutada andmeid samale kinnitatud kandjale. SeetĂ”ttu mitte ainult, et rakendused konkureerivad omavahel ribalaiuse pĂ€rast (et saata andmeid kandjale), vaid ka andmesalvestussĂŒsteem ise konkureerib selle ribalaiuse nimel, jaotades andmeid fĂŒĂŒsilistele ketastele. POSIX-i jutukuse tĂ”ttu kasvab vĂ”rgu vĂ€ljakutsete arv mitu korda. Teisalt, S3 API tagab selge eristuse vĂ”rgu vĂ€ljakutsete vahel, mis tulevad kliendilt serverisse, ja nende, mis toimuvad serveri sees.
  • Turvalisus: POSIX turvamudeli eesmĂ€rk on aktiivne inimosalus: administraatorid konfigureerivad iga kasutaja vĂ”i grupi jaoks konkreetsed juurdepÀÀsutasemed. Selline paradigma on keeruline kohandada pilvepĂ”hisesse maailma. Kaasaegsed rakendused sĂ”ltuvad turvamudelitest, mis pĂ”hinevad API-l, kus juurdepÀÀsuĂ”igused mÀÀratletakse poliitikate kogumina, teenusekontod eraldatakse, ajutised kasutustunnused jne.
  • Haldatavus: Olemasolevate konteinerite haldamine toob kaasa teatud kulud. RÀÀgime andmete paralleelse juurdepÀÀsu sĂŒnkroonimisest, andmete jĂ€rjepidevuse tagamisest; kĂ”ik see nĂ”uab hoolikat kaalumist, milliseid andmete juurdepÀÀsupatente kasutada. On vaja paigaldada, jĂ€lgida ja konfigureerida tĂ€iendavaid programme, rÀÀkimata lisatööst arendamisel.

Konteineri andmesalvestuse liides

Konteineri andmesalvestuse liides (CSI) on suurepÀraselt aidanud rakendada Kubernetes'e mahu taset, edastades selle osaliselt kolmandate osapoolte andmesalvestuse teenustele, kuid samas on see kogemata toetanud arusaama, et konteineripÔhine lÀhenemine andmete sÀilitamisele on soovitatav meetod andmete salvestamiseks Kubernetes'es.

CSI on vĂ€lja töötatud kui standard, mis pakub pĂ€randrakendustele juhuslike plokk- ja failisalvestussĂŒsteemide toe Kubernetes'es töötades. Ja nagu on nĂ€idatud kĂ€esolevas artiklis, on ainus olukord, kus konteineripĂ”hine lĂ€henemine andmete sĂ€ilitamisele (ja CSI oma praegusel kujul) on mĂ”istlik, siis kui rakendus ise on pĂ€randisĂŒsteem, kus API objekti andmesalvestuse toe lisamine on vĂ”imatu.

Oluline on mĂ”ista, et kasutades CSI-d oma praeguses vormis, st mĂ€lumahtude mountimist modernsetes rakendustes, seisame silmitsi enam-vĂ€hem samade probleemidega, mis esinesid sĂŒsteemides, kus andmesalvestus oli korraldatud POSIX stiilis.

Kvaliteetsem lÀhenemine

Sel juhul on oluline mĂ”ista, et enamik rakendusi ei ole oma olemuselt kohandatud töötama kas oleku salvestamise vĂ”i salvestamata olekuga. Selline kĂ€itumine sĂ”ltub sĂŒsteemi ĂŒldisest arhitektuurist ja valitud valikutest projekteerimise kĂ€igus. RÀÀgime veidi rakendustest, mis salvestavad olekut.

PĂ”himĂ”tteliselt saab kĂ”ik rakenduste andmed jagada mitmeks laiapinnaliseks tĂŒĂŒbiks:

  • Logi andmed
  • Ajatempli andmed
  • Tehingu andmed
  • Metaandmed
  • Konteinerite pildid
  • Blob-andmed (suured binaarobjektid)

KĂ”iki neid andmetĂŒĂŒpe toetatakse vĂ€ga hĂ€sti kaasaegsetes andmesalvestusplatvormides ning on olemas mitmeid pilvepĂ”hiseid platforme, mis on kohandatud andmete tarnimiseks igasugustes spetsiifilistes formaatides. NĂ€iteks vĂ”ivad tehingu andmed ja metaandmed asuda kaasaegses pilvepĂ”hises andmebaasis nagu CockroachDB, YugaByte jne. Konteinerite pildid vĂ”i blob-andmed vĂ”ivad olla salvestatud MinIO-l pĂ”hinevas docker-rekis. Ajatempli andmed vĂ”ivad olla salvestatud ajarease andmebaasis, nĂ€iteks InfluxDB jne. Siin ei hakka me igasuguste andmete ja vastavate rakenduste detaile lahkama, kuid pĂ”himĂ”te on vĂ€ltida pĂŒsivalt salvestatud andmete hoidmist, mis pĂ”hinevad kohalikul ketaste mountimisel.

Andmete salvestamise mustrid Kuberneteses

Lisaks on tihti tÔhus pakkuda ajutise vahemÀlu taset, mis toimib rakenduste jaoks omamoodi ajutiste failide ladustamisena, kuid rakendused ei tohiks sellest tasemest sÔltuda tÔe allikana.

Oleku salvestava rakenduse ladustamine

Kuigi enamikul juhtudel on kasulik hoida rakendusi ilma olekuta, peavad need rakendused, mis on ette nĂ€htud andmete salvestamiseks – nĂ€iteks andmebaasid, objektide ladustamisĂŒsteemid, vĂ”tme-vÀÀrtuse ladustamised – salvestama oleku. Vaatame, miks need rakendused kĂ€ivitatakse Kuberneteses. NĂ€iteks toome MinIO, kuid sarnased pĂ”himĂ”tted kehtivad ka mistahes muude suurte pilvepĂ”histe andmesalvestussĂŒsteemide kohta.

PilvepĂ”hised rakendused on projekteeritud maksimaalse paindlikkuse tĂ”husaks kasutamiseks, mis on iseloomulik konteineritele. See tĂ€hendab, et need ei eelda mingit spetsiifilist keskkonda, kus neid kasutatakse. NĂ€iteks MinIO kasutab sisemist ĂŒleliigse kodeerimise mehhanismi (erasure coding), mis tagab sĂŒsteemi piisava vastupidavuse, et see jÀÀks toimivaks, isegi kui pooled kettad peaksid tĂ”rkuma. Samuti hooldab MinIO andmete terviklikkust ja turvalisust, rakendades oma serveripoolset hajutamist ja krĂŒptimist.

Selliste pilvepĂ”histe rakenduste jaoks on parimaks varukoopiateks kohalikud pĂŒsivad mahud (PV). Kohalik PV vĂ”imaldab salvestada tooreid andmeid, samas kui nende PV-de peal töötavad rakendused koguvad ise teavet, mis vĂ”imaldab andmete skaleerimist ja haldamist kasvavate andmepĂ€ringute jaoks.

See lĂ€henemine on palju lihtsam ja oluliselt paremini skaleeritav vĂ”rreldes CSI-pĂ”histe PV-dega, mis toovad sĂŒsteemi oma andmete haldamise ja ĂŒleliigsete tasemed; probleem on selles, et need tasemed konfliktsivad tavaliselt rakendustega, mis on projekteeritud olekut sĂ€ilitama.

Kindel liikumine andmete eraldamiseks arvutustest

Selles artiklis arutasime, kuidas rakendused suunavad oma töö uuele suundumusele, kus andmete salvestamine on lahutatud nende kohalsetest arvutustest. LÔpetuseks vaatame mÔned reaalsed nÀited selle trendi kohta.

Spark, kuulus andmeanalĂŒĂŒsi platvorm, on traditsiooniliselt kasutatud olekut sĂ€ilitades ja kasutades HDFS-i failisĂŒsteemi. Kuid Spark on ĂŒha enam liikumas pilvepĂ”hisesse maailma, kus seda platvormi kasutatakse jĂ€rjest rohkem olekuta, kasutades `s3a`. Spark rakendab s3a, et edastada olekut teistele sĂŒsteemidele, samas kui Spark konteinerid töötavad tĂ€ielikult ilma olekuta. Teised suured ettevĂ”tted suurandmete analĂŒĂŒsivaldkonnas, eelkĂ”ige Vertica, Teradata, Greenplum liiguvad samuti andmete salvestamise ja arvutuste eraldamise suunas.

Sarnased mustrid on samuti jĂ€lgitavad teistel suurtel analĂŒĂŒsiplatvormidel, sealhulgas Presto, Tensorflow to R, Jupyter. Kui eksportida olek kaugseadmestatud andmetesse, on teie rakenduse haldamine ja selle skaleerimine palju lihtsam. Lisaks sellele suurendab see rakenduse portatiivsust erinevates keskkondades.

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