Hei, hubbers. I dag starter undervisningen i den fÞrste gruppen av kurset . I forbindelse med dette Þnsker vi Ä fortelle dere om hvordan det Äpne webinaret om dette kurset gikk.

I snakket vi om hvilke utfordringer SQL-databaser har mÞtt i skyens og Kubernetes' Êra. Samtidig sÄ vi pÄ hvordan SQL-databaser tilpasser seg og utvikler seg under innflytelse av disse utfordringene.
Webinaret ble holdt av , Google Cloud Practice Delivery Manager hos EPAM Systems.
Da trĂŠrne var smĂ„âŠ
For Ä begynne, la oss huske hvordan valget av DBMS startet pÄ slutten av forrige Ärhundre. Det bÞr ikke vÊre sÄ vanskelig, for valget av DBMS i de tider begynte og sluttet med Oracle.

PÄ slutten av 90-tallet og begynnelsen av 2000-tallet var det i realiteten ikke mye valg nÄr det gjelder industrielle skalerbare databaser. Ja, det fantes IBM DB2, Sybase og noen andre databaser som dukket opp og forsvant, men stort sett var de ikke sÄ synlige i forhold til Oracle. FÞlgelig var ingeniÞrenes ferdigheter pÄ den tiden mer eller mindre knyttet til det eneste valget som fantes.
En Oracle DBA mÄtte kunne:
- installere Oracle Server fra distribusjon;
- konfigurere Oracle Server:
- init.ora;
- listener.ora;
â opprette:
- tabellerom;
- skjemaer;
- brukere;
â utfĂžre sikkerhetskopiering og gjenoppretting;
â overvĂ„ke;
â bekjempe suboptimale forespĂžrsel.
Samtidig ble det ikke spesielt krevd av Oracle DBA Ă„:
- kunne velge den optimale DBMS eller annen teknologi for lagring og behandling av data;
- sikre hÞy tilgjengelighet og horisontal skalerbarhet (dette var ikke alltid et spÞrsmÄl for DBA);
- ha god kunnskap om fagfeltet, infrastrukturen, applikasjonsarkitekturen, OS;
- utfĂžre dataopplasting og -utlasting, migrasjon av data mellom forskjellige DBMS.
Generelt, nÄr man snakker om valgmulighetene pÄ den tiden, minner det om valget i en sovjetisk butikk pÄ slutten av 80-tallet:

VÄr tid
Siden den gang har trĂŠrne naturligvis vokst, verden har endret seg, og det har blitt slik:

Markedet for DBMS har ogsÄ endret seg, noe som er tydelig i den nyeste rapporten fra Gartner:

Og her mÄ det nevnes at skyene har tatt sin plass, hvis popularitet vokser. Hvis man leser den samme rapporten fra Gartner, vil vi se fÞlgende konklusjoner:
- Mange kunder er pÄ vei til Ä flytte applikasjoner til skyen.
- Nye teknologier dukker fĂžrst opp i skyen, og det er ikke sikkert at de noen gang vil flytte til en ikke-skybasert infrastruktur.
- Modellen for prising basert pÄ pay-as-you-go har blitt vanlig. Alle Þnsker Ä betale kun for det de bruker, og dette er ikke lenger en trend, men en konstatering av faktum.
Hva skjer nÄ?
I dag er vi alle i skyen. De spÞrsmÄlene vi har, handler om valg. Og valgene er enorme, selv om vi bare snakker om valget av DB-teknologier i on-premises-format. I tillegg har vi managed services og SaaS. Dermed blir valget mer og mer komplisert hvert Är.
I tillegg til valgsituasjonen, finnes det begrensende faktorer:
- pris. Mange teknologier koster fortsatt penger;
- ferdigheter. NÄr vi snakker om gratis programvare, oppstÄr det et spÞrsmÄl om ferdigheter, fordi gratis programvare krever at folk som ruller ut og drifter det, har tilstrekkelig kompetanse;
- funksjonalitet. Ikke alle tjenester som er tilgjengelige i skyen og bygget, for eksempel pÄ basis av Postgres, har de samme funksjonene som Postgres on-premises. Dette er en vesentlig faktor som mÄ forstÄs. I tillegg fÄr denne faktoren mer betydning enn kunnskap om spesifikke skjulte muligheter i en enkelt DBMS.
Hva man forventer av DA/DE nÄ:
- gode kunnskaper om fagfeltet og anvendt arkitektur;
- evnen til Ä velge riktig DB-teknologi med tanke pÄ oppgaven som stilles;
- evnen til Ă„ velge optimal implementeringsmetode for den valgte teknologien i lys av eksisterende begrensninger;
- evnen til Ă„ utfĂžre overfĂžringer og migrering av data;
- evnen til Ă„ implementere og drifte de valgte lĂžsningene.
Eksemplet nedenfor basert pÄ GCP demonstrerer hvordan valget av en bestemt teknologi for databehandling fungerer avhengig av datamengde:

VÊr oppmerksom pÄ at PostgreSQL ikke er med i diagrammet, og det er fordi det skjuler seg under betegnelsen Cloud SQL. Og nÄr vi gÄr inn i Cloud SQL, mÄ vi igjen ta et valg:

Det er verdt Ä merke seg at dette valget ikke alltid er klart, sÄ applikasjonsutviklere ofte ledes av instinktet.
Totalt:
- Jo lenger framover vi ser, desto mer aktuelt blir spÞrsmÄlet om valg. Og selv nÄr vi kun ser pÄ GCP, managed services og SaaS, dukker det opp en omtale av RDBMS fÞrst i fjerde trinn (hvor Spanner er nÊrt). I tillegg kommer valget av PostgreSQL fÞrst i femte trinn, mens MySQL og SQL Server ogsÄ er til stede, sÄ det er mye Ä velge fra, men man mÄ ta et valg.
- Vi mÄ ikke glemme begrensningene som kommer med fristelsene. Hovedsakelig Þnsker alle Spanner, men det er dyrt. SÄ en typisk forespÞrsel ser omtrent slik ut: «Kan dere lage Spanner til oss, men til prisen for Cloud SQL, dere er jo profesjonelle!»

Hva skal man gjĂžre?
Uten Ä pÄstÄ Ä ha den endelige sannheten, la oss si fÞlgende:
Vi mÄ endre tilnÊrmingen til utdanning:
- Ă„ lĂŠre slik man gjorde fĂžr for DBA-er, gir ingen mening;
- kunnskap om ett enkelt produkt er nÄ allerede utilstrekkelig;
- og Ä ha kjennskap til titalls produkter pÄ ett nivÄ er umulig.
Man mÄ forstÄ ikke bare produktet, men ogsÄ:
- bruksomrÄdene for det;
- de ulike distribusjonsmetodene;
- fordelene og ulempene ved hver metode;
- beslektede og alternative produkter for Ă„ ta bevisste og optimale valg, ikke alltid til fordel for det kjente produktet.
Og man mÄ ogsÄ kunne migrere data og forstÄ grunnleggende prinsipper for integrasjon med ETL.
En reell situasjon
I det siste mÄtte jeg utvikle backend for en mobilapp. Da arbeidet med denne startet, var backend allerede utviklet og klar for implementering, og utviklerteamet hadde brukt omtrent to Är pÄ dette prosjektet. FÞlgende oppgaver ble satt:
- bygge CI/CD;
- gjĂžre arkitekturreview;
- sette alt dette i drift.
Selve applikasjonen var mikrotjenestebasert, og koden i Python/Django ble utviklet fra bunnen av direkte i GCP. NĂ„r det gjelder mĂ„lgruppen, var det planlagt to regioner â USA og EU, og trafikken ble fordelt gjennom Global Load Balancer. Alle arbeidsbelastninger og beregningsbelastning kjĂžrte i Google Kubernetes Engine.
NÄr det gjelder dataene, var det tre strukturer:
- Cloud Storage;
- Datastore;
- Cloud SQL (PostgreSQL).

Det kan oppstĂ„ spĂžrsmĂ„l om hvorfor Cloud SQL ble valgt? For Ă„ vĂŠre ĂŠrlig, har slike spĂžrsmĂ„l de siste Ă„rene skapt en viss pinlig pause â det virker som folk begynner Ă„ bli flaue over relasjonsdatabaser, men de fortsetter likevel Ă„ bruke dem aktivt ;-).
NÄr det gjelder vÄr situasjon, ble Cloud SQL valgt av fÞlgende grunner:
- Som det ble nevnt, ble applikasjonen utviklet med Django, og den har en modell for Ă„ vise permanente data fra SQL-databasen som Python-objekter (Django ORM).
- Rammeverket stĂžttet en begrenset liste over databasesystemer:
- PostgreSQL;
- MariaDB;
- MySQL;
- Oracle;
- SQLite.
Dermed ble PostgreSQL valgt fra denne listen mer eller mindre intuitivt (men ikke Oracle, altsÄ).
Hva som manglet:
- applikasjonen var bare distribuert i 2 regioner, og det var planer om en 3. (Asia);
- Databasen befant seg i den nordamerikanske regionen (Iowa);
- det var bekymringer fra kunden angÄende mulige forsinkelser med tilgang fra Europa og Asia, og avbrudd i tjenesten i tilfelle av en databasefeil.
Selv om Django kan hÄndtere flere databaser parallelt og skille dem ved lesing og skriving, var det ikke sÄ mange skrivinger i applikasjonen (over 90 % er lesing). Generelt sett, hvis man kunne lage en read-replika av hoveddatabasen i Europa og Asia, ville det vÊrt en kompromisslÞsning. Hva er sÄ vanskelig med det?
Utfordringen var at kunden ikke Þnsket Ä gi opp bruken av managed services og Cloud SQL. Mulighetene med Cloud SQL er for tiden begrensede. Cloud SQL stÞtter hÞy tilgjengelighet (HA) og lesereplika (RR), men den samme RR stÞttes bare i én region. Ved Ä opprette en database i den amerikanske regionen, er det ikke mulig Ä lage en read-replika i den europeiske regionen ved hjelp av Cloud SQL, selv om PostgreSQL selv ikke hindrer dette. Korrespondanse med Google-ansatte fÞrte ikke til noe og endte med lÞfter som «Vi er klar over problemet og jobber med det, spÞrsmÄlet vil bli lÞst en gang».
Hvis vi oppsummerer mulighetene med Cloud SQL punktvis, vil det se omtrent slik ut:
1. HĂžy tilgjengelighet (HA):
- innen ett enkelt omrÄde;
- gjennom diskreplikering;
- bruker ikke PostgreSQL-mekanismer;
- mulig automatisk og manuell styring â failover/failback;
- ved omkobling er databasen utilgjengelig i flere minutter.
2. Lesereplika (RR):
- innen ett enkelt omrÄde;
- hot standby;
- PostgreSQL streaming replikering.
I tillegg, som vanlig, nÄr man velger teknologi, stÞter man alltid pÄ noe begrensninger;:
- kunden Ăžnsket ikke Ă„ skape flere enheter og bruke IaaS, annet enn via GKE;
- kunden Ăžnsket ikke Ă„ sette opp self service PostgreSQL/MySQL;
- Selv om Google Spanner ville vĂŠrt et godt alternativ, hvis ikke for prisen, kan Django ORM ikke arbeide med det, men ellers er det en flott ting.
Gitt situasjonen, kom det et spÞrsmÄl fra kunden: «Kan dere lage noe lignende, sÄ det er som Google Spanner, men fungerer ogsÄ med Django ORM?»
LĂžsningsalternativ nr. 0
Det fĂžrste som kom til tankene:
- holde seg innenfor CloudSQL;
- det vil ikke vĂŠre noen form for innebygd replikering mellom regioner;
- prĂžve Ă„ koble til en kopi av eksisterende Cloud SQL by PostgreSQL;
- kjĂžre en PostgreSQL-instans et sted, men i det minste ikke rĂžre ved masteren.
Dessverre viste det seg at det ikke var mulig, da det ikke er tilgang til verten (den er i et annet prosjekt) â pg_hba og sĂ„ videre, og det er ikke tilgang med superbruker.
LĂžsningsalternativ nr. 1
Etter noen flere refleksjoner og med tanke pÄ de tidligere forholdene, endret tankegangen seg litt:
- vi prĂžver fortsatt Ă„ holde oss innenfor CloudSQL, men bytter til MySQL, da Cloud SQL by MySQL har en ekstern master som:
â fungerer som en proxy for ekstern MySQL;
â ser ut som en MySQL-instans;
â er laget for migrering av data fra andre skyer eller on-premises.
Siden innstillingen for MySQL-replikering ikke krever tilgang til verten, fungerte alt i prinsippet, men det var veldig ustabilt og upraktisk. Og nÄr vi gikk videre, ble det skummelt, fordi vi rullet ut hele strukturen med terraform, og plutselig viste det seg at ekstern master ikke stÞttes av terraform. Ja, Google har CLI, men det ble av en eller annen grunn ogsÄ ustabilt - noen ganger ble det opprettet, noen ganger ikke. Kanskje fordi CLI ble utviklet for datamigrering fra utsiden, ikke for replikaer.
Egentlig ble det klart at Cloud SQL ikke passet i det hele tatt. Som de sier, gjorde vi alt vi kunne.
LĂžsningsalternativ nr. 2
Siden det ikke var mulig Ă„ holde seg innenfor Cloud SQL, prĂžvde vi Ă„ formulere kravene til en kompromisslĂžsning. Kravene ble som fĂžlger:
- arbeid i Kubernetes, maksimal utnyttelse av ressurser og muligheter i Kubernetes (DCS, ...) og GCP (LB, ...);
- ingen ballast fra masse unĂždvendige ting i skyen som HA proxy;
- mulighet for Ă„ kjĂžre HA PostgreSQL eller MySQL i hovedregionen; i andre regioner â HA fra hovedregionens RR pluss en kopi av den (for pĂ„litelighet);
- multi master (det var ikke sÄ Þnskelig Ä koble seg til, men det var ikke veldig prinsipielt)
.
Som et resultat av disse kravene, dukket det endelig opp en lĂžsning i horisonten.passende database- og bindingsalternativer:
- MySQL Galera;
- CockroachDB;
- PostgreSQL-verktĂžy
:
â pgpool-II;
â Patroni.
MySQL Galera
MySQL Galera-teknologien er utviklet av Codership og er et plugin for InnoDB. Egenskaper:
- multi master;
- synchron replikasjon;
- lese fra hvilken som helst node;
- skrive til hvilken som helst node;
- innebygd HA-mekanisme;
- det er en Helm-chart fra Bitnami.
CockroachDB
Beskrivelsen gir inntrykk av noe helt fantastisk og er et open source-prosjekt skrevet i Go. HovedaktÞren er Cockroach Labs (grunnlagt av tidligere Google-ansatte). Denne relasjonsdatabasen er opprinnelig laget for Ä vÊre distribuert (med horisontal skalerbarhet «ut av boksen») og feilbestandig. Forfatterne fra selskapet har satt seg som mÄl Ä «kombinere rikheten av SQLs funksjonalitet med horisontal tilgjengelighet som er vanlig i NoSQL-lÞsninger».
Som en hyggelig bonus â stĂžtte for PostgreSQL-tilkoblingsprotokollen.
Pgpool
Dette er et tillegg over PostgreSQL, egentlig en ny enhet som hÄndterer alle forbindelser. Den har sin egen lastbalanserer og parser, og lisensieres under BSD-lisensen. Den gir omfattende muligheter, men kan virke litt skremmende, da det Ä ha en ny enhet kan fÞre til noen ekstra utfordringer.
Patroni
Dette var det siste jeg sÄ pÄ, og som viste seg Ä vÊre verdt det. Patroni er et open source-verktÞy som i hovedsak fungerer som en daemon i Python, som automatisk hÄndterer PostgreSQL-klynger med ulike typer replikasjon og automatisk rollebytte. Det viste seg Ä vÊre veldig interessant, da det integreres godt med Kubernetes og ikke bringer til legging av nye enheter.
Hva som ble valgt til slutt
Valget var ikke enkelt:
- CockroachDB â brennende, men skummelt;
- MySQL Galera â ogsĂ„ ganske bra, mye brukt, men MySQL;
- Pgpool â mange unĂždvendige enheter, sĂ„ som sĂ„ integrasjon med skyen og K8s;
- Patroni â utmerket integrasjon med K8s, ingen unĂždvendige enheter, god integrasjon med GCP LB.
Dermed falt valget pÄ Patroni.
Konklusjoner
Det er pÄ tide Ä oppsummere kort. Ja, verden av IT-infrastruktur har endret seg betydelig, og dette er bare begynnelsen. Hvis skyene tidligere bare var en annen type infrastruktur, er det nÄ annerledes. Dessuten dukker det stadig opp innovasjoner i skyene, og de vil fortsatt dukke opp, og kanskje bare i skyene, fÞr de eventuelt blir overfÞrt til On-premises av oppstartsbedrifter.
NÄr det gjelder SQL, vil SQL eksistere. Det betyr at man mÄ kunne PostgreSQL og MySQL, men det viktigste er Ä vite hvordan man bruker dem riktig.
Kilde: habr.com
