{"id":54366,"date":"2019-12-24T00:00:00","date_gmt":"2019-12-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster"},"modified":"2020-02-18T14:02:22","modified_gmt":"2020-02-18T11:02:22","slug":"kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","title":{"rendered":"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Ciao, membri di Habr. Oggi inizia il corso della prima classe <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\u00abPostgreSQL\u00bb<\/a><\/noindex>. Pertanto, vogliamo parlarvi di come si \u00e8 svolto il webinar aperto su questo corso.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e66e0d4919d45284dbdc4696d6cab555.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=yiXP8ihL2eA\">il prossimo open lesson<\/a><\/noindex> abbiamo discusso delle sfide che hanno affrontato i database SQL nell'era del cloud e di Kubernetes. Abbiamo anche esaminato come i database SQL si adattano e mutano in risposta a queste sfide.<\/p>\n<p>Il webinar \u00e8 stato condotto da <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/IVe0\/\">Valeriy Bezrukov<\/a><\/noindex>, Google Cloud Practice Delivery Manager in EPAM Systems.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Quando gli alberi erano piccoli\u2026<\/h3>\n<p>\nIniziamo a ricordare come \u00e8 iniziata la scelta dei DBMS alla fine del secolo scorso. Non sar\u00e0 difficile, dato che la scelta del DBMS in quel periodo iniziava e finiva <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/5fdf02523892e7477fd47dd01eb21d04.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlla fine degli anni '90 e all'inizio degli anni 2000, in effetti non c'era molta scelta, parlando di database scalabili industriali. S\u00ec, c'erano IBM DB2, Sybase e altri database che apparivano e scomparivano, ma in generale erano meno visibili rispetto a Oracle. Di conseguenza, le competenze degli ingegneri di quel periodo erano in qualche modo legate a quell'unica scelta esistente.<\/p>\n<p>Un DBA Oracle doveva sapere:<\/p>\n<ul>\n<li> installare Oracle Server dal pacchetto;<\/li>\n<li> configurare Oracle Server:<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>init.ora;<\/li>\n<li>listener.ora;<\/li>\n<\/ul>\n<p>\n\u2014 creare:<\/p>\n<ul>\n<li>spazi di tabella;<\/li>\n<li>schemi;<\/li>\n<li>utenti;<\/li>\n<\/ul>\n<p>\u2014 eseguire backup e ripristino;<br \/>\n\u2014 effettuare monitoraggio;<br \/>\n\u2014 combattere le query non ottimali.<\/p>\n<p>A questo proposito, non era richiesto da Oracle DBA:<\/p>\n<ul>\n<li>saper scegliere il DBMS ottimale o un'altra tecnologia di archiviazione e elaborazione dei dati;<\/li>\n<li>garantire alta disponibilit\u00e0 e scalabilit\u00e0 orizzontale (questo non era sempre un compito del DBA);<\/li>\n<li>conoscere bene il dominio, l'infrastruttura, l'architettura applicativa, il sistema operativo;<\/li>\n<li>eseguire caricamento e scaricamento dei dati, migrazione dei dati tra diversi DBMS.<\/li>\n<\/ul>\n<p>In generale, se parliamo della scelta in quei tempi, ricorda la scelta in un negozio sovietico alla fine degli anni '80:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/70b37faf295170d8507d5c605f4b2047.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Il nostro tempo<\/h3>\n<p>\nDa allora, ovviamente, gli alberi sono cresciuti, il mondo \u00e8 cambiato, e ora \u00e8 cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e8698d658bd09e0071f02a672a5cb81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 cambiato anche il mercato dei DBMS, come ben evidenziato nel recente rapporto di Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE qui non possiamo non notare che il cloud ha trovato la sua nicchia, la cui popolarit\u00e0 \u00e8 in crescita. Se leggiamo lo stesso rapporto di Gartner, vedremo le seguenti conclusioni:<\/p>\n<ol>\n<li>Molti clienti sono in procinto di trasferire le applicazioni nel cloud. <\/li>\n<li>Le nuove tecnologie emergono inizialmente nel cloud e non \u00e8 detto che in futuro possano trasferirsi in un'infrastruttura non cloud.<\/li>\n<li>Il modello di pricing pay-as-you-go \u00e8 ormai diventato consueto. Tutti preferiscono pagare solo per ci\u00f2 che utilizzano, e questo non \u00e8 pi\u00f9 un trend, ma una pura constatazione di fatto. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Cosa succede adesso?<\/h3>\n<p>\nOggi siamo tutti nel cloud. Le domande che ci poniamo riguardano la scelta. E le opzioni sono enormi, anche se parliamo solo della selezione delle tecnologie DBMS in formato On-premises. Inoltre, abbiamo servizi gestiti e SaaS. Di conseguenza, la scelta diventa sempre pi\u00f9 complessa ogni anno.<\/p>\n<p>Accanto alle questioni relative alla scelta, ci sono anche <b>fattori limitanti<\/b>:<\/p>\n<ul>\n<li><b>il prezzo<\/b>. Molte tecnologie continuano a comportare costi;<\/li>\n<li><b>abilit\u00e0<\/b>. Quando parliamo di software open source, sorge la questione delle competenze, poich\u00e9 il software gratuito richiede da parte delle persone che lo implementano e lo gestiscono una competenza adeguata;<\/li>\n<li><b>funzionalit\u00e0<\/b>. Non tutti i servizi disponibili nel cloud e costruiti, ad esempio, anche sulla base di Postgres, presentano le stesse funzionalit\u00e0 di Postgres On-premises. Questo \u00e8 un fattore significativo che bisogna conoscere e comprendere. Inoltre, questo fattore assume un'importanza maggiore rispetto alla conoscenza di alcune funzionalit\u00e0 nascoste di un sistema di gestione di database specifico. <\/li>\n<\/ul>\n<p>\n<b>Cosa ci si aspetta attualmente da DA\/DE:<\/b><\/p>\n<ul>\n<li>buona comprensione del dominio e dell'architettura applicativa;<\/li>\n<li>capacit\u00e0 di scegliere correttamente la tecnologia del DBMS in base al compito assegnato;<\/li>\n<li>abilit\u00e0 nel selezionare il metodo ottimale per implementare la tecnologia scelta nel contesto delle limitazioni esistenti;<\/li>\n<li>competenza nel trasferire e migrare i dati;<\/li>\n<li>capacit\u00e0 di realizzare e gestire le soluzioni scelte.<\/li>\n<\/ul>\n<p>\nL'esempio seguente <b>basato su GCP<\/b> mostra come avviene la scelta di una determinata tecnologia di gestione dei dati in base alla loro struttura:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi noti che nello schema non \u00e8 presente PostgreSQL, e questo perch\u00e9 si rifugia sotto la terminologia <b>Cloud SQL<\/b>. E quando accediamo a Cloud SQL, dobbiamo nuovamente fare una scelta:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 importante notare che questa scelta non \u00e8 sempre evidente, per cui gli sviluppatori dell'applicazione spesso si guidano dall'intuizione. <\/p>\n<p><b>In totale:<\/b><\/p>\n<ol>\n<li>Man mano che ci si allontana, la questione della scelta diventa sempre pi\u00f9 rilevante. E anche se ci si concentra solo su GCP, servizi gestiti e SaaS, una menzione di RDBMS appare solo al quarto passo (e l\u00ec vicino c'\u00e8 Spanner). Inoltre, la scelta di PostgreSQL appare addirittura al quinto passo, con MySQL e SQL Server nelle vicinanze, ovvero <b>ce n'\u00e8 davvero tanto, ma bisogna scegliere.<\/b>. <\/li>\n<li>Non si possono dimenticare neppure le limitazioni di fronte alle tentazioni. In generale, tutti vogliono Spanner, ma \u00e8 costoso. Alla fine, una richiesta tipica appare pi\u00f9 o meno cos\u00ec: <i>\u00abFateci pure Spanner, ma al prezzo di Cloud SQL, insomma, siete dei professionisti!\u00bb<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/cc656b46d37d08fc6aeca937e1e9085b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>E ora cosa si deve fare?<\/h3>\n<p>\nSenza pretesa di proporre l'ultima parola, diciamo quanto segue:<\/p>\n<p><b>\u00c8 necessario cambiare approccio all'apprendimento:<\/b><\/p>\n<ul>\n<li>insegnare come si faceva con i DBA in passato non ha senso;<\/li>\n<li>la conoscenza di un solo prodotto non \u00e8 pi\u00f9 sufficiente;<\/li>\n<li>e conoscere decine di essi a livello di uno solo \u00e8 impossibile.<\/li>\n<\/ul>\n<p>\nBisogna conoscere non solo il prodotto, ma anche:<\/p>\n<ul>\n<li>l'uso pratico della sua applicazione;<\/li>\n<li>diversi metodi di distribuzione;<\/li>\n<li>i vantaggi e gli svantaggi di ciascun metodo;<\/li>\n<li>prodotti simili e alternativi per fare una scelta consapevole e ottimale, senza sempre optare per il prodotto familiare.<\/li>\n<\/ul>\n<p>\nInoltre, \u00e8 essenziale saper migrare i dati e comprendere i principi di base dell'integrazione con ETL.<\/p>\n<h3>Caso reale<\/h3>\n<p>\nDi recente ho dovuto sviluppare il backend per un'app mobile. All'inizio del lavoro su di essa, il backend era gi\u00e0 stato sviluppato e pronto per l'implementazione, e il team di sviluppo aveva impiegato circa due anni per questo progetto. Le seguenti attivit\u00e0 erano state assegnate:<\/p>\n<ul>\n<li>costruire CI\/CD;<\/li>\n<li>effettuare la revisione dell'architettura;<\/li>\n<li>mettere tutto in produzione. <\/li>\n<\/ul>\n<p>\nL'applicazione stessa era microservizi, e il codice in Python\/Django era stato sviluppato da zero e immediatamente su GCP. Per quanto riguarda il pubblico di destinazione, si prevedeva che ci sarebbero stati due regioni - US e EU, e il traffico veniva distribuito tramite Global Load balancer. Tutti i Workloads e il carico computazionale operavano in Google Kubernetes Engine. <\/p>\n<p>Per quanto riguarda i dati, c'erano 3 strutture:<\/p>\n<ul>\n<li>Cloud Storage;<\/li>\n<li>Datastore;<\/li>\n<li>Cloud SQL (PostgreSQL).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Come sopravvivere a un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPu\u00f2 sorgere la domanda: perch\u00e9 \u00e8 stato scelto Cloud SQL? A dire il vero, questa domanda provoca un certo imbarazzo negli ultimi anni \u2014 sembra che le persone si stiano vergognando dei database relazionali, eppure continuano a usarli attivamente ;-). <\/p>\n<p>Per quanto riguarda il nostro caso, Cloud SQL \u00e8 stato scelto per le seguenti ragioni:<\/p>\n<ol>\n<li>Come accennato, l'applicazione \u00e8 stata sviluppata utilizzando Django, che dispone di un modello per mappare i dati persistenti da un database SQL a oggetti Python (Django ORM).<\/li>\n<li>Il framework supportava una lista piuttosto limitata di DBMS:<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>PostgreSQL;<\/li>\n<li>MariaDB;<\/li>\n<li>MySQL;<\/li>\n<li>Oracle;<\/li>\n<li>SQLite.<\/li>\n<\/ul>\n<p>\nDi conseguenza, abbiamo scelto PostgreSQL da questo elenco pi\u00f9 per intuizione (d'altronde, non possiamo davvero scegliere Oracle).<\/p>\n<p><b>Cosa mancava:<\/b><\/p>\n<ul>\n<li>l'applicazione era distribuita solo in 2 regioni, e ne era prevista una 3\u00aa (Asia);<\/li>\n<li>Il database si trovava nella regione nordamericana (Iowa);<\/li>\n<li>c'erano preoccupazioni da parte del cliente riguardo a potenziali <b>ritardi di accesso<\/b> dall'Europa e dall'Asia e <b>interruzioni <\/b><b>nel servizio<\/b> in caso di inattivit\u00e0 del DBMS. <\/li>\n<\/ul>\n<p>\nAnche se Django stesso pu\u00f2 lavorare con pi\u00f9 database in parallelo e dividerli tra lettura e scrittura, le registrazioni nell'applicazione non erano cos\u00ec numerose (oltre il 90% sono letture). In generale, se fosse stato possibile fare <b>una replica in lettura del database principale in Europa e Asia<\/b>, sarebbe stata una soluzione compromissoria. Ma qual \u00e8 il problema qui?<\/p>\n<p>La difficolt\u00e0 stava nel fatto che il cliente non voleva rinunciare all'uso dei servizi gestiti e di Cloud SQL. E al momento, le funzionalit\u00e0 di Cloud SQL sono limitate. Cloud SQL supporta l'High availability (HA) e la Read Replica (RR), ma la stessa RR \u00e8 supportata solo in una regione. Creando un database nella regione americana, non \u00e8 possibile fare una replica in lettura nella regione europea con gli strumenti di Cloud SQL, anche se PostgreSQL non lo impedisce. La corrispondenza con i dipendenti di Google non ha portato a nulla e si \u00e8 conclusa con promesse del tipo \"sappiamo del problema e ci stiamo lavorando, prima o poi la questione sar\u00e0 risolta.\" <\/p>\n<p>Se elenchiamo le funzionalit\u00e0 di Cloud SQL in forma di punti, apparir\u00e0 circa cos\u00ec:<\/p>\n<p><b>1. High availability (HA):<\/b><\/p>\n<ul>\n<li>all'interno di una sola regione;<\/li>\n<li>tramite replicazione del disco;<\/li>\n<li>non vengono utilizzati meccanismi di PostgreSQL;<\/li>\n<li>\u00e8 possibile un controllo automatico e manuale \u2014 failover\/failback;<\/li>\n<li>durante il passaggio, il DBMS \u00e8 inattivo per qualche minuto.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>all'interno di una sola regione;<\/li>\n<li>hot standby;<\/li>\n<li>replicazione streaming PostgreSQL.<\/li>\n<\/ul>\n<p>\nInoltre, come \u00e8 comune, quando si sceglie una tecnologia, ci si imbatte in <b>limitazioni<\/b>:<\/p>\n<ul>\n<li>il cliente non voleva generare entit\u00e0 e utilizzare IaaS, se non attraverso GKE;<\/li>\n<li>il cliente non sarebbe interessato a implementare self service PostgreSQL\/MySQL;<\/li>\n<li>e in generale, Google Spanner sarebbe andato bene, se non fosse per il suo costo, ma con Django ORM non pu\u00f2 funzionare, anche se \u00e8 un'ottima soluzione.<\/li>\n<\/ul>\n<p>\nData la situazione, \u00e8 arrivata una domanda da parte del cliente: <i>\u00abPotete fare qualcosa di simile, che funzioni come Google Spanner, ma che funzioni anche con Django ORM?\u00bb<\/i><\/p>\n<h3>Opzione di soluzione \u2116 0<\/h3>\n<p>\nLa prima cosa che mi \u00e8 venuta in mente:<\/p>\n<ul>\n<li>rimanere all'interno di CloudSQL;<\/li>\n<li>non ci sar\u00e0 replicazione integrata tra regioni in nessuna forma;<\/li>\n<li>cercare di collegare una replica al Cloud SQL by PostgreSQL esistente;<\/li>\n<li>lanciare un'istanza PostgreSQL in un modo o nell'altro, ma senza toccare almeno il master.<\/li>\n<\/ul>\n<p>\nSfortunatamente, si \u00e8 scoperto che non era possibile, poich\u00e9 non c'era accesso all'host (\u00e8 in un altro progetto) \u2014 pg_hba e cos\u00ec via, e non c'era accesso come superutente.<\/p>\n<h3>Opzione di soluzione \u2116 1<\/h3>\n<p>\nDopo ulteriori riflessioni e considerando le circostanze precedenti, il nostro modo di pensare \u00e8 cambiato leggermente:<\/p>\n<ul>\n<li>cerchiamo comunque di rimanere nell'ambito di CloudSQL, ma passiamo a MySQL, poich\u00e9 Cloud SQL by MySQL offre un master esterno che:<\/li>\n<\/ul>\n<p>\n\u2014 funge da proxy per un MySQL esterno;<br \/>\n\u2014 appare come un'istanza di MySQL;<br \/>\n\u2014 \u00e8 concepito per la migrazione di dati da altri cloud o On-premises.<\/p>\n<p>Poich\u00e9 la configurazione della replica MySQL non richiede accesso all'host, in linea di principio tutto funzionava, ma era molto instabile e scomodo. Quando abbiamo proseguito, la situazione \u00e8 diventata ancora pi\u00f9 preoccupante, poich\u00e9 stavamo distribuendo l'intera struttura con terraform e potrebbe essere risultato che il master esterno non fosse supportato da terraform. S\u00ec, Google ha un CLI, ma per qualche motivo anche qui tutto funzionava a singhiozzo \u2014 a volte veniva creato, altre no. Forse perch\u00e9 il CLI \u00e8 stato pensato per la migrazione di dati da esterno, non per le repliche.<\/p>\n<p>A questo punto \u00e8 stato chiaro che Cloud SQL non era affatto adatto. Come si suol dire, abbiamo fatto tutto ci\u00f2 che potevamo. <\/p>\n<h3>Opzione di soluzione n. 2<\/h3>\n<p>\nPoich\u00e9 non siamo riusciti a rimanere nell'ambito di Cloud SQL, abbiamo cercato di formulare i requisiti per una soluzione di compromesso. I requisiti sono risultati i seguenti:<\/p>\n<ul>\n<li>lavoro in Kubernetes, massimizzazione delle risorse e delle funzionalit\u00e0 di Kubernetes (DCS, &#8230;) e GCP (LB, &#8230;);<\/li>\n<li>assenza di zavorra da una miriade di cose inutili nel cloud come HA proxy;<\/li>\n<li>possibilit\u00e0 di eseguire HA PostgreSQL o MySQL nella regione principale; nelle altre regioni \u2014 HA da RR della regione principale pi\u00f9 una copia (per affidabilit\u00e0);<\/li>\n<li>multi master (non volevo interagire con esso, ma non era molto cruciale)<\/li>\n<\/ul>\n<p>. <br \/>\nDi conseguenza, a lungo termine, sono emerse finalmente p<b>opzioni di DBMS e integrazione adatte<\/b>:<\/p>\n<ul>\n<li>MySQL Galera;<\/li>\n<li>CockroachDB;<\/li>\n<li>strumenti PostgreSQL<\/li>\n<\/ul>\n<p>:<br \/>\n\u2014 pgpool-II;<br \/>\n\u2014 Patroni.<\/p>\n<h3>MySQL Galera<\/h3>\n<p>\nLa tecnologia MySQL Galera \u00e8 stata sviluppata da Codership ed \u00e8 un plugin per InnoDB. Caratteristiche:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>replicazione sincrona;<\/li>\n<li>lettura da qualsiasi nodo;<\/li>\n<li>scrittura su qualsiasi nodo;<\/li>\n<li>meccanismo HA incorporato;<\/li>\n<li>disponibile Helm chart da Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nSecondo la descrizione, \u00e8 un prodotto eccezionale e rappresenta un progetto open source scritto in Go. Il principale contributore \u00e8 Cockroach Labs (fondata da ex membri di Google). Questo DBMS relazionale \u00e8 stato progettato fin dall'inizio per essere distribuito (con scalabilit\u00e0 orizzontale \"out of the box\") e tollerante ai guasti. I suoi autori hanno dichiarato l'obiettivo di \"combinare la ricchezza delle funzionalit\u00e0 SQL con la disponibilit\u00e0 orizzontale, tipica delle soluzioni NoSQL\".<\/p>\n<p>Come piacevole bonus, supporta il protocollo di connessione PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\n\u00c8 un'estensione di PostgreSQL, in realt\u00e0, una nuova entit\u00e0 che gestisce tutte le connessioni e le elabora. Ha il proprio bilanciatore di carico e parser, \u00e8 concesso in licenza sotto la licenza BSD. Offre ampie possibilit\u00e0, ma pu\u00f2 apparire un po' spaventoso, poich\u00e9 la presenza di una nuova entit\u00e0 potrebbe diventare fonte di ulteriori complicazioni. <\/p>\n<h3>Patroni<\/h3>\n<p>\nQuesto \u00e8 l'ultimo sguardo e, a quanto pare, non \u00e8 stato invano. Patroni \u00e8 uno strumento open source che funge essenzialmente da demone in Python, permettendo la gestione automatica di cluster PostgreSQL con diversi tipi di replica e il failover automatico. Si \u00e8 rivelato molto interessante, poich\u00e9 si integra bene con Kubernetes e non introduce entit\u00e0 nuove. <\/p>\n<h3>Cosa abbiamo scelto alla fine<\/h3>\n<p>\nLa scelta non \u00e8 stata facile:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 fantastico, ma rischioso;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 anche piuttosto valido, usato in molte situazioni, ma MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 molte entit\u00e0 superflue, integrazione cos\u00ec cos\u00ec con il cloud e K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 eccellente integrazione con K8s, nessuna entit\u00e0 superflua, si integra bene con GCP LB.<\/li>\n<\/ol>\n<p>\nPertanto, la scelta \u00e8 caduta su Patroni. <\/p>\n<h3>Conclusioni<\/h3>\n<p>\n\u00c8 tempo di tirare le somme. S\u00ec, il mondo dell'infrastruttura IT \u00e8 cambiato drasticamente e questo \u00e8 solo l'inizio. Se prima i cloud erano solo un altro tipo di infrastruttura, ora le cose sono diverse. Inoltre, le innovazioni nei cloud stanno emergendo continuamente e, probabilmente, continueranno a farlo, sviluppandosi principalmente nei cloud per poi essere trasferite On-premises da startup.<\/p>\n<p>Per quanto riguarda SQL, SQL vivr\u00e0. Ci\u00f2 significa che \u00e8 fondamentale conoscere e saper lavorare con PostgreSQL e MySQL, ma \u00e8 ancor pi\u00f9 importante saperli applicare correttamente.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/481644\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c, \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0443\u0440\u0441\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0443\u0440\u043e\u043a\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0442\u043e\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c SQL-\u0431\u0430\u0437\u044b \u0432 \u044d\u0440\u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0438 Kubernetes. \u0410 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 SQL \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043c\u0443\u0442\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54366","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Come sopravvivere a una base di dati SQL nel XXI secolo: cloud, Kubernetes e PostgreSQL multimaster | ProHoster","description":"Ciao, amici di Habr. Oggi iniziano le lezioni nel primo gruppo del corso \u00abPostgreSQL\u00bb.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0432\u044b\u0436\u0438\u0442\u044c SQL-\u0431\u0430\u0437\u0435 \u0432 21 \u0432\u0435\u043a\u0435: \u043e\u0431\u043b\u0430\u043a\u0430, Kubernetes \u0438 PostgreSQL multimaster | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0437\u0430\u043d\u044f\u0442\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043a\u0443\u0440\u0441\u0430 \u00abPostgreSQL\u00bb.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/kak-vyzhit-sql-baze-v-21-veke-oblaka-kubernetes-i-postgresql-multimaster","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54366","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:06:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:30:12","updated":"2026-01-24 11:06:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=54366"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54366\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=54366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=54366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=54366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}