Tere, Habr'i kasutajad. TÀna algavad kursuse esimese grupi tunnid . Seoses sellega tahame rÀÀkida teile, kuidas toimus avatud veebinar selle kursuse kohta.

Uues rÀÀgiti sellest, milliste vÀljakutsetega SQL-andmebaasid silmitsi seisavad pilvetehnoloogia ja Kubernetes'iga. Samuti vaatasime, kuidas SQL-andmebaasid kohanduvad ja muteeruvad nendele vÀljakutsetele vastates.
Veebinari viis lÀbi , Google Cloud Practice Delivery Manager EPAM Systems'is.
Kui puud olid vÀikesed ...
Esiteks, meenutame, kuidas toona viimase sajandi lÔpus andmebaaside valik algas. Kuid see ei tohiks olla keeruline, sest andmebaaside valik sel ajal algas ja lÔppes Oracle.

90ndate lĂ”pus ja 2000. alguses ei olnud tegelikult suurt valikut tööstuslike skaleeritavate andmebaaside osas. Jah, oli IBM DB2, Sybase ja veel mĂ”ned andmebaasid, mis tulid ja kadusid, kuid ĂŒldiselt ei olnud nad Oracle'i taustal eriti silmatorkavad. SeetĂ”ttu olid nende aegade inseneride oskused seotud selle ainukese valikuga, mis olemas oli.
Oracle DBA pidi oskama:
- installer Oracle Serverit distribuutsioonist;
- seade Oracle Serverit:
- init.ora;
- listener.ora;
â luua:
- tabeliruumid;
- skeemid;
- kasutajad;
â teostada varukoopiate loomine ja taastamine;
â teostada jĂ€lgimist;
â vĂ”idelda mitteoptimaalsete pĂ€ringutega.
Samal ajal ei nÔutud Oracle DBA-lt eriti:
- osata valida optimaalseid andmebaasisĂŒsteeme vĂ”i muid andmete salvestamise ja töötlemise tehnoloogiaid;
- tagada kĂ”rge kĂ€ttesaadavus ja horisontaalne skaleeritavus (see ei olnud alati DBA kĂŒsimus);
- hÀsti tunda valdkonna, infrastruktuuri, rakenduste arhitektuuri, OS-i;
- teostada andmete laadimist ja vÀljastamist, andmete migreerimist erinevate andmebaaside vahel.
Ăldiselt, kui rÀÀkida selle aja valikust, sarnaneb see valikuga NĂ”ukogude poe lĂ”pus 80ndatel:

Meie aeg
Alates sellest ajast on puud muidugi kasvanud, maailm on muutunud ja nĂŒĂŒd on see kuidagi nii:

Andmebaasiturgu on samuti muutunud, mida tÔendab vÀrske Gartneri raport:

Ja siinkohal ei saa mainimata jÀtta, et oma niƥi on leidnud pilvetehnoloogiad, mille populaarsus kasvab. Kui lugeda sama Gartneri raportit, nÀeme jÀrgmisi jÀreldusi:
- Paljud kliendid on teel rakenduste pilve viimise poole.
- Uued tehnoloogiad ilmuvad kĂ”igepealt pilve ja pole sugugi kindel, et need kunagi ĂŒleminekuks mitte-pilve infrastruktuuri leiavad.
- Maksustamismodel, mis pÔhineb pay-as-you-go pÔhimÔttel, on saanud tavapÀraseks. KÔik soovivad maksta ainult selle eest, mida nad kasutavad, ja see on isegi enam mitte trend, vaid lihtsalt fakti konstateerimine.
Mis nĂŒĂŒd?
TĂ€na oleme kĂ”ik pilves. Ja kĂŒsimused, mis meil tekivad, on valikukĂŒsimused. Need on tohutud, isegi kui rÀÀgime ainult andmebaaside valikust On-premises formaadis. Ja meil on ka hallatud teenused ja SaaS. Seega, valikud keerduvad iga aastaga aina rohkem.
ValikukĂŒsimustega koos toimivad ka piiravad tegurid:
- hind. Paljud tehnoloogiad maksavad endiselt raha;
- oskused. Kui rÀÀgime vabavarast, siis tĂ”statub oskuste kĂŒsimus, kuna tasuta tarkvara nĂ”uab inimestelt, kes seda juurutavad ja kasutavad, piisavat kompetentsust;
- funktsionaalsus. Mitte kÔik teenused, mis on saadaval pilves ja mis on ehitatud nÀiteks PostgreSQL alusel, ei oma samu funktsioone, mis PostgreSQL On-premises. See on oluline tegur, mida tuleb teada ja mÔista. Lisaks muutub see tegur tihti olulisemaks kui teadmised mingitest varjatud vÔimalustest konkreetse andmebaasi kohta.
Mis on DA/DE ootused:
- hea arusaam valdkonnast ja rakendusarhitektuurist;
- oskus valida sobiv andmebaasitehnoloogia arvestades seatud ĂŒlesandeid;
- oskus valida valitud tehnoloogia rakendamise optimaalne meetod olemasolevate piirangute kontekstis;
- oskus andmete ĂŒleviimiseks ja migreerimiseks;
- oskus rakendada ja hallata valitud lahendusi.
AlljÀrgnev nÀide GCP alusel demonstrib, kuidas toimub valiku tegemine sÔltuvalt andmete struktuurist:

Pange tÀhele, et skeemist puudub PostgreSQL, kuna see varjatakse terminoloogia Cloud SQL. Ja kui satume Cloud SQL-i, siis peame jÀlle valima:

Siinkohal tuleb mÀrkida, et see valik ei ole alati arusaadav, seega arendajad juhinduvad sageli intuitsioonist.
KokkuvÔtteks:
- Mida kaugemale, seda aktuaalsemaks muutub valikute kĂŒsimus. Ja isegi kui vaadata ainult GCP-d, siis managed teenuste ja SaaS-i puhul ilmub mingisugune viide RDBMS-ile alles 4. sammul (ja seal on Spanner kĂ”rval). Lisaks, PostgreSQL-i valik ilmub ĂŒldse alles 5. sammul, samas kui kĂ”rval on veel MySQL ja SQL Server, ehk kĂ”ike on palju, aga valida tuleb..
- Ei saa unustada ka piiranguid ahvatluste taustal. Peamiselt soovivad kĂ”ik Spannerit, kuid see on kallis. LĂ”ppkokkuvĂ”ttes nĂ€eb tĂŒĂŒpiline pĂ€ring vĂ€lja umbes nii: «Palun tehke meile Spanner, kuid Cloud SQL-i hinnaga, noh, teie olete professionaalid!»

Aga mida siis teha?
Ilma lĂ”pliku tĂ”e pretensioonita ĂŒtleme jĂ€rgmist:
On vaja muuta lÀhenemist Ôppimisele:
- ei ole mÔtet Ôpetada nagu varem DBA-sid;
- ĂŒhe toote teadmine ei ole enam piisav;
- ja kĂŒmne tasemel ĂŒhe puhul on vĂ”imatu.
On vaja teada mitte ainult toodet, vaid ka:
- kasutuse juhtumit;
- erinevaid rakendusmeetodeid;
- iga meetodi eelised ja puudused;
- sarnased ja alternatiivsed tooted, et teha teadlik ja optimaalne valik ning mitte alati tuttava toote kasuks.
Ja veel tuleb osata andmeid migreerida ja mÔista ETL-i pÔhiprintsiipe.
Reaalne juhtum
Hiljuti tuli teha mobiilirakenduse tagapoolt. Enne töö alustamist oli tagapool juba vĂ€lja töötatud ja valmis rakendamiseks, ning arendajate meeskond oli sellele projektile kulutanud umbes kaks aastat. Sel ajal pandi paika jĂ€rgmised ĂŒlesanded:
- luua CI/CD;
- teha arhitektuuri ĂŒlevaatus;
- kÀivitada kÔik see tootmisse.
Ise rakendus oli mikroteenustel pĂ”hinev, ning Python/Django kood oli vĂ€lja töötatud nullist ja kohe GCP-s. Mis puudutas sihtrĂŒhma, siis eeldati, et piirkondi on kaks â USA ja EL, ning liiklus jaotati ĂŒlemaailmse koormuse tasandaja kaudu. KĂ”ik töökoormused ja arvutuskoormus töötasid Google Kubernetes Engine'is.
Andmete osas oli 3 struktuuri:
- Cloud Storage;
- Datastore;
- Cloud SQL (PostgreSQL).

VĂ”ib tekkida kĂŒsimus, miks valiti Cloud SQL? TĂ”ele au andes tekitab see kĂŒsimus viimastel aastatel mĂ”ningast kohmetust â tundub, et inimesed on hakanud rikkaid andmebaase hĂ€benema, kuid siiski jĂ€tkavad nad nende aktiivset kasutamist ;-).
Mis puutub meie juhtumisse, siis Cloud SQL valiti jÀrgmistel pÔhjustel:
- Nagu mainitud, rakendust arendati Django abil, kus on mudel, mis nĂ€itab pĂŒsivaid andmeid SQL-andmebaasist Python (Django ORM) objektidesse.
- Kogu raamistik toetas ĂŒsna piiratud nimekirja andmebaasihaldussĂŒsteemidest:
- PostgreSQL;
- MariaDB;
- MySQL;
- Oracle;
- SQLite.
Seega valisime PostgreSQL selle nimekirja hulgast peamiselt intuitsiooni pÔhjal (noh, mitte tÔesti Oracle'i valida).
Mida puudus:
- rakendus oli juurutatud vaid kahes piirkonnas ja plaanidesse lisandus kolmas (Aasia);
- Andmebaas asus PÔhja-Ameerika piirkonnas (Iowa);
- tellija poolt oli muresid seoses vĂ”imalike juurdepÀÀsu viivitustega Euroopast ja Aasiast ning teenuse katkestustega andmebaasi talitluse katkestamise korral. Kuigi Django saab töötada mitme andmebaasiga samal ajal ja jagada neid lugemiseks ja kirjutamiseks, ei olnud rakenduses vĂ€ga palju kirjeid (ĂŒle 90% â lugemine). Seega, kui oleks vĂ”imalik teha
read-replika pĂ”hiteabasal Euroopas ja Aasias , oleks see kompromisslahendus. Mis siin siis nii keerulist on?KĂŒsimus seisnes selles, et tellija ei soovinud loobuda hallatud teenuste ja Cloud SQL kasutamisest. Kahjuks on Cloud SQL'i vĂ”imalused praegusel hetkel piiratud. Cloud SQL toetab kĂ”rge kĂ€ttesaadavuse (HA) ja lugemisreplikatsioonide (RR) loomist, kuid sama RR toetatakse vaid ĂŒhes piirkonnas. Luues andmebaasi Ameerika piirkonnas, ei saa Cloud SQL-i vahendeid kasutades teha read-replikat Euroopa piirkonnas, kuigi PostgreSQL ise ei takista seda tegemast. Suhtlemine Google'i töötajatega ei toonud mingeid tulemusi ja lĂ”ppes lubadustega stiilis âme teame probleemist ja töötame selle kallal, ĂŒhel pĂ€eval kĂŒsimus lahendatakseâ.
Kui loetleda Cloud SQL-i vÔimalusi kokkuvÔtlikult, nÀeb see vÀlja umbes nii:
1. KÔrge kÀttesaadavus (HA):
ĂŒhes piirkonnas;
- ketta replikatsiooni kaudu;
- PostgreSQL mehhanisme ei kasutata;
- vĂ”imalik automaatne ja kĂ€sitsi juhtimine â failover / failback;
- andmebaasi vahetamisel ei ole see kÀttesaadav mitmeid minuteid.
- 2. Lugemisreplika (RR):
kuum varukoopia;
- ketta replikatsiooni kaudu;
- PostgreSQL voogedastuse replikatsioon.
- Lisaks on tavapÀraselt tehnoloogia valimisel silmitsi mitmesuguste
piirangutega, tellija ei soovinud luua ĂŒksteise kĂ”rval olevaid teenuseid ega kasutada IaaS-i, vĂ€lja arvatud GKE kaudu;:
- tellija ei soovinud juurutada ise teenindavat PostgreSQL / MySQL-i;
- klient ei soovinud self service PostgreSQL/MySQL-i kasutusele vÔtta;
- ja ja, Google Spanner sobis sobis hÀsti, kui mitte tema hinna pÀrast, kuigi Django ORM ei saa sellega töötada, aga asi on tÔesti hea.
Arvestades olukorda, kĂŒsis tellijalt kĂŒsimus, mis jĂ€i muljeid jĂ€tma: â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 piiresse;
- regionite vahel mingit sisseehitatud replikatsiooni ei tule ĂŒldse;
- proovida ĂŒhendada olemasolev Cloud SQL by PostgreSQL replikatsioon;
- kusagil ja kuidagi kÀivitada PostgreSQL instants, aga vÀhemalt masterit mitte puudutada.
Kahjuks selgus, et seda ei saa teha, kuna puudub juurdepÀÀs hostile (see on ĂŒldse teises projektis) â pg_hba ja nii edasi, ning veel pole juurdepÀÀsu superkasutajana.
Lahenduse variant nr 1
PÀrast jÀrgmisi mÔtisklusi ja arvestades eelnevaid asjaolusid, muutus mÔtteliin veidi:
- me ĂŒritame ikka jÀÀda CloudSQL piiresse, kuid liigume MySQL-i suunas, kuna Cloud SQL by MySQL-l on vĂ€liseid mastereid, mis:
â on proxy vĂ€lisele MySQL-ile;
â nĂ€eb vĂ€lja nagu MySQL instants;
â on mĂ”eldud andmete migreerimiseks teistest pilvedest vĂ”i kohapealsest sĂŒsteemist.
Kuna MySQL replikatsiooni seadistamine ei vaja juurdepÀÀsu hostile, töötab pĂ”himĂ”tteliselt kĂ”ik, aga see oli vĂ€ga ebausaldusvÀÀrne ja ebamugav. Ja kui edasi minna, siis oli see tĂ”eliselt hirmus, kuna me kĂ”ik struktuuri kĂ€ivitasime terraformiga ja Ă€kki selgus, et vĂ€lised masterid ei ole terraformi toetatud. Jah, Google'il on CLI, aga mikski ei töötanud ka seal kĂ”ik usaldusvÀÀrselt â mĂ”ni kord loodi, mĂ”ni kord ei loodud. VĂ”ib-olla seetĂ”ttu, et CLI on mĂ”eldud andmete vĂ€lise migreerimise jaoks, mitte replikatsioonide jaoks.
NĂŒĂŒd on selge, et Cloud SQL ei sobi absoluutselt. Nagu öeldakse, tegime kĂ”ik, mis vĂ”imalik.
Lahenduse variant nr 2
Kuna Cloud SQL piiresse jÀÀmine ei Ă”nnestunud, pĂŒĂŒdsime formulida kompromisslahenduse nĂ”uded. NĂ”uded olid jĂ€rgmised:
- töö Kuberneteses, maksimaalne ressursside ja Kubernetes (DCS, âŠ) ning GCP (LB, âŠ) vĂ”imaluste kasutamine;
- ĂŒkski kasutu kaubik pilve asjadest nagu HA proxy ei ole lubatud;
- vĂ”imalus kĂ€ivitada peamises piirkonnas HA PostgreSQL vĂ”i MySQL; teistes piirkondades â HA pĂ”hijoonest ja selle koopiast (usaldusvÀÀrsuse tagamiseks);
- multi master (oli vaja sellega siduda, kuid see ei olnud nii pÔhimÔtteline)
.
Nende nÔuete tulemusena ilmus lÔpuks silmapiirile psobivad variantid andmebaasidele ja pistikprogrammidele:
- MySQL Galera;
- CockroachDB;
- PostgreSQL tööriistad
:
â pgpool-II;
â Patroni.
MySQL Galera
MySQL Galera tehnoloogia on vÀlja töötatud ettevÔtte Codership poolt ja see on plugin InnoDB jaoks. Omadused:
- mitu masterit;
- sĂŒnkroonne replikatsioon;
- lugemine igast sÔlmest;
- kirjutamine igasse sÔlme;
- sisseehitatud HA mehhanism;
- on olemas Bitnami jaoks Helm chart.
CockroachDB
Kirjelduse kohaselt on see tĂ€iesti fantastiline ja esindab end avatud allika projektina, mis on kirjutatud Go-s. Peamine osaleja on Cockroach Labs (asutasid Google'i endised töötajad). See relatsiooniline andmebaas on algselt loodud olema jaotatud (horisontaalse skaleeritavusega 'karbist vĂ€lja') ja tĂ”rkeotsing. Selle autorid on mÀÀratlenud eesmĂ€rgi 'ĂŒhendada SQL-i funktsionaalsuse rikkus horisontaalse kĂ€ttesaadavusega, mis on NoSQL lahendustele tuttav.'
Meeldiva boonusena â PostgreSQL-i ĂŒhendusprotokolli tugi.
Pgpool
See on PostgreSQL-i kohalduv kiht, tegelikult uus entiteet, mis vĂ”tab enda alla kĂ”ik ĂŒhendused ja töötleb neid. Sellel on oma koormuse tasakaalustaja ja parser, see litsentseeritakse BSD litsentsi alusel. See pakub laialdasi vĂ”imalusi, kuid nĂ€eb vĂ€lja veidi hirmutav, kuna uus entiteet vĂ”iks tekitada mingeid lisaseiklusi.
Patronit
See on viimane, millele ma tĂ€helepanu pöörasin, ja nagu selgus, mitte asjata. Patroni on avatud allika utiliit, mis pĂ”himĂ”tteliselt esindab Pythonis kirjutatud deemonit, mis vĂ”imaldab automaatset PostgreSQL klastrite teenindamist erinevate replikatsioonitĂŒĂŒpide ja automaatse rollide vahetamisega. Asi osutus vĂ€ga huvitavaks, kuna see integreerub hĂ€sti kubernekidega ja ei too endaga kaasa uusi entiteete.
Kuidas me lÔpuks valisime
Valik ei olnud kerge:
- CockroachDB â lahe, aga hirmutav;
- MySQL Galera â ka ĂŒsna hea, palju kasutatakse, kuid MySQL;
- Pgpool â palju liigseid entiteete, halb integreerimine pilve ja K8s-iga;
- Patronit â suurepĂ€rane integreerimine K8s-iga, ei ole liigseid entiteete, integreerub hĂ€sti GCP LB-ga.
Seega langetati otsus Patroni kasuks.
JĂ€reldused
On aeg teha lĂŒhikokkuvĂ”te. Jah, IT-infrastruktuuri maailm on oluliselt muutunud ja see on alles algus. Ja kui varem olid pilved lihtsalt teistsugune infrastruktuuri tĂŒĂŒp, siis nĂŒĂŒd on kĂ”ik teistmoodi. Rohkemgi veel, pilvetooteid kerkib pidevalt esile ning neid vĂ”ib-olla arendavad vaid pilved ja hiljem, algatajate poolt, viiakse need On-premises.
Mis SQL-i kohta on SQL elujÔuline. See tÀhendab, et PostgreSQL-i ja MySQL-i tuleb tunda ja osata nendega töötada, kuid veel olulisem on osata neid Ôigesti rakendada.
Allikas: habr.com
