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.
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.
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
Challenges
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.
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.
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
Challenges
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.
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.
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.
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
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.
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:
Google Cloud offre una gamma di strumenti di database che si adattano alla tua strategia di scalabilità. Che tu abbia bisogno della semplicità dello scale up o della potenza ad alta capacità dello scale out, questi prodotti possono aiutarti.


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