node - progettazione database nosql




Differenza tra il ridimensionamento orizzontale e verticale per i database (7)

C'è un'architettura aggiuntiva che non è stata menzionata: servizi di database basati su SQL che abilitano il ridimensionamento orizzontale senza la complessità dello sharding manuale. Questi servizi fanno lo sharding in background, quindi ti permettono di eseguire un database SQL tradizionale e scalare come faresti con motori NoSQL come MongoDB o CouchDB. Due servizi con cui ho familiarità sono EnterpriseDB per PostgreSQL e Xeround per MySQL. Ho visto un post approfondito di Xeround che spiega perché la scalabilità su database SQL è difficile e in che modo lo fanno in modo diverso: trattatelo con un pizzico di sale in quanto è un post di venditore. Controlla anche la voce del Database Cloud di Wikipedia, c'è una bella spiegazione di SQL vs. NoSQL e servizio vs hosted self-service, un elenco di fornitori e opzioni di ridimensionamento per ciascuna combinazione. ;)

Ho incontrato molti database NoSQL e database SQL. Ci sono vari parametri per misurare la forza e la debolezza di questi database e la scalabilità è uno di questi. Qual è la differenza tra ridimensionamento orizzontale e verticale di questi database?


Database SQL come Oracle, db2 supportano anche il ridimensionamento orizzontale attraverso il cluster di dischi condivisi. Ad esempio Oracle RAC, IBM DB2 purescale o Sybase ASE Cluster edition. È possibile aggiungere un nuovo nodo al sistema Oracle RAC o al sistema DB6 purescale per ottenere il ridimensionamento orizzontale.

Ma l'approccio è diverso dai database noSQL (come mongodb, CouchDB o IBM Cloudant) è che la suddivisione dei dati non fa parte del ridimensionamento orizzontale. Nei database noSQL i dati vengono shradati durante il ridimensionamento orizzontale.


In parole semplici

ridimensionamento orizzontale ===> Tutte le migliaia di minion insieme fanno il lavoro per te

ridimensionamento verticale ===> Un grande hulk farà tutto il lavoro o tu.


Iniziamo con la necessità di ridimensionare che aumenta le risorse in modo che il tuo sistema possa ora gestire più richieste di quelle che poteva fare prima.

Quando ti rendi conto che il tuo sistema sta rallentando e non è in grado di gestire il numero corrente di richieste, devi ridimensionare il sistema.

Questo ti fornisce due opzioni, o aumenti le risorse nel server che stai usando attualmente, cioè aumenti la quantità di ram, cpu, gpu e altre risorse. Questo è noto come ridimensionamento verticale.

Il ridimensionamento verticale è in genere costoso. Non rende il sistema tollerante ai guasti, cioè se si sta eseguendo il ridimensionamento dell'applicazione in esecuzione con un singolo server, se il server non funziona, il sistema si arresterà. Anche la quantità di fili rimane la stessa nel ridimensionamento verticale. Il ridimensionamento verticale potrebbe richiedere che il sistema scenda per un momento quando il processo ha luogo. Aumentare le risorse su un server richiede un riavvio e abbassa il sistema.

Un'altra soluzione a questo problema è l'aumento della quantità di server presenti nel sistema. Questa soluzione è molto utilizzata nel settore tecnologico. Questo alla fine diminuirà la richiesta al secondo della velocità in ogni server. Se hai bisogno di ridimensionare il sistema, aggiungi un altro server e il gioco è fatto. Non ti sarà richiesto di riavviare il sistema. Il numero di thread in ciascun sistema diminuisce portando a un throughput elevato. Per separare le richieste, ugualmente a ciascun server delle applicazioni, è necessario aggiungere un servizio di bilanciamento del carico che funga da proxy inverso per i server Web. L'intero sistema può essere chiamato come un singolo cluster. Il tuo sistema potrebbe contenere un gran numero di richieste che richiederebbero più quantità di cluster come questo.

Spero che tu abbia l'intero concetto di introdurre il ridimensionamento del sistema


La scalabilità orizzontale è la capacità di aumentare la capacità collegando più entità hardware o software in modo che funzionino come una singola unità logica.

Quando i server sono raggruppati, il server originale viene ridimensionato orizzontalmente. Se un cluster richiede più risorse per migliorare le prestazioni e fornire alta disponibilità (HA), un amministratore può scalare aggiungendo più server al cluster.

Un importante vantaggio della scalabilità orizzontale è che può fornire agli amministratori la possibilità di aumentare la capacità al volo. Un altro vantaggio è che, in teoria, la scalabilità orizzontale è limitata dal numero di entità che possono essere collegate correttamente. Il sistema di archiviazione distribuito Cassandra, ad esempio, funziona su centinaia di nodi merceologici distribuiti su diversi data center. Poiché l'hardware di base viene ridimensionato orizzontalmente, Cassandra è tollerante ai guasti e non ha un singolo punto di errore (SPoF).

La scalabilità verticale, d'altra parte, aumenta la capacità aggiungendo più risorse, ad esempio più memoria o una CPU aggiuntiva, a una macchina. Il ridimensionamento verticale, chiamato anche ridimensionamento, richiede in genere tempi di inattività durante l'aggiunta di nuove risorse e limiti definiti dall'hardware. Ad esempio, quando i clienti Amazon RDS devono scalare verticalmente, possono passare da una macchina più piccola a una più grande, ma l'istanza RDS più grande di Amazon ha solo 68 GB di memoria.

Il ridimensionamento orizzontale ha sia vantaggi che svantaggi. Ad esempio, l'aggiunta di computer a basso costo a un cluster potrebbe sembrare una soluzione economica a prima vista, ma è importante che l'amministratore sappia se i costi di licenza per questi server aggiuntivi, i costi addizionali delle operazioni di alimentazione e raffreddamento e il grande ingombro che occuperanno nel data center rende veramente scalabile orizzontalmente una scelta migliore rispetto al ridimensionamento verticale.


Sì scalare orizzontalmente significa aggiungere più macchine, ma implica anche che le macchine siano uguali nel cluster. MySQL può scalare orizzontalmente in termini di lettura dei dati, attraverso l'uso di repliche, ma una volta raggiunta la capacità del mem / disk del server, è necessario iniziare a condividere i dati tra i server. Questo diventa sempre più complesso. Spesso mantenere i dati coerenti tra le repliche è un problema poiché i tassi di replica sono spesso troppo lenti per tenere il passo con i tassi di variazione dei dati.

Couchbase è anche un fantastico database di scalatura orizzontale NoSQL, utilizzato in molte applicazioni e giochi ad alta disponibilità commerciale e probabilmente il più performante nella categoria. Divide i dati automaticamente tra i cluster, aggiungendo i nodi è semplice, ed è possibile utilizzare l'hardware di base, le istanze meno costose di VM (utilizzando, ad esempio, le macchine Large invece di High Mem, High Disk). È costruito fuori dalla Membase (Memcached) ma aggiunge persistenza. Inoltre, nel caso di Couchbase, ogni nodo può eseguire operazioni di lettura e scrittura e sono uguali nel cluster, con la sola replica di failover (non la replica completa del set di dati su tutti i server come in mySQL).

Per quanto riguarda le prestazioni, puoi vedere un eccellente benchmark Cisco: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

Ecco un ottimo post sul blog su Couchbase Architecture: http://horicky.blogspot.com/2012/07/couchbase-architecture.html


Il ridimensionamento orizzontale significa ridimensionare aggiungendo più macchine nel pool di risorse, mentre il ridimensionamento verticale significa ridimensionare aggiungendo più potenza (CPU, RAM) a una macchina esistente .

Un modo semplice per ricordare questo è pensare a una macchina su un server rack, aggiungiamo più macchine attraverso la direzione orizzontale e aggiungiamo più risorse a una macchina nella direzione verticale .

In un database, il ridimensionamento orizzontale del mondo è spesso basato sul partizionamento dei dati, ovvero ogni nodo contiene solo una parte dei dati, in scala verticale i dati risiedono su un singolo nodo e lo scaling viene eseguito attraverso il multi-core, ovvero ripartendo il carico tra le risorse CPU e RAM di quella macchina.

Con il ridimensionamento orizzontale è spesso più facile scalare in modo dinamico aggiungendo più macchine nel pool esistente. Il ridimensionamento verticale è spesso limitato alla capacità di una singola macchina, il ridimensionamento oltre la capacità comporta spesso tempi di inattività e viene fornito con un limite superiore.

Buoni esempi di ridimensionamento orizzontale sono Cassandra, MongoDB, Google Cloud Spanner .. e un buon esempio di ridimensionamento verticale è MySQL - Amazon RDS (La versione cloud di MySQL). Fornisce un modo semplice per scalare verticalmente passando da macchine piccole a macchine più grandi. Questo processo spesso comporta tempi di inattività.

Le griglie dati in memoria come GigaSpaces XAP , Coherence ecc. Sono spesso ottimizzate per il ridimensionamento orizzontale e verticale semplicemente perché non sono legate al disco. Ridimensionamento orizzontale tramite partizionamento e ridimensionamento verticale tramite supporto multi-core.

Puoi leggere di più su questo argomento nei miei post precedenti: Scale-out vs Scale-up e The Common Principles dietro le alternative NOSQL







scalability