Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

V jĂ€rjekordne avatud Ă”ppetund 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 Valeriy Bezrukov, 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.

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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:

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

Meie aeg

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

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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:

  1. Palju kliente on teel oma rakenduste pilve migreerimise poole.
  2. Uued tehnoloogiad ilmuvad esmalt pilve ning pole kindel, et need kunagi ĂŒleminekut mittepilvisele infrastruktuurile teevad.
  3. 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:

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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:

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

Tuleb mÀrkida, et see valik ei ole alati arusaadav, seetÔttu juhinduvad rakenduse arendajad sageli intuitsioonist.

Kokku:

  1. 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.
  2. 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!“

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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).

Kuidas ellu jÀÀda SQL-andmebaasil 21. sajandil: pilved, Kubernetes ja PostgreSQL multimaster

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:

  1. Nagu mainitud, arendati rakendust Django abil, milles on mudel SQL-andmebaasist pĂŒsivate andmete esitamiseks Pythonis (Django ORM).
  2. 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:

  1. CockroachDB — tĂ”eline, aga veidi hirmutav;
  2. MySQL Galera — ka ĂŒsna hea, kasutatakse laialdaselt, aga MySQL;
  3. Pgpool — liiga palju ĂŒleliigseid entiteete, integreerub halvemini pilve ja K8s-iga;
  4. 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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster