I cluster sharded MongoDB forniscono un metodo potente per ridimensionamento orizzontalmente di dati di grandi dimensioni distribuendo dati su più server o frammenti, consentendo a un database di gestire un throughput elevato e grandi quantità di dati in modo efficiente.
Un cluster sharded MongoDB è costituito principalmente da tre componenti principali: frammenti, server di configurazione e router Mongos. Ogni frammento è un set di replica contenente un sottoinsieme dei dati del cluster. I set di repliche garantiscono la ridondanza dei dati e l'alta disponibilità per i dati su ciascun frammento. I server di configurazione archivia i metadati e i dettagli di configurazione sul cluster, incluso la mappatura dei blocchi di dati in frammenti. Mongos funge da servizio di routing che si interfaccia con le applicazioni del client e dirige le domande sui frammenti appropriati in base alla chiave di shard.
Sharding in MongoDB è progettato per consentire il ridimensionamento orizzontale partizionando i dati attraverso i frammenti tramite un tasto di frammento scelto. Questo partizionamento crea blocchi di dati distribuiti uniformemente tra i frammenti, consentendo a MongoDB di diffondere il carico di letture e scritture. Le query che includono la chiave di frammento o i prefissi di una chiave di shard composta possono essere instradate in modo efficiente dai mongos a frammenti specifici, riducendo le richieste di query e migliorando le prestazioni. Se una query non include la chiave di frammento, i mongo possono trasmettere la query a tutti i frammenti, il che è meno efficiente.
I frammenti in un cluster sono scalabili; Framme aggiuntivi possono essere aggiunti dinamicamente per accogliere la crescita del volume dei dati o del carico di query senza tempi di inattività. Ogni frammento è un set di replica per garantire la tolleranza ai guasti e il design complessivo del cluster supporta un'alta disponibilità. MongoDB bilancia automaticamente i dati attraverso i frammenti, ridistribuendo i blocchi dei dati necessari per mantenere un carico uniforme tra i frammenti.
I server di configurazione svolgono un ruolo fondamentale nella gestione dei metadati del cluster, archiviando informazioni sulla struttura del cluster e sulla distribuzione dei dati. I server di configurazione devono essere distribuiti come set di replica per alta disponibilità. Si sincronizzano con i router Mongos, che memorizzano i metadati a livello locale per instradare le query in modo efficiente. Lo stato coerente dei metadati nei server di configurazione è essenziale per il corretto funzionamento di un cluster frastagliato.
Le istanze di Mongos agiscono come router di query che forniscono il livello di interfaccia tra applicazioni client e cluster frastagliato. Estraggono la complessità dell'ambiente frammento di routing delle operazioni ai frammenti corretti in base ai metadati dai server di configurazione. Più istanze di mongo possono essere distribuite per il bilanciamento del carico e l'alta disponibilità e devono essere posizionate vicino ai server dell'applicazione per ridurre la latenza di rete.
Un aspetto cruciale dei cluster sharded è la scelta di Shard Key. La chiave shard regola come i dati sono partizionati, influenzando direttamente le prestazioni del cluster e la distribuzione dei dati. La selezione di una chiave di shard appropriata richiede l'analisi del carico di lavoro per garantire una distribuzione uniforme delle operazioni di lettura e scrittura attraverso i frammenti. Una volta creata una raccolta frammento con una chiave di frammento specifica, la modifica della chiave di frammento è complessa e in genere comporta un processo di migrazione dei dati che richiede tempo. Pertanto, è importante una selezione di tasti di frammenti attenti in anticipo.
Negli ambienti di produzione, le buone pratiche per i cluster framulati includono la distribuzione di server di configurazione e frammenti come set di replica su più data center per garantire la tolleranza ai guasti e l'alta disponibilità. Si consiglia ogni frammento come un set di replica a tre nodi. I cluster richiedono almeno due frammenti, sebbene i cluster frammenti singoli possano essere usati se in futuro è previsto frammento.
Lo sharding migliora la capacità del database aumentando i limiti di archiviazione attraverso l'archiviazione dei dati distribuiti attraverso i frammenti. Migliora anche le prestazioni distribuendo letture e le scritture, il che consente di gestire carichi di lavoro di throughput più elevati. Inoltre, un cluster frammento può mantenere una disponibilità parziale durante le interruzioni di frammenti; Mentre i dati sui frammenti interessati possono essere inaccessibili, il cluster continua a servire le richieste sui frammenti disponibili.
In un cluster sharded, i dati sono divisi in blocchi all'interno dell'intervallo definito dalla chiave di frammento. MongoDB configura le dimensioni di chunk che influenzano il modo in cui i dati sono divisi ed bilanciati tra i frammenti. Le migrazioni di blocchi e i processi di riequilibrio sono gestiti automaticamente dal cluster per mantenere la distribuzione uniforme dei dati e le prestazioni ottimali. Questo bilanciamento automatico garantisce che nessun singolo frammento diventi un collo di bottiglia per prestazioni o un hotspot di stoccaggio.
I cluster sharded supportano anche le zone (sharding consapevoli dei tag), consentendo di raggruppare i dati e limitati a frammenti specifici in base alle associazioni di zone. Questa funzione consente una località di dati più controllata ed è utile per la conformità o i requisiti di distribuzione geografica. Alle zone sono assegnate gamme di valori chiave del frammento e associate ai frammenti per controllare il posizionamento dei dati in modo più granulare.
Le limitazioni e le considerazioni operative includono la complessità della gestione di più frammenti e un aumento delle spese generali operative. La latenza di rete tra i componenti e il sovraccarico del mantenimento dei metadati e del routing del server di configurazione può influire sulle prestazioni se non gestite correttamente. Distribuire più router Mongos e server di configurazione e monitorare la loro salute è essenziale per evitare il degrado delle prestazioni. Il numero di istanze di Mongos dovrebbe essere bilanciato poiché un'eccessiva istanza di Mongos può portare a una comunicazione frequente con server di configurazione e un possibile impatto sulle prestazioni del cluster.
Alcuni limiti si applicano nelle versioni ospitate o gestite di cluster sharded MongoDB come Azure Cosmos DB per l'API MongoDB, inclusi conteggi di frammenti, archiviazione e limiti di risorse per frammento o cluster. Questi limiti specifici della piattaforma variano e possono essere più elevati con livelli premium.
Nel complesso, i cluster framulati di MongoDB forniscono una solida base per ridimensionare le moderne applicazioni con set di dati di grandi dimensioni distribuendo dati e operazioni in modo trasparente su più nodi, garantendo prestazioni, tolleranza ai guasti e scalabilità attraverso la partizionamento dei dati intelligenti e la distribuzione del set di replica.