Scalabilità orizzontale e verticale del database

Man mano che l'applicazione cresce, il database può diventare un collo di bottiglia nel sistema senza l'infrastruttura o le modifiche appropriate. Quando il traffico aumenta, i tecnici si trovano spesso di fronte a una scelta difficile: potenziare il server attuale o aggiungerne altri? Questa guida illustra la differenza tra scalabilità orizzontale e verticale, i compromessi di ciascuna e come scegliere l'approccio giusto per le tue esigenze.

Scalabilità e innovazione con i database Google Cloud

Cosa significa scalabilità del database?

La scalabilità del database è il processo di aumento della capacità, delle prestazioni e della disponibilità di un sistema. Consente al database di gestire più dati e di tenere il passo con un numero crescente di utenti.

Nel settore, gli esperti utilizzano due termini principali per questo processo. La scalabilità verticale è "scale up", mentre la scalabilità orizzontale è "scale out". Comprendere questi due percorsi è il primo passo per creare un sistema di dati affidabile.

Che cos'è la scalabilità verticale?

Lo scaling verticale, noto anche come "scaling up", prevede l'aggiunta di maggiore potenza al server esistente. Mantieni lo stesso nodo del database, ma gli fornisci più CPU, memoria o spazio di archiviazione per svolgere il suo lavoro.

Questo è spesso considerato il modo tradizionale per scalare i database relazionali. L'architettura rimane semplice perché tutti i dati si trovano ancora in un unico posto.

Vantaggi e sfide della scalabilità verticale

Vantaggi

  • Semplicità: il codice rimane lo stesso perché il database continua a sembrare una singola macchina per l'applicazione
  • Manutenzione più semplice: devi gestire e aggiornare un solo server
  • Coerenza: non devi preoccuparti di sincronizzare i dati tra più server

Challenges

  • Limiti rigidi: ogni macchina ha una capacità massima. Alla fine, non puoi aggiungere altro hardware a un singolo server
  • Tempi di inattività: spesso è necessario mettere offline il database per un momento per eseguire questi upgrade hardware
  • Single point of failure: se quel server si arresta, l'intera applicazione può arrestarsi con lui

I servizi di database gestiti, come Cloud SQL, possono semplificare la scalabilità verticale consentendoti di modificare le dimensioni della macchina con pochi clic, ma è importante ricordare che potresti comunque raggiungere i limiti dell'hardware fisico.

Esempi e casi d'uso comuni di scalabilità verticale

Piccola scala: immagina una startup in rapida crescita che esegue un'app web su un singolo database. Quando il traffico inizia a salire, possono passare a un'istanza più grande, che a sua volta offre loro una maggiore potenza di calcolo per gestire i visitatori extra senza dover riscrivere il codice dell'applicazione.

Su scala aziendale: una grande azienda con un sistema legacy potrebbe utilizzare anche la scalabilità verticale. Questi sistemi si basano in genere su relazioni complesse tra i dati. Poiché il loro codice è creato per un singolo database, possono fare lo scale up aggiungendo più potenza a quella singola macchina invece di provare a passare a un sistema distribuito.

Esigenze interne: alcune aziende utilizzano la scalabilità verticale anche per i report interni. Potrebbero aggiungere più RAM al server di database principale in modo che possa elaborare query di grandi dimensioni e con un uso intensivo di risorse più velocemente senza rallentare l'esperienza per gli utenti normali.

Che cos'è la scalabilità orizzontale?

La scalabilità orizzontale, o scale out, indica l'aggiunta di più macchine al sistema di database invece di rendere più potente una singola macchina, distribuendo il lavoro su un gruppo di server. È un concetto fondamentale nel cloud computing moderno e nei sistemi distribuiti.

Per farlo, gli ingegneri utilizzano tecniche come lo sharding, in cui i dati vengono suddivisi in blocchi più piccoli su server diversi, e la replica, in cui i dati vengono copiati su più nodi.

Vantaggi e sfide della scalabilità orizzontale

Vantaggi

  • Crescita illimitata: puoi continuare ad aggiungere altre macchine man mano che le tue esigenze aumentano
  • Alta affidabilità: poiché disponi di più server, il sistema rimane online anche se un nodo non funziona
  • Efficienza dei costi: puoi utilizzare hardware standard più economico invece di acquistare un server enorme e costoso

Challenges

  • Complessità: l'applicazione deve sapere come comunicare con più server, il che aggiunge sfide di progettazione
  • Coerenza dei dati: mantenere i dati sincronizzati su molte macchine diverse può essere difficile da gestire
  • Modifiche al codice: potrebbe essere necessario modificare il codice dell'applicazione per gestire un ambiente di database distribuito

Un database SQL distribuito come Spanner può aiutarti a gestire queste sfide. Spanner si occupa del lavoro più difficile di sincronizzazione dei dati su più macchine, così non devi dividere i dati manualmente né rinunciare alla sicurezza di un database relazionale. In questo modo puoi fare lo scale out senza rendere il sistema troppo complesso.

Esempi e casi d'uso comuni della scalabilità orizzontale

Capacità: una piattaforma di e-commerce globale potrebbe utilizzare la scalabilità orizzontale durante i grandi eventi di vendita. Quando milioni di persone visitano il sito contemporaneamente, il sistema può ribilanciare automaticamente i dati tra i nuovi nodi per gestire il traffico, assicurando che nessun server venga sovraccaricato.

Ridondanza: le applicazioni finanziarie mission critical a volte utilizzano anche la scalabilità orizzontale. Possono distribuire il loro database su più posizioni fisiche, note come zone di disponibilità. Questa configurazione aiuta a garantire che, se un data center ha un problema, l'applicazione rimanga attiva, mantenendo la promessa di coerenza dei dati.

Prossimità: una società di giochi globale potrebbe eseguire il deployment di nodi di database in diverse parti del mondo. Posizionando un nodo di database più vicino al giocatore, possono offrire un'esperienza rapida e fluida con un ritardo molto basso. Ad esempio, se un giocatore vive a Tokyo, i dati del suo profilo vengono archiviati su un nodo di database di Tokyo per letture e scritture ultraveloci.

Domande frequenti

Quando si parla di scalabilità del cloud, la scalabilità verticale significa aumentare le dimensioni della macchina virtuale che ospita il database. Lo scaling orizzontale comporta l'aggiunta di più istanze di macchine a un gruppo con scalabilità automatica o a un cluster distribuito.

Alcune aziende utilizzano un mix di entrambi i metodi, chiamato scalabilità diagonale. In questo approccio, aggiungi più nodi al tuo sistema (scalabilità orizzontale) e aggiorni la capacità hardware (scalabilità verticale). Le grandi aziende possono utilizzare questa soluzione per ottenere il meglio da entrambi i mondi, garantendo che il loro database sia sia altamente disponibile sia sufficientemente potente per attività locali complesse.

Sì. Sebbene tradizionalmente fosse difficile, i moderni database SQL distribuiti come Spanner utilizzano la sincronizzazione avanzata dell'orologio e protocolli intelligenti per consentire la scalabilità orizzontale mantenendo i dati organizzati e accurati.

Presta attenzione a segnali di avviso come un utilizzo elevato della CPU o della memoria utilizzata, tempi di query lenti e un aumento del ritardo per gli utenti durante le ore di punta. Questi sono tutti segnali che il tuo attuale database potrebbe avere difficoltà a tenere il passo.

Differenze principali tra scalabilità orizzontale e verticale

La differenza principale tra lo scaling orizzontale e verticale è il modo in cui aggiungono risorse al tuo sistema. Lo scaling verticale aumenta la potenza di una macchina, mentre lo scaling orizzontale aggiunge più macchine alla rete.

Funzionalità

Scalabilità verticale

Scalabilità orizzontale

Concetto

Aggiungi risorse a una macchina

Aggiungi altre macchine alla rete

Capacità

Limiti hardware rigidi

Praticamente illimitato

Tempo di inattività

In genere richiede tempi di inattività

Nessun tempo di inattività (i nodi vengono aggiunti dinamicamente)

complessità

Inferiore (architettura semplice)

Più elevata (richiede una logica distribuita)

Costo

Costi più elevati per hardware di grandi dimensioni


Scalabilità lineare con macchine standard

Funzionalità

Scalabilità verticale

Scalabilità orizzontale

Concetto

Aggiungi risorse a una macchina

Aggiungi altre macchine alla rete

Capacità

Limiti hardware rigidi

Praticamente illimitato

Tempo di inattività

In genere richiede tempi di inattività

Nessun tempo di inattività (i nodi vengono aggiunti dinamicamente)

complessità

Inferiore (architettura semplice)

Più elevata (richiede una logica distribuita)

Costo

Costi più elevati per hardware di grandi dimensioni


Scalabilità lineare con macchine standard

SQL e NoSQL a confronto: sfatiamo i miti

Esistono diverse idee obsolete sui database SQL e NoSQL che ancora permeano il settore. Gran parte della difficoltà di scalare i database SQL tradizionali si è concentrata sul modo in cui gestiscono i join e la coerenza dei dati. La distribuzione di un database relazionale su molti server può essere una sfida tecnica, ma le moderne soluzioni distribuite hanno risolto molti di questi problemi, consentendo agli sviluppatori di scalare SQL orizzontalmente senza perdere le funzionalità relazionali di cui hanno bisogno. Ecco tre idee sbagliate comuni e le verità che si nascondono dietro di esse:

La verità: Possono farlo. Mentre i progetti relazionali più vecchi favorivano lo scaling verticale, i moderni sistemi SQL distribuiti consentono ai database relazionali di estendersi su più macchine. Questo approccio combina la coerenza di SQL con la potenza di crescita orizzontale della moderna architettura cloud.

Verità: NoSQL è efficace per set di dati enormi e non strutturati, ma i database SQL sono spesso migliori per query complesse e strutturate. In molti casi, un database SQL ben ottimizzato supera NoSQL se l'applicazione si basa su relazioni profonde tra i punti dati.

La verità: non devi scegliere. I moderni pattern di architettura consentono di scalare il sistema su più macchine mantenendo regole rigide per la sicurezza dei dati, note come conformità ACID, in tutto il cluster.

Scegliere l'approccio di scalabilità giusto

Quando decidi come scalare il tuo database, la scelta dipende spesso dal tuo budget, dalla quantità di dati che hai e dal tempo di attività di cui hai bisogno. Il consiglio tipico è il seguente:

  • Se hai una quantità di traffico prevedibile e moderata, è più facile iniziare con la scalabilità verticale perché è più semplice e veloce da configurare.
  • Se stai creando un'applicazione su scala globale o hai bisogno di un tempo di attività costante, ti consigliamo di pianificare la scalabilità orizzontale fin dall'inizio. Richiede più lavoro di progettazione, ma può evitarti grossi mal di testa in seguito.

Fai il prossimo passo

Inizia a creare su Google Cloud con 300 $ di crediti gratuiti e oltre 20 prodotti Always Free.

Google Cloud