Abbiamo già parlato di come MaxScale ci permetta di avere database ad alte prestazioni e costruire delle architetture flessibili. Adesso entreremo nel dettaglio sulle caratteristiche e funzionalità di questo proxy per database.
Un proxy è un server che fa da intermediario in una connessione: riceve le richieste da un client e le reindirizza verso altri server che sono i destinatari delle richieste. In altre parole un proxy è un mezzo per deviare una connessione tra due computer in modo da non collegarli direttamente. Un proxy funziona come un centralinista: riceve la chiamata da chi vuole telefonare e la gira all’interno desiderato.
MaxScale si può inserire in modo trasparente tra l’applicativo e il server MySQL, esattamente come fa un proxy web tra il nostro browser (es. Firefox) e il sito che stiamo cercando di visitare.
Grazie ad un proxy è possibile avere:
- Ridondanza: usando più di un database dietro al proxy. Un solo server non fornisce l’affidabilità e l’alta disponibilità in caso di down di una macchina.
- Diminuzione dei costi di infrastruttura: perché generalmente due server piccoli sono meno costosi che un unico server molto performante.
Vedremo due tipi di database proxy server:
- I proxy di livello trasporto come HAProxy
- I proxy di livello applicativo come MaxScale
HAProxy: un proxy efficiente, rapido e funzionale
Fino ad oggi il proxy più usato in ambito MySQL è l’HAProxy che lavora ad un livello più basso (livello 4: trasporto). HAproxy non conosce nulla di MySQL e si occupa solo di bilanciare le connessioni tra più server. E’ molto veloce, leggero ed efficente, tuttavia questo bilanciamento è fatto senza conoscere cosa sta smistando. Questo rende il sistema meno efficente poiché un server può ricevere molte richieste pesanti, mentre altri server possono essere scarichi. Quindi l’HAProxy non è la scelta vincente in tutti i casi.
MaxScale: un proxy che può fare cose incredibili
MaxScale lavora a livello più alto (livello 7: applicativo), monitorando i server riesce a capire cosa sta succedendo all’interno dell’infrastruttura. Conoscendo il protocollo MySQL può intervenire manipolando il traffico tra client e server. Ecco alcune delle sue principali funzionalità:
- Filtro delle query al database
- Gestione del routing: instradamento delle richieste a uno o più database server
- Modifica delle query al volo prima che raggiungano il database
- Possibilità di nascondere la struttura interna dell’infrastruttura lasciando un singolo punto d’accesso.
- Alta affidabilità e scalabilità del sistema
- Possibilità di spostare un database dal server locale ad un server esterno senza modificare la configurazione delle applicazioni
- Divide automaticamente le scritture sul server MASTER e le letture su uno o più database SLAVE.
MaxScale può fornire un Load Balacing delle connessioni senza bisogno di utilizzare applicazioni o CMS che prevedano questa funzionalità. Questo significa che CMS come Joomla! o WordPress possono trarre i benefici usando una replicazione Master/Slave per rendere scalabile il proprio sito.
Caratteristiche di MaxScale
Il punto di forza di MaxScale è sicuramente la sua modularità che permette una notevole libertà adattandosi a molti casi d’uso. MaxScale è:
- Modulare: un sistema di moduli ne definisce le funzionalità
- Estendibile: è possibile applicare più filtri anche in cascata
- Flessibile: i moduli e i filtri possono essere aggiunti dinamicamente
I moduli base di MaxScale
Di seguito i 5 moduli che costituiscono il cuore di MaxScale:
- Protocol: da la possibilità di utilizzare più protocolli es. MySQL client, http, telnet
- Authentication: il sistema di autenticazione permette ai client di accedere a MaxScale usando le credenziali presenti sui server di Backend
- Monitor: legge la configurazione dello stato del sistema direttamente dai server di backend
- Router: smista le connessioni a uno o più database di backend
- Filter e logging: i filtri permettono di modificare le query oppure di scrivere un file di log con tutte le richieste e le risposte ricevute.
1. Protocollo di connessione
I client si connettono a MaxScale anziché al database MySQL senza accorgersi della differenza. Possono usare le stesse librerie di connessione utilizzate fino ad ora: es. MySQL client o MariaDB client.
2. Autenticazione
MaxScale non ha un sistema di autenticazione o un database di utenti. Vengono utilizzati gli stessi utenti presenti sui database di backend, caricati all’avvio dell’applicazione.
3. Monitor
Viene utilizzato per capire in ogni momento lo stato di tutti i database di backend collegati a MaxScale. In questo modo è possibile sapere qual’è il server Master e quanti Slave stanno replicando correttamentei dati. Il monitor può essere utilizzato per controllare un Galera Cluster.
4. Router
Dirige il traffico dal client ai server utilizzando una regola specifica:
- Connection routing: normale router di connessione ad un database
- Read/Write Split router: smista le richieste di scrittura sul MASTER e le richieste di lettura su uno degli SLAVE collegati
5. Filtri e log delle query
Tra i più potenti strumenti messi a disposizione di MaxScale ci sono sicuramente i filtri che permettono di effettuare operazioni avanzate sulle query senza modificare il comportamento dell’applicazione:
- Processando query SQL e risultati
- Utilizzando una semplice regex
- Analizzando, modificando o rifiutando le query
- Mettendo più filtri in cascata
Quando usare MaxScale
Durante il nostro test per MariaDB abbiamo capito che questo prodotto ci può aiutare a far scalare la nostra piattaforma di Joomla Cloud Hosting, mantenendo la retrocompatiblità con tutte le versioni di Joomla! e utilizzare allo stesso tempo i database server più aggiornati. Da qualche settimana è stata rilasciata la versione 1.0.4-stable. Nonostante il progetto sia ancora giovane, lo consiglierei a tutti quelli che hanno un sito molto grande e vogliono avere la possibilità di far scalare le performance del database senza modificare il codice del CMS.
Nel prossimo articolo vedremo come abbiamo creato un ambiente di sviluppo utilizzando Docker e Vagrant.
Se stai utilizzando MaxScale per uno dei tuoi progetti lascia un commento per condividere con noi questa esperienza.