Tere, Habr.org kogukond. TĂ€na alustavad Ă”ppetunnid esimese rĂŒhma kursusel . Seoses sellega tahame rÀÀkida, kuidas kĂ€is avatud veebiseminar selle kursuse kohta.

V rÀÀkisime, milliste vĂ€ljakutsetega SQL-andmebaasid silmitsi seisavad pilvede ja Kubernetesâi ajastul. Samuti kĂ€sitlesime, kuidas SQL-andmebaasid kohanduvad ja muutuvad nende vĂ€ljakutsete mĂ”jul.
Veebinari viibis , Google Cloud Practice Delivery Manager EPAM Systemsâis.
Kui puud olid vĂ€ikesedâŠ
Alustuseks tuletame meelde, kuidas toimus andmebaasihalduse valik eelmise sajandi lÔpus. See ei tohiks olla raske, sest andmebaasi valik tol ajal algas ja lÔppes Oracle.

90ndate lÔpus ja 2000. aastate alguses polnud valikut, kui rÀÀkida tööstuslikest skaleeritavatest andmebaasidest. Jah, eksisteerisid IBM DB2, Sybase ja veel mÔned andmebaasid, mis tekkisid ja kadusid, kuid nad ei olnud Oracle'i taustal kuigi mÀrgatavad. Vastavalt sellele olid siis aegade inseneride oskused rohkem-vÀhem seotud selle ainsa valikuga, mis olemas oli.
Oracle DBA pidi oskama:
- installima Oracle Server'i jaotist;
- konfigureerima Oracle Server'i:
- init.ora;
- listener.ora;
â looma:
- andmebaasi ruume;
- skeeme;
- kasutajaid;
â tegema varundamist ja taastamist;
â teostama jĂ€lgimist;
â tegelema suboptimalsete pĂ€ringutega.
Samal ajal ei olnud Oracle DBA-lt eriti nÔutud:
- oskama valida optimaalse andmebaasi vÔi teisi andmete salvestamise ja töötlemise tehnoloogiaid;
- tagama kÔrge kÀttesaadavuse ja horisontaalse skaleeritavuse (see ei olnud alati DBA mure);
- valdama hĂ€sti valdkonda, infrastruktuuri, rakendusarkitektuuri, opsĂŒsteemi;
- teostama andmete laadimist ja laadimist, andmete migreerimist erinevate andmebaaside vahel.
Ăldiselt, kui rÀÀkida valikust nendel aegadel, meenutab see valikut NĂ”ukogude poes 80ndate lĂ”pus:

Meie aeg
Sellest ajast on muidugi puudel kasvanud, maailm on muutunud ja olukord on kuidagi selline:

Andmebaaside turg on samuti muutunud, mida nÀitab hÀsti Gartneri vÀrske raport:

Siinjuures ei saa mainimata jÀtta, et oma niƥi on leidnud pilved, mille populaarsus kasvab. Kui lugeda sama Gartneri raportit, nÀeme jÀrgmisi jÀreldusi:
- Palju kliente on teel oma rakenduste pilve migreerimise poole.
- Uued tehnoloogiad ilmuvad esmalt pilve ning pole kindel, et need kunagi ĂŒleminekut mittepilvisele infrastruktuurile teevad.
- Pay-as-you-go hinnakujundusmudel on muutunud pÔhimÔtteliseks tavaks. KÔik soovivad maksta ainult selle eest, mida nad kasutavad, ja see pole enam ainult trend, vaid tÔsiasi.
Mis nĂŒĂŒd?
TĂ€na oleme kĂ”ik pilves. Meie kĂŒsimused puudutavad valikuid, ja need valikud on tohutud, isegi kui vaatleme ainult On-premises andmebaasitehnoloogiate valikut. Samuti on meil olemas hallatud teenused ja SaaS. Seega muutub valik igal aastal ainult keerulisemaks.
Valikute kÔrval tegutsevad ka piiravad tegurid:
- hind. Paljud tehnoloogiad on endiselt tasulised;
- oskused. Kui rÀÀgime avatud lĂ€htekoodiga tarkvarast, tekib oskuste kĂŒsimus, kuna tasuta tarkvara nĂ”uab selle kasutajalt ja haldajalt piisavat kompetentsi;
- funktsionaalsus. KĂ”ik teenused, mis on saadaval pilves ja on loodud nĂ€iteks Postgresi alusel, ei oma tingimata samu funktsioone kui Postgres On-premises. See on oluline tegur, mida tuleb teada ja mĂ”ista. Veelgi enam, see tegur muutub tĂ€htsamaks kui teadmised mĂ”nest varjatud vĂ”imalusest teatud andmebaasihalduse sĂŒsteemis.
Mida oodatakse DA/DE-lt:
- head arusaamist teema valdkonnast ja rakendusarhitektuurist;
- oskus Ă”igesti valida sobiv andmebaasitehnoloogia arvestades seatud ĂŒlesannet;
- oskus valida optimaalse rakendamise meetod valitud tehnoloogia jaoks olemasolevate piirangute kontekstis;
- oskus teostada andmete ĂŒleviimist ja migreerimist;
- oskus rakendada ja hallata valitud lahendusi.
AlljÀrgnev nÀide GCP-lt nÀitab, kuidas tehnoloogia valik andmete töötlemiseks sÔltub nende struktuurist:

Pange tÀhele, et skeemist puudub PostgreSQL, sest see peitub terminoloogias Cloud SQL. Ja kui me satume Cloud SQL-i, peame jÀlle valiku tegema:

Tuleb mÀrkida, et see valik ei ole alati arusaadav, seetÔttu juhinduvad rakenduse arendajad sageli intuitsioonist.
Kokku:
- Mida kaugemale, seda aktuaalsemaks muutub kĂŒsimus valikust. Ja isegi kui vaadata ainult GCP-d, siis managed teenused ja SaaS, siis mĂ”ni mainimine RDBMS-ist ilmub alles 4. etapis (ja seal on kĂ”rval Spanner). Pluss, PostgreSQL-i valik ilmub ĂŒldse alles 5. etapis, ja seal on veel MySQL ja SQL Server, seega kĂ”ike on palju, aga valida tuleb.
- Ei saa unustada ka piiranguid kiusatuste taustal. Peamiselt tahavad kĂ”ik Spannerit, aga see on kallis. LĂ”puks on tĂŒĂŒpiline pĂ€ring umbes selline: âPalun tehke meile Spanner, aga Cloud SQL-i hinnaga, te ju olete professionaalid!â

Aga mida siis teha?
Ilma lĂ”pliku tĂ”e pretensioonita, ĂŒtleme jĂ€rgmist:
Tuleb muutma lÀhenemist koolitusele:
- ei ole mÔtet Ôpetada, nagu varem DBA-sid Ôpetati;
- ĂŒhe toote teadmised ei ole enam piisavad;
- ja tundma kĂŒmneid ĂŒhel tasemel ei ole vĂ”imalik.
Tuleb teada mitte ainult ja mitte ainult toodet, vaid:
- kasutuse juhtumit;
- erinevaid rakenduse meetodeid;
- iga meetodi eeliseid ja puudusi;
- sarnased ja alternatiivsed tooted, et teha teadlik ja optimaalne valik, mitte alati tuttava toote kasuks.
Lisaks on oluline osata andmeid migreerida ja mÔista ETL-iga integreerimise pÔhialuseid.
Tegeliku juhtumi nÀide
Hiljuti tuli mul luua mobiilirakenduse taustsĂŒsteem. Projekti alguseks oli taustsĂŒsteem juba vĂ€lja töötatud ja kasutuselevĂ”tmiseks valmis, ning arendajate meeskond kulutas sellele projektile umbes kaks aastat. SeetĂ”ttu seati eesmĂ€rgiks:
- luua CI/CD;
- teha arhitektuuri ĂŒlevaatus;
- kÔik see kÀivitada.
Rakendus ise oli mikroteenuste arhitektuuri pĂ”hjal ja kood Python/Django keeles kirjutatud nullist ning koheselt GCP-sse. Sihtgrupi osas eeldati, et sihitud on kaks piirkonda â USA ja Euroopa, ning liiklus jaotati Global Load Balancer'i kaudu. KĂ”ik töökoormused ja arvutuslik koormus töötasid Google Kubernetes Engine'is.
Andmete osas olid kolm struktuuri:
- Cloud Storage;
- Datastore;
- Cloud SQL (PostgreSQL).

VĂ”ib esitada kĂŒsimus, miks valiti Cloud SQL? TĂ”tt-öelda tekitab selline kĂŒsimus viimastel aastatel veidi ebamugavust â tundub, et inimesed on hakanud relatsiooniliste andmebaaside suhtes hĂ€benema, kuid sellegipoolest kasutavad nad neid aktiivselt ;-).
Mis puutub meie juhtumisse, siis valiti Cloud SQL jÀrgmiste pÔhjuste tÔttu:
- Nagu mainitud, arendati rakendust Django abil, milles on mudel SQL-andmebaasist pĂŒsivate andmete esitamiseks Pythonis (Django ORM).
- Raamistik toetas piisavalt lĂ”plikku nimekirja andmebaasi haldamise sĂŒsteemidest:
- PostgreSQL;
- MariaDB;
- MySQL;
- Oracle;
- SQLite.
Seega valiti PostgreSQL sellest loendist pigem intuitsioonist (ega ju Oracle'i valima).
Mida oli puudu:
- rakendus oli juurutatud vaid kahes piirkonnas, kuid plaanis oli kolmas (Aasia);
- Andmebaas asus PÔhja-Ameerika piirkonnas (Iowa);
- klient oli mures vÔimalike ligipÀÀsu viivituste kohta Euroopast ja Aasiast ning teenusekatkestuste riski andmebaasi seiskamise korral.
Kuigi Django suudab samal ajal töötada mitme andmebaasiga ning jagada neid lugemise ja kirjutamise vahel, ei olnud rakenduses andmete hulk kuigi suur (ĂŒle 90% on lugemine). Ăldiselt, kui oleks vĂ”imalik teha read-replika peamisest andmebaasist Euroopas ja Aasias,, oleks see kompromisslahendus. Mis siin siis nii keeruline on?
Keerus seisnes selles, et klient ei soovinud loobuda hallatavate teenuste ja Cloud SQL-i kasutamisest. Praegusel hetkel on Cloud SQL-i vĂ”imalused piiratud. Cloud SQL toetab kĂ”rget saadavust (HA) ja lugemisreplikat (RR), kuid sama RR-i toetatakse ainult ĂŒhes regioonis. Ameerika regioonis andmebaasi luues ei saa Cloud SQL-i abil teha lugemisreplikat Euroopa regioonis, kuigi PostgreSQL ise seda ei takista. Suhtlemine Google'i töötajatega ei viisnud kuhugi ja lĂ”ppes lubadustega stiilis âteame probleemi ja töötame selle kallal, kunagi kĂŒsimus lahendatakse."
Kui loetleda Cloud SQL-i vÔimalusi punktide kaupa, siis need nÀeksid vÀlja umbes nii:
1. KÔrge saadavus (HA):
- ĂŒhe piirkonna raames;
- diskireplikatsiooni abil;
- PostgreSQL mehhanisme ei kasutata;
- vĂ”ib olla automaatne ja kĂ€sitsi haldus â failover/failback;
- andmebaas on ĂŒlemineku ajal mitu minutit maas.
2. Loe Replica (RR):
- ĂŒhe piirkonna raames;
- kuum standby;
- PostgreSQL voogedastuse replikatsioon.
Lisaks, nagu tavaks, seisab tehnoloogia valimisel silmitsi igasuguste piirangutega.:
- tellija ei soovinud luua uusi objekte ja kasutada IaaS-i, vÀlja arvatud GKE kaudu;
- tellija ei tahaks kasutusele vÔtta iseteenindust PostgreSQL/MySQL jaoks;
- ja ĂŒldiselt sobiks Google Spanner hĂ€sti, kui mitte tema hind, tĂ”si, Django ORM ei saa sellega töötada, aga muidu on see hea asi.
Arvestades olukorda, esitas tellija jĂ€rgneva kĂŒsimuse: âKas saate midagi sarnast teha, et see oleks nagu Google Spanner, aga töötaks ka Django ORM-iga?â
Lahenduse variant nr 0
Esimene mÔte, mis pÀhe tuli:
- jÀÀda CloudSQL-i piiresse;
- ehitatud replikatsiooni piirkondade vahel ei tule mingisugusel kujul;
- ĂŒritada lisada replikat olemasolevale Cloud SQL by PostgreSQL-ile;
- kusagil ja kuidagi kÀivitada PostgreSQL-i instants, kuid vÀhemalt masterit mitte puudutada.
Kahjuks selgus, et seda ei saa teha, kuna juurdepÀÀs hostile puudub (see on ĂŒldse teises projektis) â pg_hba jne, ja veel puudub juurdepÀÀs superuser'ina.
Lahenduse variant nr 1
PÀrast jÀrjekordseid mÔtteid ja varasemaid asjaolusid on mÔtlemine pisut muutunud:
- pĂŒĂŒame endiselt jÀÀda CloudSQL piiresse, kuid liigume ĂŒle MySQL-le, kuna Cloud SQL by MySQL-l on vĂ€lismaja, mis:
â on proxy vĂ€lisele MySQL-le;
â nĂ€eb vĂ€lja nagu MySQL instants;
â on loodud andmete migreerimiseks teistest pilvedest vĂ”i kohalike serverite pealt.
Kuna MySQL replikatsiooni seadistamine ei nĂ”ua juurdepÀÀsu hostile, töötas see pĂ”himĂ”tteliselt, kuid vĂ€ga ebastabiilselt ja ebamugavalt. Ja kui edasi liikuda, siis muutus see tĂ”eliselt hirmutavaks, kuna kogu struktuur oli vĂ€lja arendatud terraformiga, ja Ă€kki selgus, et vĂ€lismaja ei ole terraformiga toetatud. Jah, Google'il on CLI, kuid millegipĂ€rast töötas ka siin kĂ”ik vahelduva eduga â siis loobub, siis ei loobu. VĂ”ib-olla sellepĂ€rast, et CLI on mĂ”eldud andmete migreerimiseks vĂ€ljastpoolt, mitte replikatsioonideks.
Sellega sai selgeks, et Cloud SQL ei sobi ĂŒldse. Nagu öeldakse, oleme teinud kĂ”ik, mis suudame.
Lahenduse variant nr 2
Kuna Cloud SQL piires ei Ă”nnestunud jÀÀda, pĂŒĂŒdsime sĂ”nastada nĂ”udmised kompromisslahendusele. NĂ”udmised osutusid jĂ€rgmisteks:
- töö Kuberneteses, maksimaalne ressursside ja Kubernetes (DCS, âŠ) ning GCP (LB, âŠ) vĂ”imaluste kasutamine;
- ĂŒlekaalu puudumine mitmete tarbetute asjade osas pilves nagu HA proxy;
- vĂ”imalus kĂ€ivitada peamises piirkonnas HA PostgreSQL vĂ”i MySQL; teistes piirkondades â HA pĂ”hipiirkonna RR pluss selle koopia (usaldusvÀÀrsuse tagamiseks);
- multi master (kui sellega ĂŒhendust vĂ”tta ei olnud soovitav, aga see ei olnud vĂ€ga pĂ”himĂ”tteline)
.
Nende nÔuete tulemusel on lÔpuks silmadele ilmunud sobivadandmebaasi ja raamistiku valikud:
- MySQL Galera;
- CockroachDB;
- PostgreSQL tööriistad
:
â pgpool-II;
â Patroni.
MySQL Galera
MySQL Galera tehnoloogia on vÀlja töötatud ettevÔttes Codership ja see on plugin InnoDB jaoks. Omadused:
- multi master;
- sĂŒnkrone replikatsioon;
- lugemine igast sÔlmest;
- kirjutamine igasse sÔlme;
- sisseehitatud HA mehhanism;
- Bitnami poolt on saadaval Helm chart.
CockroachDB
Kirjelduse jĂ€rgi on see asi tĂ€iesti fantastiline ja tegu on open source projektiga, mis on kirjutatud Go keeles. Peamine osaleja on Cockroach Labs (loodud Google'ist pĂ€rit inimeste poolt). See relatsiooniline andmebaasi haldur on algselt loodud olema jaotatud (horisontaalse skaleeritavusega âkarbist vĂ€ljaâ) ja vigadekindel. Selle autorid on seadnud sihiks âĂŒhendada SQL-i funktsionaalsuse rikkus horisontaalse kĂ€ttesaadavusega, mis on iseloomulik NoSQL lahendusteleâ.
Mugav boonus on PostgreSQL-i ĂŒhendusprotokolli tugi.
Pgpool
See on PostgreSQL-i peal olev lisand, mis tegelikult on uus entiteet, mis vĂ”tab enda alla kĂ”ik ĂŒhendused ja töötleb need. Sellel on oma koormuse tasakaalustaja ja parsi, seda litsentseeritakse BSD litsentsi alusel. Pakub laia valikut vĂ”imalusi, kuid tundub veidi hirmutav, sest uue entiteedi olemasolu vĂ”iks olla mĂ”ningate lisaseikluste allikaks.
Patroni
See oli viimane asi, millele ma pilku heitsin, ja osutus, et see ei olnud asjata. Patroni on avatud lĂ€htekoodiga utiliit, mis pĂ”himĂ”tteliselt esindab Pythonil pĂ”hinevat deemonit, mis vĂ”imaldab automaatselt hallata PostgreSQL klastreid erinevate replikatsioonitĂŒĂŒpide ja automaatsete rollide ĂŒleminekuga. See oli vĂ€ga huvitav leid, kuna see integreerub hĂ€sti Kubernetesega ja ei too kaasa uusi entiteete.
Mida lÔpuks valisime
Valik ei tulnud kergelt:
- CockroachDB â tĂ”eline, aga veidi hirmutav;
- MySQL Galera â ka ĂŒsna hea, kasutatakse laialdaselt, aga MySQL;
- Pgpool â liiga palju ĂŒleliigseid entiteete, integreerub halvemini pilve ja K8s-iga;
- Patroni â suurepĂ€rane integreerimine K8s-iga, ei ole ĂŒleliigseid entiteete, integreerub hĂ€sti GCP LB-ga.
Seega langetati valik Patroni kasuks.
JĂ€reldused
On aeg teha lĂŒhikokkuvĂ”tteid. Jah, IT-infrastruktuuri maailm on mĂ€rkimisvÀÀrselt muutunud ja see on alles algus. Ja kui varem olid pilved lihtsalt teistsugune infrastruktuuri tĂŒĂŒp, siis nĂŒĂŒd on kĂ”ik teisiti. Veelgi enam, pilvede uuendused ilmuvad pidevalt, neid tulevad ja vĂ”ib-olla ilmuvad need ainult pilvedes ning hiljem, alustades idufirmade poolt, viiakse need kohalikele sĂŒsteemidele.
Mis on SQL, SQL jÀÀb ellu. See tÀhendab, et PostgreSQL ja MySQL tuleb teada ning osata nendega töötada, aga veelgi olulisem on osata neid Ôigesti rakendada.
Allikas: habr.com
