AWS è una piattaforma cloud estremamente popolare e affidabile per la gestione delle distribuzioni MongoDB, ma la questione di XFS vs EXT4 ha molti sviluppatori che si chiedono quale file system Linux darà loro le migliori prestazioni per le loro applicazioni. La guida ufficiale di MongoDB sulla distribuzione in produzione consiglia di utilizzare il file system XFS su Linux, in particolare durante la distribuzione del motore di archiviazione WiredTiger. La raccomandazione, tuttavia, non ci dice perché dovremmo aspettarci un aumento delle prestazioni o quale tipo di aumento delle prestazioni sperimenteremo. Abbiamo deciso di andare fino in fondo esaminando quantitativamente le prestazioni di MongoDB su XFS in modo da poter confrontare se EXT4 è una scelta migliore per le tue istanze AWS EC2.
File system XFS
XFS è un file system di journaling a 64 bit altamente scalabile e ad alte prestazioni sviluppato presso SGI nel 1993 e portato su Linux nel 2002. Supporta I/O altamente paralleli e dimensioni del file system fino a 9 Exabyte e registra solo i metadati del file system, non i dati dell'utente. Alcune funzionalità chiave per il miglioramento delle prestazioni di XFS sono:
- L'accesso in parallelo tramite gruppi di allocazione garantisce che più thread possano eseguire I/O contemporaneamente sullo stesso volume.
- L'allocazione basata sull'estensione riduce la frammentazione e le dimensioni dei metadati e migliora le prestazioni di I/O consentendo operazioni di I/O inferiori e maggiori.
- L'allocazione ritardata migliora la contiguità e le prestazioni dei dati. La frammentazione viene ridotta combinando le scritture e l'allocazione delle estensioni in blocchi di grandi dimensioni e i file scritti in modo casuale (come quelli mappati in memoria) possono essere allocati in modo contiguo
Ci sono molte altre funzionalità di XFS da esplorare e puoi saperne di più sul sito web di XFS e sulla Guida per l'utente di XFS.
Esecuzione di test delle prestazioni su MongoDB
Come avrai appreso nei nostri post precedenti, abbiamo utilizzato YCSB per confrontare le prestazioni di MongoDB, incluso un confronto dettagliato delle prestazioni di MongoDB supportate da MMAP tra vari provider di servizi cloud. Abbiamo deciso di utilizzare lo stesso carico di lavoro di YCSB utilizzato in precedenza:carico di lavoro A (aggiornamento pesante:50% letture + 50% aggiornamenti). La fase di inserimento del carico di lavoro misura le prestazioni del 100% dei carichi di lavoro di scrittura, mentre la fase di caricamento misurerà le prestazioni rispetto al carico di lavoro effettivo (50/50% di lettura/aggiornamento).
I nostri test sono stati eseguiti sul driver di sincronizzazione MongoDB e la distribuzione Linux era Amazon Linux (4.4.44-39.55.amzn1.x86_64). Abbiamo preso MongoDB versione 3.2.10 con WiredTiger per i nostri test poiché WT è il luogo in cui ci si aspettava guadagni migliori ed abbiamo eseguito i test su 2 diversi rig hardware:
- Dischi ad alta velocità :istanza AWS EC2 c3.large in cui MongoDB utilizzava dischi SSD nella configurazione RAID 0 per l'archiviazione (associata alla dimensione del cluster ScaleGrid HighPerfLarge).
- Dischi a media velocità :istanza AWS EC2 m3.medium in cui MongoDB utilizzava il disco con provisioning IOPS EBS (Elastic Block Store) impostato su 300 IOPS (esegui il mapping a dimensioni del cluster ScaleGrid medie).
Nota:qualsiasi tipo di test delle prestazioni in ambienti virtualizzati dovrebbe essere preso con le pinze. Il nostro obiettivo qui non è confrontare i numeri delle prestazioni su questi ambienti, ma fornire una misurazione quantitativa delle differenze di prestazioni tra EXT4 e XFS nello stesso ambiente virtualizzato.
Disco SSD ad alta velocità
Abbiamo eseguito il seguente test sul nostro rig ad alte prestazioni:
- Inseriti 6 milioni record a vari carichi del server (variando il numero di thread client YCSB).
- Carico di lavoro eseguito al numero di operazioni di 10 milioni record a vari carichi del server.
Risultati delle prestazioni del disco SSD
Caratteristiche di throughput/latenza per l'inserimento di record 6M sulla configurazione ad alte prestazioni:
Caratteristiche di throughput/latenza per 10 milioni di operazioni di scrittura/aggiornamento sulla configurazione ad alte prestazioni:
Osservazioni del disco SSD
- XFS è straordinariamente veloce sia durante la fase di inserimento che durante l'esecuzione del carico di lavoro. Con un numero di thread inferiore, è fino al 50% più veloce di EXT4. Con l'aumento del carico, entrambi i filesystem sono stati limitati dal throughput dell'hardware sottostante, ma XFS ha comunque mantenuto il suo vantaggio.
- La latenza sia per XFS che per EXT4 era comparabile in entrambe le esecuzioni. Nota che tutti i numeri sono in micro secondi.
Disco IOPS con provisioning EBS più lento (300 IOPS)
Il seguente test è stato eseguito sul nostro rig ad alte prestazioni di medie dimensioni:
- Inseriti 3 milioni record a vari carichi del server (variando il numero di thread client YCSB).
- Carico di lavoro eseguito a conteggio operazioni di 5 milioni record a vari carichi del server.
Data la nostra esperienza sulla configurazione di fascia alta, ci aspettavamo che XFS avesse un vantaggio decente anche in questo rig.
Risultati delle prestazioni del disco IOPS
Caratteristiche di throughput/latenza per l'inserimento di record 3M sulla configurazione del supporto:
Caratteristiche di throughput/latenza per 5M di operazioni di scrittura/aggiornamento sulla configurazione media:
Osservazioni del disco IOPS
- XFS è paragonabile, anche se leggermente indietro rispetto a EXT4 nella configurazione di medie dimensioni. Sembra che a questo livello di risorse di sistema, le ottimizzazioni delle prestazioni di XFS non facciano davvero la differenza. Questa è un'osservazione importante se stai pensando di distribuire XFS su istanze più piccole nella speranza di migliorare le prestazioni.
XFS vs EXT4 su AWS EC2
In termini di prestazioni, XFS è davvero un moltiplicatore di forza se abbinato a dischi ad alta velocità da cui può trarre vantaggio reale. Per i sistemi di fascia medio-bassa, non sembra essere in grado di fare molto per migliorare le tue prestazioni.