Teel serverivabade andmebaaside poole — kuidas ja miks

Tere kĂ”igile! Minu nimi on Nikolai Golov. Varem töötasin Avitos ja kuus aastat juhtisin Data Platformi, teisisĂ”nu, tegelesin kĂ”igi andmebaasidega: analĂŒĂŒtilised (Vertica, ClickHouse), voogandmed ja OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Selle aja jooksul olen sĂŒvenenud paljude andmebaaside, ehkki vĂ€ga erinevate ja ebatavaliste, ning nende mittestandardsed kasutusjuhtumid.

Praegu töötan ManyChatis. PĂ”himĂ”tteliselt on see idufirma - uus, ambitsioonikas ja kiiresti kasvav. Ja kui ma just ettevĂ”ttesse tulin, tekkis klassikaline kĂŒsimus: 'Mida peaks noor idufirma andmebaaside turult praegu valima?'.

Selles artiklis, mis pĂ”hineb minu ettekandel online-festivalil RIT++2020, vastan sellele kĂŒsimusele. Ettekanne on saadaval videoversioonina YouTube.

Teel serverivabade andmebaaside poole — kuidas ja miks

Tuntud andmebaasid 2020. aastast

On 2020. aasta, vaatan ringi ja nĂ€en kolme tĂŒĂŒpi andmebaase.

Esimene tĂŒĂŒp - klassikalised OLTP andmebaasid: PostgreSQL, SQL Server, Oracle, MySQL. Need on kirjutatud ammu, kuid on endiselt asjakohased, kuna on arendajate kogukonnale hĂ€sti tuttavad.

Teine tĂŒĂŒp - nullide ajastu andmebaasid.Need pĂŒĂŒdsid eemalduda klassikalistest mustritest, loobudes SQL-st, traditsioonilistest struktuuridest ja ACID-ist, lisades sisseehitatud sharding'i ja muid atraktiivseid funktsioone. NĂ€iteks on need Cassandra, MongoDB, Redis vĂ”i Tarantool. KĂ”ik need lahendused soovisid turule pakkuda midagi pĂ”himĂ”tteliselt uut ja leidsid oma niĆĄi, kuna osutusid teatud ĂŒlesannete tĂ€itmisel ÀÀrmiselt mugavaks. Need andmebaasid nimetan NOSQL-i teenusena.

Nullide ajastu on möödas, NOSQL andmebaasidega on harjutud ning maailm, minu arvates, on teinud jÀrgmise sammu - haldamise alla vÔetud andmebaaside suunas.Nendel andmebaasidel on sama tuum nagu klassikalistel OLTP andmebaasidel vÔi uutel NoSQL-i andmebaasidel. Kuid neil puudub vajadus DBA ja DevOps-i jÀrele ning need töötavad hallatud riistvaral pilves. Arendajale on see 'lihtsalt andmebaas', mis kuskil töötab, ja see, kuidas see serverisse paigaldatud on, kes serverit seadistab ja kes seda uuendab, kedagi ei huvit.

Selliste andmebaaside nÀited on:

  • AWS RDS - hallatud kiht PostgreSQL/MySQL ĂŒle.
  • DynamoDB - AWS analoog dokumentide pĂ”hisele andmebaasile, sarnaneb Redis ja MongoDB-iga.
  • Amazon Redshift - hallatud analĂŒĂŒtiline andmebaas.

PÔhikoht on, et need on vanad andmebaasid, kuid hallatav keskkond tÔstab need esile, ilma seadme haldamise vajaduseta.

MÀrkus. NÀited on toodud AWS keskkonnas, kuid nende analoogid on saadaval ka Microsoft Azure, Google Cloudi vÔi Yandex.Cloudis.

Teel serverivabade andmebaaside poole — kuidas ja miks

Mis on uus? 2020. aastal ei ole midagi uut.

Serverless kontseptsioon

Turul 2020. aastal turule ilmunud uus asi on serveritundlikud vÔi serverituks muudetud lahendused.

PĂŒĂŒan selgitada, mida see tĂ€hendab, tavalise teenuse vĂ”i tagaosa rakenduse nĂ€itel.
Tavalise tagaosa rakenduse kÀitamiseks ostame vÔi rendime serveri, kopeerime sellele koodi, avaldame vÀlise lÔpp-punkti ja maksame regulaarselt rendi, elektri ja andmekeskuse teenuste eest. See on standardne skeem.

Kas on kuidagi teisiti? Serveritundlike teenustega on see vÔimalik.

Mis on selle lÀhenemise fookus: serverit ei ole, isegi mitte virtuaalset instantsi pilves. Teenuse kÀitamiseks kopeerime koodi (funktsioonid) hoidlasse ja avaldame vÀlise lÔpp-punkti. Edasi maksame lihtsalt iga selle funktsiooni kutsumise eest, ignoreerides tÀielikult riistvara, kus see teostatakse.

PĂŒĂŒan illustreerida seda lĂ€henemist joonistega.
Teel serverivabade andmebaaside poole — kuidas ja miks

Klassikaline rakendamine. Meil on teenus teatud koormusega. KĂ€ivitame kaks instantsi: fĂŒĂŒsilisi servereid vĂ”i AWS-i instantsi. Nendele instantsidele suunatakse vĂ€lised pĂ€ringud, mida seal töödeldakse.

Nagu pildilt nĂ€ha, on serverid erinevalt koormatud. Üks on 100% koormatud, seal on kaks pĂ€ringut, ja teine ainult 50% — on osaliselt vabade. Kui tuleb mitte kolm pĂ€ringut, vaid 30, siis kogu sĂŒsteem ei suuda koormust taluda ja hakkab tĂ”rkeid tekitama.

Teel serverivabade andmebaaside poole — kuidas ja miks

Serveritundlik rakendus. Serveritundlikus keskkonnas sellisel teenusel ei ole instantsseid ja servereid. On mingisugune kogum kuumutatud ressursse — vĂ€iksed ettevalmistatud Docker-konteinerid koos funktsiooni koodi kĂ€itamisega. SĂŒsteem saab vĂ€liseid pĂ€ringuid ja igaĂŒhe jaoks tĂ”stab serveritundlik raamistik vĂ€ikese konteineri koodiga: töötleb just selle pĂ€ringu ja tapab konteineri.

Üks pĂ€ring — ĂŒks tĂ”stetud konteiner, 1000 pĂ€ringut — 1000 konteinerit. Ja kĂ€itamine raua serverites on juba pilveteenuse pakkuja töö. See on tĂ€ielikult varjatud serveritundliku raamistiku taha. Selles kontseptsioonis maksame iga kutsumise eest. NĂ€iteks, kui ĂŒks kutsumine tuleb pĂ€evas — maksame ĂŒhe kutsumise eest, tuli miljon minutis — maksime miljoni eest. VĂ”i sekundis, seda juhtub samuti.

Serverless funktsiooni publikatsiooni kontseptsioon sobib stateless teenusele. Kui aga vajate (state) statefull teenust, lisame teenusele andmebaasi. Sellisel juhul, kui jĂ”uame state'i töötlemiseni, kirjutab ja loeb iga statefull funktsioon lihtsalt andmebaasist. Pealegi mistahes kolmest tĂŒĂŒbist andmebaasist, nagu artikli alguses kirjeldatud.

Mis on kĂ”igi nende andmebaaside peamine piirang? See on pidevalt kasutatava pilve- vĂ”i riistvara serveri (vĂ”i mitme serveri) kulud. Pole tĂ€htis, kas kasutame klassikalist andmebaasi vĂ”i haldusandmebaasi, kas on DevOps ja administraator vĂ”i mitte, maksame nii vĂ”i teisiti 24/7 riistvara, elektri ja andmekeskuse rendi eest. Kui meil on klassikaline andmebaas, maksame masteri ja slave'i eest. Kui kĂ”rge koormusega sharded andmebaas — maksame 10, 20 vĂ”i 30 serveri eest, ja maksame pidevalt.

Kulusstruktuuri pidev serverite reserv on varem olnud vĂ€ltimatu kurbus. Tavalistel andmebaasidel on ka teisi raskusi, nagu ĂŒhenduste arvule kehtestatud piirangud, skaleeritavuse kahjustamine, geograafiline konsensus — neid saab mĂ”nes andmebaasis mĂ”nevĂ”rra lahendada, kuid mitte kĂ”ik korraga ega ideaalselt.

Serverless andmebaas — teooria

KĂŒsimus 2020. aastast: kas andmebaasi saab ka serverless teha? KĂ”ik on kuulnud serverless tagaplaanist... mis siis, kui proovime ka andmebaasi serverless teha?

See kĂ”lab kummaliselt, sest andmebaas on ju statefull teenus, mis ei sobi vĂ€ga hĂ€sti serverless infrastruktuuri. Samas on jaanus ÀÀrmiselt suur: gigabaitide, terabaitide ja analĂŒĂŒtilistes andmebaasides isegi petabaitideni. Seda ei ole nii lihtsalt kergete Docker-konteinerite sees ĂŒles tĂ”sta.

Teisest kĂŒljest, praktiliselt kĂ”ik tĂ€napĂ€evased andmebaasid sisaldavad tohutut hulka loogikat ja komponente: tehingud, terviklikkuse tagamine, protseduurid, seosed ja palju loogikat. Suuremas osas andmebaasi loogikast on vajalik ainult vĂ€hene state. Gigabaitide ja terabaitide andmeid kasutatakse otse ainult vĂ€ikese osa andmebaasi loogikast, mis on seotud vahetu pĂ€ringute tĂ€itmisega.

Seega idee: kui vÀike osa loogikast vÔimaldab stateless tÀitmist, miks mitte jagada andmebaasi stateful ja stateless osadeks.

Serverless OLAP lahenduste jaoks

Vaatame, kuidas vÔib andmebaasi jagamine stateful ja stateless osadeks vÀlja nÀha praktiliste nÀidete pÔhjal.

Teel serverivabade andmebaaside poole — kuidas ja miks

NĂ€iteks, meil on analĂŒĂŒtiline andmebaas: vĂ€listest andmetest (punane silinder vasakul), ETL-protsess, mis laadib andmed andmebaasi, ja analĂŒĂŒtik, kes saadab andmebaasi SQL-pĂ€ringud. See on klassikaline andmete ladustamise töö skeem.

Selles skeemis tĂ€idetakse ETL tinglikult ĂŒks kord. Edasi tuleb pidevalt maksta serverite eest, kus asub ETL-laaditud andmebaas, et oleks, kuhu pĂ€ringud suunata.

Vaatame alternatiivset lÀhenemist, mis on rakendatud AWS Athena Serverless andmebaasis. Siin pole pidevalt eraldatud riistvara, kus laaditud andmed asuvad. Selle asemel:

  • Kasutaja saadab SQL-pĂ€ringu Athendale. Athena optimeerija analĂŒĂŒsib SQL-pĂ€ringut ja otsib andmehoidlast (Metadata) spetsiifilisi andmeid, mis on vajalikud pĂ€ringu tĂ€itmiseks.
  • Optimeerija, tuginedes kogutud andmetele, tĂ”mbab vajalikud andmed vĂ€listest allikatest ajutisse andmehoidlasse (ajutisse andmebaasi).
  • Ajutises andmehoidlas tĂ€idetakse kasutaja SQL-pĂ€ring, tulemused tagastatakse kasutajale.
  • Ajutine andmehoidla puhastatakse, ressursid vabastatakse.

Selles arhitektuuris maksame ainult pĂ€ringu tĂ€itmise protsessi eest. Pole pĂ€ringuid — pole kulusid.

Teel serverivabade andmebaaside poole — kuidas ja miks

See on toimiv lÀhenemine, ja seda rakendatakse mitte ainult Athena Serverless'is, vaid ka Redshift Spectrumis (AWS-is).

Athena nĂ€itel on nĂ€ha, et Serverless andmebaas toimib tegelike pĂ€ringute pĂ”hjal, millega kĂ€sitletakse kĂŒmneid ja sadu terabaiti andmeid. Saja terabaiti jaoks on vajalik sadu servereid, kuid me ei pea nende eest maksma — maksame pĂ€ringute eest. Iga pĂ€ringu kiirus on (vĂ€ga) madal vĂ”rreldes spetsialiseeritud analĂŒĂŒtiliste andmebaasidega nagu Vertica, kuid me ei maksa seisakute eest.

Selline andmebaas on rakendatav harvade analĂŒĂŒtiliste ad-hoc pĂ€ringute jaoks. NĂ€iteks siis, kui otsustame spontaanselt kontrollida hĂŒpoteesi hiiglaslikus andmemahtudes. Neid juhtumeid jaoks sobib Athena ideaalselt. Regulaarsete pĂ€ringute puhul osutub selline sĂŒsteem kalliks. Sel juhul salvestage andmed mĂ”nes spetsialiseeritud lahenduses.

Serverless OLTP lahenduste jaoks

Eelnevas nĂ€ites vaadeldi OLAP-ĂŒlesandeid (analĂŒĂŒtilised). NĂŒĂŒd vaatame OLTP-ĂŒlesandeid.

Kujundame skaleeritav PostgreSQL vĂ”i MySQL. Loome tavalise hallatava instantsi PostgreSQL vĂ”i MySQL minimaalsete ressurssidega. Kui instantsile tuleb rohkem koormust, ĂŒhendame tĂ€iendavaid koopiaid, kuhu jaotame osa lugemisekoormusest. Kui pĂ€ringut ja koormust pole — lĂŒlitame koopiad vĂ€lja. Esimene instants on peamine ja ĂŒlejÀÀnud on koopiad.

See idee on ellu viidud andmebaasis nimega Aurora Serverless AWS. Princips on lihtne: vĂ€liste rakenduste pĂ€ringud vĂ”tab vastu proxy fleet. NĂ€ha koormuse kasvu, eraldatakse arvutusressursid eelnevalt soojendatud minimaalsetest instantsidest — ĂŒhendamine toimub maksimaalselt kiiresti. Instantside vĂ€ljalĂŒlitamine toimub samuti.

Aurora-s on mĂ”isted Aurora Capacity Unit, ACU. See on (tinglikult) instants (server). Iga konkreetne ACU vĂ”ib olla peamine vĂ”i koopia. Igal Capacity Unit'il on oma operatiivmĂ€lu, protsessor ja minimaalne ketas. Vastavalt on ĂŒks peamine ja ĂŒlejÀÀnud ainult lugemiseks koopiad.

Nende töötavate Aurora Capacity Unit'ide arv on seadistatav parameeter. Minimaalne arv vĂ”ib olla ĂŒks vĂ”i null (sel juhul andmebaas ei tööta, kui pĂ€ringuid ei ole).

Teel serverivabade andmebaaside poole — kuidas ja miks

Kui andmebaas saab pĂ€ringute, tĂ”stab proxy fleet Aurora Capacity Units, suurendades sĂŒsteemi tootmisressursse. VĂ”ime ressursse suurendada ja vĂ€hendada vĂ”imaldab sĂŒsteemil "jongleerida" ressurssidega: automaatselt vĂ€lja lĂŒlitada ĂŒksikud ACU (asendades need uutega) ja rakendada vĂ€lja lĂŒlitatud ressurssidele kĂ”ik uuendused.

Aurora Serverless andmebaas suudab skaleerida lugemisekoormust. Kuid dokumentatsioonis ei ole sellest otseselt öeldud. VÔib tekkida tunne, et nad saavad tÔsta multi-masteri. Imesid pole siin aga.

See and on infrusturi, et viia ei oleneb, kui ta ei ole lĂŒganud sĂŒsteemide. NĂ€iteks, MVP vĂ”i visiitkaardilehtede loomise puhul ei ootame tavaliselt stabiilset koormust. Seega, kui juurdepÀÀsu ei ole, ei maksa me instantside eest. Kui ootamatult tekib koormus, nĂ€iteks pĂ€rast konverentsi vĂ”i reklaamikampaaniat, plahvatavad ligipÀÀsu ja koormus tĂ”useb kiiresti, Aurora Serverless vĂ”tab automaatselt selle koormuse ja kiirelt ĂŒhendab lisavĂ€hendused (ACU). JĂ€rgmine konverents lĂ€heb, kĂ”ik unustavad prototĂŒĂŒbi, serverid (ACU) kustutatakse ja kulud langevad nulli — mugav.

See lahendus ei sobi stabiilse kĂ”rge koormuse korral, kuna see ei oska skaleerida kirjutamiskoormust. KĂ”ik need ressursid ĂŒhendavad ja lahti ĂŒhendavad toimuvad nii-öelda 'scale point'i' hetkel — ajal, mil andmebaas ei ole tehingu all, ajutised tabelid ei hoia. NĂ€iteks, nĂ€dalas vĂ”ib scale point mitte toimuda ja andmebaas töötab ĂŒksi ressursidega ning ei saa ei laieneda, ega vĂ€heneda.

Mingeid imesid ei ole — see on tavaline PostgreSQL. Kuid masinate lisamise ja lahtiĂŒhendamise protsess on osaliselt automatiseeritud.

Serverless by design

Aurora Serverless on vana andmebaas, ĂŒmber kirjutatud pilve jaoks, et kasutada eraldi Serverless'i eeliseid. NĂŒĂŒd rÀÀgin andmebaasist, mis on algselt kirjutatud pilve jaoks, serverless lĂ€henemise alla — Serverless-by-design. Seda arendati kohe ilma eelduseta, et see töötab fĂŒĂŒsilistel serveritel.

See andmebaas on nimega Snowflake. Sellel on kolm peamist plokki.

Teel serverivabade andmebaaside poole — kuidas ja miks

Esimene — see on metaandmete plokk. See on kiire in-memory teenus, mis lahendab turvakahtlused, metaandmed, tehingud, pĂ€ringute optimeerimise (vasakul joonisel).

Teine plokk — see on hulk virtuaalseid arvutusklastreid arvutuste jaoks (joonisel — siniste ringide kogum).

Kolmas plokk — andmete salvestamise sĂŒsteem, mis pĂ”hineb S3-l. S3 on mÔÔtmeteta objektide salvestus AWS-is, just nagu mÔÔtmeteta Dropbox ettevĂ”tetele.

Vaadake, kuidas Snowflake töötab kĂŒlma kĂ€ivitamise eeldustes. See tĂ€hendab, et andmebaas on olemas, andmed on laaditud, kuid töötavaid pĂ€ringuid pole. Seega, kui andmebaasi ei tule pĂ€ringuid, siis on meil ĂŒles tĂ”stetud kiire in-memory Metaandmete teenus (esimene plokk). Ja meil on S3 salvestus, kus on andmed tabelite kohta, jagatud nn mikropartiidesse. Lihtsuse huvides: kui tabelis on tehingud, siis on mikropartiid tehingute pĂ€evad. Iga pĂ€ev on eraldi mikroparti, eraldi fail. Ja kui andmebaas töötab sellises reĆŸiimis, maksate ainult andmete kasutatud koha eest. Lisaks on koha maksumus vĂ€ga madal (eriti arvestades olulist tihendamist). Metaandmete teenus töötab samuti pidevalt, kuid pĂ€ringute optimeerimise jaoks ei ole palju ressursse vajalik, seega vĂ”ib teenust pidada tinglikult tasuta.

NĂŒĂŒd kujutame ette, et meie andmebaasi on tulnud kasutaja ja esitanud SQL-pĂ€ringu. SQL-pĂ€ring saadetakse kohe töötlemiseks Metaandmete teenusele. Seega, pĂ€rast pĂ€ringu saamist, analĂŒĂŒsib see teenus pĂ€ringut, saadaval olevaid andmeid, kasutaja Ă”igusi ja kui kĂ”ik on hĂ€sti, koostab töötlemise plaani.

SeejĂ€rel kĂ€ivitab teenus arvutusklastri. Arvutusklaster on serverite klaster, mis teostab arvutusi. See tĂ€hendab, et klaster vĂ”ib sisaldada 1 serverit, 2 serverit, 4, 8, 16, 32 — nii palju kui soovite. Te esitate pĂ€ringu ja selle jaoks algab klastrite kĂ€ivitamine sekundite jooksul.

Teel serverivabade andmebaaside poole — kuidas ja miks

Edasi, pĂ€rast seda, kui klaster on kĂ€ivitatud, hakkavad S3-st klastrisse kopeeruma mikropartitsioonid, mis on vajalikud just teie pĂ€ringu töötlemiseks. Eeldame, et SQL-pĂ€ringu tĂ€itmiseks on vaja kahte partitsiooni ĂŒhest tabelist ja ĂŒhte teisest. Niisiis kopeeritakse klastrisse ainult kolm vajalikku partitsiooni, mitte kĂ”ik tabelid tĂ€ielikult. Just seetĂ”ttu, et kĂ”ik asub samas andmekeskuses ja on ĂŒhendatud vĂ€ga kiirete kanalitega, toimub kogu edastamisprotsess ÀÀrmiselt kiiresti: sekunditega, vĂ€ga harva — minutitega, kui jutt ei kĂ€i mingi vĂ€ga keerulise pĂ€ringu kohta. Vastavalt sellele kopeeritakse mikropartitsioonid arvutusklastrisse ja pĂ€rast lĂ”petamist tĂ€idetakse SQL-pĂ€ring just sellel arvutusklastril. Selle pĂ€ringu tulemuseks vĂ”ib olla ĂŒks rida, mitu rida vĂ”i tabel — need saadetakse vĂ€lja kasutajale, et ta saaks need alla laadida, oma BI-tööriistas nĂ€idata vĂ”i muul viisil kasutada.

Iga SQL-pĂ€ring mitte ainult ei loe agrageeritud andmeid varasemalt laaditud andmetest, vaid vĂ”ib ka laadida/luua uusi andmeid andmebaasis. See tĂ€hendab, et see vĂ”ib olla pĂ€ring, mis nĂ€iteks sisestab teise tabelisse uusi kirjeid, mis toob kaasa uue partitsiooni tekkimise arvutusklassis, mis omakorda salvestatakse automaatselt ĂŒhte S3 salvestusse.

Ülaltoodud stsenaarium, alates kasutaja saabumisest kuni klastrite tĂ”stmiseni, andmete laadimine, pĂ€ringute tĂ€itmine ja tulemuste saamine, arvestatakse vĂ€lja tĂ”stetud virtuaalse arvutusklastri, virtuaalse ladustamise, kasutamise minutitasu alusel. Tasu varieerub sĂ”ltuvalt AWS tsoonist ja klastrisuurusest, kuid keskmiselt on see paar dollarit tunnis. Neli masinat sisaldav klaster maksab kaks korda rohkem kui kaks masinat, kaheksa masinat maksab veel kaks korda rohkem. Saadaval on variandid 16, 32 masinaga, sĂ”ltuvalt pĂ€ringute keerukusest. Kuid te maksate ainult selle eest, kui klaster reaalselt töötab, kuna pĂ€ringute puudumisel kui te nagu eemaldatud kĂ€ed, ja pĂ€rast 5-10-minutilist ootamist (kohandatav parameeter) lĂŒlitub see iseenesest vĂ€lja, vabastab ressursid ja muutub tasuta.

On tĂ€iesti reaalne stsenaarium, kus esitades pĂ€ringu kerkib klaster ĂŒles, nii öelda, minuti jooksul, veel minut ta arvutab, seejĂ€rel viis minutit vĂ€lja lĂŒlitamiseks, ning lĂ”puks maksate te selle klastiku töö eest seitsme minuti alusel, mitte kuude ja aastate kaupa.

Esimene stsenaarium kirjeldas Snowflake'i kasutamist ĂŒhemĂ”tmelises variandis. NĂŒĂŒd kujutame ette, et kasutajaid on palju, mis on juba lĂ€hemal reaalsetele stsenaariumidele.

Oletame, et meil on palju analĂŒĂŒtikuid ja Tableau aruandeid, mis pidevalt pommitavad meie andmebaasi suure hulga mitte liiga keeruliste analĂŒĂŒtiliste SQL-pĂ€ringutega.

Peale selle oletame, et meil on leidlikud andateadlased, kes proovivad andmetega hirmsaid asju teha, kĂ€sitledes kĂŒmneid terabaite, analĂŒĂŒsides miljardeid ja triljoneid andmereale.

Ülaltoodud kahe koormustĂŒĂŒbi jaoks vĂ”imaldab Snowflake tĂ”sta mitmeid sĂ”ltumatuid arvutusklastreid erineva vĂ”imsusega. Veel enam, need arvutusklastrid töötavad iseseisvalt, kuid jagavad ĂŒhist kooskĂ”lastatud teavet.

Paljude kergete pĂ€ringute jaoks saab tĂ”sta 2-3 vĂ€ikest klastrit, mis on suuruselt, öeldes tinglikult, 2 masinat igaĂŒhes. See kĂ€itumine on rakendatav ka automaatsete seadistuste abil. St ĂŒtlete: „Snowflake, tĂ”sta vĂ€ike klaster. Kui koormus sellel kasvab ĂŒle teatud parameetri, tĂ”sta sarnane teine, kolmas. Kui koormus hakkab langema—lĂŒlita liigsed vĂ€lja.” Selleks, et sĂ”ltumata sellest, kui palju analĂŒĂŒtikuid tuleb ja aruandeid vaatab, jaguks kĂ”igile ressursse.

Sel juhul, kui analĂŒĂŒtikud magavad ja keegi aruandeid ei vaata — klastrid vĂ”ivad tĂ€ielikult vĂ€lja lĂŒlituda, ja te lĂ”petate nende eest maksmise.

Samas, raskete pĂ€ringute (andateadlastelt) jaoks vĂ”ite tĂ”sta ĂŒhe vĂ€ga suure klastriga, nĂ€iteks 32 masinat. Seda klastrit hakatakse samuti arvestama ainult nende minutite ja tundide eest, mil seal töötab teie hiiglaslik pĂ€ring.

Ülaltoodud vĂ”imalus vĂ”imaldab jagada klastreid mitte ainult kahe, vaid ka rohkemate koormustĂŒĂŒpide vahel (ETL, monitooring, aruannete materialiseerimine,
).

Teeme kokkuvĂ”tte Snowflake'ist. Andmebaas ĂŒhendab kauni idee ja töötava rakenduse. ManyChat'is kasutame Snowflake'i kĂ”igi olemasolevate andmete analĂŒĂŒsiks. Meil ei ole klastreid kolm, nagu nĂ€ites, vaid 5 kuni 9, erineva suurusega. Meil on tinglikult 16-masinilised, 2-masinilised ning supervĂ€ikesed 1-masinilised teatud ĂŒlesannete jaoks. Nad jaotavad koormust tĂ”husalt ja aitavad meil palju kokku hoida.

Andmebaas suudab edukalt skaleerida nii lugemise kui kirjutamise koormust. See on tohutu erinevus ja suur lĂ€bimurre vĂ”rreldes nĂ€iteks „Aurora’ga”, mis toetas vaid lugemise koormust. Snowflake vĂ”imaldab nende arvutuste klastrite abil skaleerida ka kirjutamise koormust. Nagu mainisin, kasutame ManyChat'is mitut klastrit, kus vĂ€ikesed ja supervĂ€ikesed klastrid on peamiselt kasutusel ETL-ks, andmete laadimiseks. AnalĂŒĂŒtikud töötavad keskmistel klastritel, mis ei puutu ETL-koormusse, seega töötavad nad vĂ€ga kiiresti.

Seega sobib andmebaas hĂ€sti OLAP-ĂŒlesannete jaoks. Kahjuks ei ole see veel rakendatav OLTP-koormuste jaoks. Esiteks on see andmebaas veergude pĂ”hine, koos kĂ”ikide sellest tulenevate tagajĂ€rgedega. Teiseks, ise lĂ€henemine, kus iga pĂ€ringu korral tĂ”state vastavalt vajadusele arvutusklastri ja tĂ€idate selle andmetega, on kahjuks OLTP-koormuste jaoks veel liiga aeglane. Sekundite ootamine OLAP-ĂŒlesannete jaoks on normaalne, kuid OLTP-ĂŒlesannete puhul on see vastuvĂ”etamatu; parem oleks 100 ms, veel parem — 10 ms.

KokkuvÔte

Serverless andmebaas on vĂ”imalik tĂ€nu andmebaasi jagamisele staatless ja stateful osadeks. Olete kindlasti mĂ€rganud, et kĂ”igis toodud nĂ€idetes on stateful osa – tinglikult öeldes, mikropartitsioonide salvestamine S3-s, samas kui stateless on optimeerija, tegevus metaandmetega, turvalisuse kĂŒsimuste töötlemine, mida saab tĂ”sta sĂ”ltumatute kergete stateless teenustena.

SQL-pĂ€ringute tĂ€itmist saab samuti vĂ€lja vĂ”tta teenustena, millel on kerge olek, mis vĂ”ivad ilmuda serverless reĆŸiimis, nagu Snowflake'i arvutuskogud, alla laadida ainult vajalikud andmed, teostada pĂ€ring ja "surnud".

Serverless andmete baasid tootmisvĂ”imsusega on juba kasutamiseks saadaval ja need töötavad. Need serverless andmebaasid on juba valmis toime tulema OLAP-ĂŒlesannetega. Kahjuks kasutatakse neid OLTP-ĂŒlesannete puhul... teatud eripĂ€radega, kuna on piiranguid. Ühelt poolt on see miinus. Teiselt poolt on see vĂ”imalus. VĂ”ib-olla leiab mĂ”ni lugeja viisi, kuidas OLTP-andmebaasi tĂ€ielikult serverless'iks teha, ilma Aurora piiranguteta.

Loodan, et see oli huvitav. Serverless'i tulevik on tulemas 🙂

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