{"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 una base di dati SQL nel 21 secolo: cloud, Kubernetes e PostgreSQL multimaster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Ciao, habrovichiani. Oggi iniziano le lezioni nel primo gruppo del corso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/nwhU\/\">\"PostgreSQL\"<\/a><\/noindex>. A questo proposito, vogliamo raccontarvi com'\u00e8 andato il webinar aperto su questo corso.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 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\">un altro open lesson<\/a><\/noindex> abbiamo parlato delle sfide che le basi di dati SQL stanno affrontando nell'era del cloud e di Kubernetes. Inoltre, abbiamo visto come i database SQL si adattino e si trasformino a seguito di 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>\nPer cominciare, ricordiamo come iniziava la scelta del DBMS alla fine del secolo scorso. D'altra parte, non \u00e8 difficile, poich\u00e9 la scelta del DBMS in quei tempi iniziava e finiva <b>Oracle<\/b>. <\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 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 realt\u00e0 non c'era molta scelta, per quanto riguarda i database scalabili industriali. S\u00ec, esistevano IBM DB2, Sybase e altri database che apparivano e sparivano, ma nel complesso non erano cos\u00ec evidenti rispetto a Oracle. Di conseguenza, le competenze degli ingegneri di quel periodo erano in un certo senso legate a quella unica scelta che esisteva.<\/p>\n<p>Un Oracle DBA doveva saper fare:<\/p>\n<ul>\n<li> installare Oracle Server da un 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 monitorare;<br \/>\n\u2014 affrontare le query non ottimali.<\/p>\n<p>Tuttavia, da un Oracle DBA non era richiesto molto:<\/p>\n<ul>\n<li>saper scegliere il DBMS ottimale o un'altra tecnologia di archiviazione e elaborazione dei dati;<\/li>\n<li>assicurare alta disponibilit\u00e0 e scalabilit\u00e0 orizzontale (questo non era sempre un problema del DBA);<\/li>\n<li>conoscere bene il dominio, l'infrastruttura, l'architettura applicativa, il sistema operativo;<\/li>\n<li>effettuare il caricamento e lo scaricamento dei dati, la migrazione dei dati tra diversi DBMS.<\/li>\n<\/ul>\n<p>In generale, se parliamo della scelta in quel periodo, ricorda la scelta in un negozio sovietico alla fine degli anni '80:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 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>I nostri tempi<\/h3>\n<p>\nDa allora, ovviamente, gli alberi sono cresciuti, il mondo \u00e8 cambiato e le cose sono andate cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 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 \u00e8 evidente dal recente rapporto di Gartner:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/745f3969a3ad2e65162ef41cda6c0658.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE non possiamo non notare che il cloud ha trovato una 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 sulla strada per trasferire le applicazioni nel cloud. <\/li>\n<li>Le nuove tecnologie appaiono prima nel cloud e non \u00e8 detto che prima o poi migrino a un'infrastruttura on-premises.<\/li>\n<li>La modalit\u00e0 di pricing pay-as-you-go \u00e8 diventata abituale. Tutti vogliono pagare solo per ci\u00f2 che utilizzano, e questo non \u00e8 pi\u00f9 nemmeno un trend, ma una semplice constatazione dei fatti. <\/li>\n<\/ol>\n<p><\/p>\n<h3>Cosa succede ora?<\/h3>\n<p>\nOggi siamo tutti nel cloud. Le domande che ci poniamo riguardano la scelta. E questa \u00e8 enorme, anche se parliamo solo della scelta delle tecnologie di database in formato On-premises. Inoltre, abbiamo servizi gestiti e SaaS. Pertanto, la scelta diventa ogni anno pi\u00f9 complessa.<\/p>\n<p>Insieme alle interrogazioni sulle scelte, ci sono anche <b>fattori limitanti<\/b>:<\/p>\n<ul>\n<li><b>il prezzo<\/b>. Molte tecnologie richiedono ancora un investimento economico;<\/li>\n<li><b>abilit\u00e0<\/b>. Se parliamo di software libero, sorge il problema delle competenze, poich\u00e9 il software gratuito richiede dagli utenti che lo implementano e lo gestiscono un'adeguata competenza;<\/li>\n<li><b>funzionalit\u00e0<\/b>. Non tutti i servizi disponibili nel cloud e costruiti, ad esempio, sulla base di PostgreSQL hanno le stesse caratteristiche di PostgreSQL On-premises. Questo \u00e8 un fattore significativo che \u00e8 importante conoscere e capire. Inoltre, questo fattore acquisisce una rilevanza maggiore rispetto alla semplice conoscenza di funzionalit\u00e0 nascoste di un singolo sistema di gestione di database. <\/li>\n<\/ul>\n<p>\n<b>Cosa si aspetta attualmente da DA\/DE:<\/b><\/p>\n<ul>\n<li>una buona comprensione dell'area tematica e dell'architettura applicativa;<\/li>\n<li>la capacit\u00e0 di scegliere la tecnologia di database pi\u00f9 adatta tenendo conto del compito assegnato;<\/li>\n<li>la capacit\u00e0 di selezionare il metodo ottimale per implementare la tecnologia scelta in relazione ai vincoli esistenti;<\/li>\n<li>la capacit\u00e0 di eseguire il trasferimento e la migrazione dei dati;<\/li>\n<li>la capacit\u00e0 di implementare e gestire le soluzioni scelte.<\/li>\n<\/ul>\n<p>\nIl seguente esempio <b>basato su GCP<\/b> dimostra come viene effettuata la scelta della tecnologia da utilizzare in base alla loro struttura:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/fe324d8af9ed8f6afb58ed930dc21327.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi prega di notare che nel diagramma non \u00e8 presente PostgreSQL, e questo perch\u00e9 si cela dietro il termine <b>Cloud SQL<\/b>. E quando ci troviamo in Cloud SQL, dobbiamo nuovamente fare una scelta:<\/p>\n<p><img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/bdf523e0b10fbfe753318a02a686a5af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVa notato che questa scelta non \u00e8 sempre chiara, pertanto gli sviluppatori di applicazioni spesso si lasciano guidare 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 attuale. E anche se ci si concentra solo su GCP, i servizi gestiti e SaaS, l'unico accenno ai RDBMS appare solo al 4\u00b0 passo (e l\u00ec c'\u00e8 Spanner accanto). Inoltre, la scelta di PostgreSQL compare addirittura al 5\u00b0 passo, insieme a MySQL e SQL Server, quindi <b>ci sono molte opzioni, ma bisogna scegliere<\/b>. <\/li>\n<li>Non si possono dimenticare i limiti rispetto alle tentazioni. In generale, tutti vogliono Spanner, ma \u00e8 costoso. Alla fine, una richiesta tipica appare pi\u00f9 o meno cos\u00ec: <i>\"Fateci avere Spanner per il prezzo di Cloud SQL, siete professionisti!\"<\/i><\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Come sopravvivere a una base di dati SQL nel 21 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 cosa dobbiamo fare?<\/h3>\n<p>\nSenza pretendere di avere l'ultima parola, diciamo quanto segue:<\/p>\n<p><b>\u00c8 necessario cambiare approccio all'istruzione:<\/b><\/p>\n<ul>\n<li>non ha senso insegnare come si faceva prima ai DBA;<\/li>\n<li>la conoscenza di un singolo prodotto ora \u00e8 gi\u00e0 insufficiente;<\/li>\n<li>e conoscere decine di prodotti a livello di uno solo \u00e8 impossibile.<\/li>\n<\/ul>\n<p>\nNon \u00e8 necessario conoscere solo e non tanto il prodotto, ma:<\/p>\n<ul>\n<li>l'uso delle sue applicazioni;<\/li>\n<li>diversi metodi di distribuzione;<\/li>\n<li>i vantaggi e gli svantaggi di ciascun metodo;<\/li>\n<li>prodotti analoghi e alternativi, per fare una scelta consapevole e ottimale, non sempre a favore del prodotto familiare.<\/li>\n<\/ul>\n<p>\nE in pi\u00f9, bisogna saper migrare i dati e comprendere i principi fondamentali dell'integrazione con ETL.<\/p>\n<h3>Caso reale<\/h3>\n<p>\nRecentemente ho dovuto realizzare il back-end per un'app mobile. Al momento dell'inizio del lavoro, il back-end 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 previste:<\/p>\n<ul>\n<li>costruire CI\/CD;<\/li>\n<li>fare una revisione dell'architettura;<\/li>\n<li>lanciare tutto in produzione. <\/li>\n<\/ul>\n<p>\nL'app stessa era microservizi, e il codice in Python\/Django era stato sviluppato da zero e direttamente in GCP. Per quanto riguarda il pubblico target, si prevedeva di avere due regioni \u2014 US ed EU, e il traffico era distribuito tramite il 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 una base di dati SQL nel 21 secolo: cloud, Kubernetes e PostgreSQL multimaster\" src=\"\/wp-content\/uploads\/2019\/12\/e6e38b1d861b2871edf20fb09378b491.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPotrebbe sorgere la domanda, perch\u00e9 \u00e8 stato scelto Cloud SQL? A dire il vero, tale domanda negli ultimi anni provoca una certa imbarazzante pausa \u2014 si ha l'impressione che le persone si siano vergognate delle basi relazionali, ma continuano ad usarle attivamente ;-). <\/p>\n<p>Nel nostro caso, Cloud SQL \u00e8 stato scelto per i seguenti motivi:<\/p>\n<ol>\n<li>Come accennato, l'applicazione \u00e8 stata sviluppata utilizzando Django, e dispone di un modello che visualizza i dati persistenti da un database SQL in oggetti Python (Django ORM).<\/li>\n<li>Il framework supportava un elenco finale piuttosto completo 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>\nPertanto, PostgreSQL \u00e8 stato scelto da questo elenco piuttosto intuitivamente (non \u00e8 proprio il caso di scegliere Oracle, in effetti).<\/p>\n<p><b>Cosa mancava:<\/b><\/p>\n<ul>\n<li>l'applicazione era implementata solo in 2 regioni, e nel piano era prevista una terza (Asia);<\/li>\n<li>Il database si trovava nella regione nordamericana (Iowa);<\/li>\n<li>ci sono state preoccupazioni da parte del cliente riguardo a possibili <b>ritardi di accesso<\/b> dall'Europa e dall'Asia e <b>interruzioni <\/b><b>nella gestione<\/b> in caso di downtime del DBMS. <\/li>\n<\/ul>\n<p>\nConsiderato che lo stesso Django pu\u00f2 lavorare con pi\u00f9 DB in parallelo e dividerli per lettura e scrittura, le registrazioni nell'applicazione non erano cos\u00ec numerose (oltre il 90% \u2014 lettura). In generale, se si poteva creare <b>una replica di lettura del database principale in Europa e Asia<\/b>, sarebbe stata una soluzione di compromesso. E cosa c'\u00e8 di cos\u00ec difficile in questo?<\/p>\n<p>La difficolt\u00e0 stava nel fatto che il cliente non voleva rinunciare all'uso dei servizi gestiti e di Cloud SQL. Le capacit\u00e0 di Cloud SQL al momento sono limitate. Cloud SQL supporta High availability (HA) e Read Replica (RR), ma quest'ultima \u00e8 supportata solo in una regione. Creando un database nella regione americana, non \u00e8 possibile fare una replica di lettura nella regione europea tramite Cloud SQL, anche se lo stesso PostgreSQL non lo impedisce. La corrispondenza con i dipendenti di Google non ha portato a nulla e si \u00e8 conclusa con promesse di tipo \"conosciamo il problema e ci stiamo lavorando, un giorno verr\u00e0 risolto\". <\/p>\n<p>Se si elencano a punti le capacit\u00e0 di Cloud SQL, apparir\u00e0 all'incirca cos\u00ec:<\/p>\n<p><b>1. High availability (HA):<\/b><\/p>\n<ul>\n<li>nell'ambito di una singola regione;<\/li>\n<li>tramite replicazione su disco;<\/li>\n<li>non vengono utilizzati meccanismi PostgreSQL;<\/li>\n<li>\u00e8 possibile la gestione automatica e manuale \u2014 failover\/failback;<\/li>\n<li>durante la commutazione, il DBMS non \u00e8 disponibile per alcuni minuti.<\/li>\n<\/ul>\n<p>\n<b>2. Read Replica (RR):<\/b><\/p>\n<ul>\n<li>nell'ambito di una singola regione;<\/li>\n<li>hot standby;<\/li>\n<li>replicazione streaming PostgreSQL.<\/li>\n<\/ul>\n<p>\nInoltre, come \u00e8 consueto, quando si sceglie una tecnologia ci si scontra sempre con qualche <b>limitazione.<\/b>:<\/p>\n<ul>\n<li>Il cliente non voleva creare entit\u00e0 e utilizzare l'IaaS, tranne che tramite GKE;<\/li>\n<li>il cliente non voleva implementare PostgreSQL\/MySQL self-service;<\/li>\n<li>Beh, in generale, Google Spanner andrebbe bene, se non fosse per il suo prezzo, per\u00f2 con Django ORM non funziona, ma in effetti \u00e8 uno strumento valido.<\/li>\n<\/ul>\n<p>\nConsiderando la situazione, dal cliente \u00e8 arrivata una domanda sorprendente: <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 n. 0<\/h3>\n<p>\nLa prima idea che mi \u00e8 venuta in mente:<\/p>\n<ul>\n<li>restare nell'ambito di CloudSQL;<\/li>\n<li>non ci sar\u00e0 replicazione integrata tra le regioni in alcuna forma;<\/li>\n<li>cercare di collegare una replica al Cloud SQL esistente by PostgreSQL;<\/li>\n<li>avviare un'istanza di PostgreSQL da qualche parte e in qualche modo, ma toccare almeno il master.<\/li>\n<\/ul>\n<p>\nPurtroppo, si \u00e8 scoperto che non era possibile farlo, poich\u00e9 non c'era accesso all'host (che si trova in un altro progetto) \u2014 pg_hba e cos\u00ec via, e inoltre non c'era accesso come superuser.<\/p>\n<h3>Opzione di soluzione n. 1<\/h3>\n<p>\nDopo alcune nuove riflessioni e tenendo conto delle circostanze precedenti, il pensiero si \u00e8 leggermente adattato:<\/p>\n<ul>\n<li>continuiamo a cercare di restare nell'ambito di CloudSQL, ma passiamo a MySQL, poich\u00e9 Cloud SQL by MySQL ha un master esterno che:<\/li>\n<\/ul>\n<p>\n\u2014 funge da proxy per MySQL esterno;<br \/>\n\u2014 appare come un'istanza di MySQL;<br \/>\n\u2014 \u00e8 stato progettato per la migrazione dei dati da altri cloud o da On-premises.<\/p>\n<p>Poich\u00e9 la configurazione della replicazione MySQL non richiede accesso all'host, in linea di principio funzionava, ma era molto instabile e scomoda. E quando siamo andati oltre, \u00e8 diventato spaventoso, poich\u00e9 stavamo distribuendo l'intera struttura con terraform, e improvvisamente \u00e8 emerso che il master esterno non \u00e8 supportato da terraform. S\u00ec, Google ha un CLI, ma per qualche motivo anche qui funzionava a singhiozzo \u2014 a volte si creava, a volte no. Forse perch\u00e9 il CLI era stato pensato per la migrazione dei dati dall'esterno e non per le repliche.<\/p>\n<p>Di fatto, \u00e8 diventato chiaro che Cloud SQL non andava bene per niente. Come si suol dire, abbiamo fatto tutto ci\u00f2 che potevamo. <\/p>\n<h3>Opzione di soluzione n. 2<\/h3>\n<p>\nDal momento che non siamo riusciti a rimanere nell'ambito di Cloud SQL, abbiamo cercato di formulare i requisiti per una soluzione compromissoria. I requisiti sono stati i seguenti:<\/p>\n<ul>\n<li>lavorare in Kubernetes, massimizzare l'utilizzo 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 derivante dalla regione principale pi\u00f9 una copia (per affidabilit\u00e0);<\/li>\n<li>multi master (non volevamo collegarci a esso, ma non era fondamentale)<\/li>\n<\/ul>\n<p>. <br \/>\nDi conseguenza, con questi requisiti, finalmente \u00e8 apparsa una proposta.<b>opzioni appropriate per DBMS e interfacce<\/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 dall'azienda Codership e consiste in un plugin per InnoDB. Caratteristiche:<\/p>\n<ul>\n<li>multi master;<\/li>\n<li>replica sincrona;<\/li>\n<li>lettura da qualsiasi nodo;<\/li>\n<li>scrittura su qualsiasi nodo;<\/li>\n<li>meccanismo HA integrato;<\/li>\n<li>disponibile un Helm chart da Bitnami.<\/li>\n<\/ul>\n<p><\/p>\n<h3>CockroachDB<\/h3>\n<p>\nDalla descrizione sembra un'ottima soluzione ed \u00e8 un progetto open source scritto in Go. Il principale partecipante \u00e8 Cockroach Labs (fondata da ex membri di Google). Questo DBMS relazionale \u00e8 stato originariamente progettato per essere distribuito (con scalabilit\u00e0 orizzontale \"out of the box\") e resiliente. I suoi autori hanno dichiarato di voler \"combinare la ricchezza delle funzionalit\u00e0 SQL con l'accessibilit\u00e0 orizzontale tipica delle soluzioni NoSQL.\"<\/p>\n<p>Un piacevole vantaggio \u00e8 il supporto al protocollo di connessione PostgreSQL. <\/p>\n<h3>Pgpool<\/h3>\n<p>\n\u00c8 un'estensione per PostgreSQL, in realt\u00e0, una nuova entit\u00e0 che gestisce tutte le connessioni. Ha il proprio bilanciatore di carico e parser, \u00e8 soggetto a licenza BSD. Offre ampie possibilit\u00e0, ma pu\u00f2 sembrare un po' complicato, poich\u00e9 la presenza di una nuova entit\u00e0 potrebbe portare a qualche imprevisto. <\/p>\n<h3>Patroni<\/h3>\n<p>\nQuesto \u00e8 l'ultimo che ha catturato la mia attenzione e, a quanto pare, non a caso. Patroni \u00e8 un'utilit\u00e0 open source che, in sostanza, \u00e8 un demone scritto in Python, che consente la gestione automatica dei cluster PostgreSQL con vari tipi di replica e switch automatico dei ruoli. Si \u00e8 rivelata molto interessante, poich\u00e9 si integra bene con Kubernetes e non introduce nuove entit\u00e0. <\/p>\n<h3>Cosa abbiamo scelto alla fine<\/h3>\n<p>\nLa scelta non \u00e8 stata affatto semplice:<\/p>\n<ol>\n<li><b>CockroachDB <\/b>\u2014 ottima, ma rischiosa;<\/li>\n<li><b>MySQL Galera<\/b> \u2014 anche buona, usata in molti contesti, ma MySQL;<\/li>\n<li><b>Pgpool <\/b>\u2014 molte entit\u00e0 superflue, integrazione scadente con il cloud e K8s;<\/li>\n<li><b>Patroni <\/b>\u2014 eccellente integrazione con K8s, senza entit\u00e0 superflue, 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 giunto il momento di riassumere brevemente. S\u00ec, il mondo dell'infrastruttura IT \u00e8 cambiato sostanzialmente ed \u00e8 solo l'inizio. Se un tempo i cloud erano solo un altro tipo di infrastruttura, ora \u00e8 tutto diverso. Non solo, le innovazioni nei cloud appaiono costantemente e continueranno ad apparire, e forse appariranno solo nei cloud e successivamente, grazie ai startup, verranno trasferite in On-premises.<\/p>\n<p>Per quanto riguarda SQL, SQL continuer\u00e0 a vivere. Ci\u00f2 significa che \u00e8 necessario conoscere PostgreSQL e MySQL e saperci lavorare, ma \u00e8 ancora 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.1.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.1.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 un database SQL nel 21\u00b0 secolo: cloud, Kubernetes e PostgreSQL multimaster | ProHoster","description":"Ciao, utenti 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}]}}