sql >> Database >  >> NoSQL >> MongoDB

XFS vs EXT4 – MongoDB-prestaties vergelijken op AWS EC2

AWS is een extreem populair en vertrouwd cloudplatform voor het beheren van MongoDB-implementaties, maar de kwestie van XFS versus EXT4 zorgt ervoor dat veel ontwikkelaars zich afvragen welk Linux-bestandssysteem hen de beste prestaties voor hun applicaties zal geven. De officiële gids van MongoDB over implementatie naar productie beveelt het gebruik van het XFS-bestandssysteem op Linux aan, vooral bij het implementeren van de WiredTiger-opslagengine. De aanbeveling vertelt ons echter niet waarom we een prestatieverbetering zouden moeten verwachten of wat voor soort prestatieverbetering we zullen ervaren. We hebben besloten dit tot op de bodem uit te zoeken door de MongoDB-prestaties op XFS kwantitatief te onderzoeken, zodat u kunt vergelijken of EXT4 een betere keuze is voor uw AWS EC2-instanties.

XFS-bestandssysteem

XFS is een zeer schaalbaar, krachtig 64-bits journaalbestandssysteem ontwikkeld door SGI in 1993 en geport naar Linux in 2002. Het ondersteunt zeer parallelle I/O- en bestandssysteemgrootten tot 9 Exabytes, en registreert alleen de metadata van het bestandssysteem, niet de gebruikersgegevens. Enkele belangrijke prestatieverhogende functies van XFS zijn:

    • Parallelle toegang via toewijzingsgroepen zorgt ervoor dat meerdere threads tegelijkertijd I/O kunnen uitvoeren op hetzelfde volume.
    • Toewijzing op basis van omvang vermindert fragmentatie, metadatagrootte en verbetert de I/O-prestaties door minder en grotere I/O-bewerkingen toe te staan.
    • Vertraagde toewijzing verbetert de contiguïteit en prestaties van gegevens. Fragmentatie wordt verminderd door schrijfbewerkingen te combineren en begrenzingen in grote delen toe te wijzen, en willekeurig geschreven bestanden (zoals bestanden die in het geheugen zijn toegewezen) kunnen aaneengesloten worden toegewezen

Er zijn nog veel meer XFS-functies om te ontdekken, en u kunt meer informatie vinden op de XFS-website en de XFS-gebruikershandleiding.

Prestatietests uitvoeren op MongoDB

Zoals je misschien in onze vorige berichten hebt geleerd, hebben we YCSB gebruikt om de MongoDB-prestaties te benchmarken, inclusief een gedetailleerde vergelijking van door MMAP ondersteunde MongoDB-prestaties van verschillende cloudproviders. We hebben besloten om dezelfde workload van YCSB te gebruiken die we eerder gebruikten:Workload A (zware update:50% leest + 50% updates). De invoegfase van de werkbelasting meet de prestaties van 100% schrijfwerkbelastingen, terwijl de laadfase de prestaties meet ten opzichte van de werkelijke werkbelasting (50/50% lezen/bijwerken).

Onze tests werden uitgevoerd op het gesynchroniseerde MongoDB-stuurprogramma en de Linux-distro was Amazon Linux (4.4.44-39.55.amzn1.x86_64). We hebben MongoDB-versie 3.2.10 met WiredTiger opgehaald voor onze tests, aangezien WT betere winsten verwachtte en de tests op 2 verschillende hardware-installaties hebben uitgevoerd:

  • Hoge snelheid schijven :AWS EC2 c3.large-instantie waarbij MongoDB SSD-schijven in RAID 0-configuratie gebruikte voor opslag (verwijst naar ScaleGrid-clustergrootte HighPerfLarge).
  • Schijven met gemiddelde snelheid :AWS EC2 m3.medium-instantie waarbij MongoDB gebruikmaakte van EBS (Elastic Block Store) IOPS-geprovisioneerde schijf ingesteld op 300 IOPS (toegewezen aan ScaleGrid-clustergrootte Medium).

Opmerking:elke vorm van prestatietests in gevirtualiseerde omgevingen moet met een korreltje zout worden genomen. Ons doel is hier niet om prestatiecijfers in deze omgevingen te benchmarken, maar om een ​​kwantitatieve meting te geven van prestatieverschillen tussen EXT4 en XFS in dezelfde gevirtualiseerde omgeving.

Hoge snelheid SSD-schijf

We hebben de volgende test uitgevoerd op onze krachtige rig:

  1. 6 miljoen ingevoegd records bij verschillende serverbelastingen (door het aantal YCSB-clientthreads te variëren).
  2. Werklast uitgevoerd bij bewerkingen van 10 miljoen records bij verschillende serverbelastingen.

SSD-schijfprestatieresultaten

Doorvoer-/latentiekenmerken voor het invoegen van 6M-records op de hoogwaardige configuratie:

Doorvoer-/latentiekenmerken voor 10M schrijf-/updatebewerkingen op de high-performance configuratie:

SSD-schijfwaarnemingen

  • XFS is spectaculair snel tijdens zowel de invoegfase als de uitvoering van de werklast. Bij een lager aantal threads is het maar liefst 50% sneller dan EXT4. Naarmate de belasting toenam, werden beide bestandssystemen beperkt door de doorvoer van de onderliggende hardware, maar XFS behield nog steeds zijn voorsprong.
  • De latentie voor zowel XFS als EXT4 was vergelijkbaar in beide runs. Merk op dat alle cijfers in microseconden zijn.

Langzamere door EBS ingerichte IOPS-schijf (300 IOPS)

De volgende test is uitgevoerd op onze middelgrote performance rig:

  1. 3 miljoen ingevoegd records bij verschillende serverbelastingen (door het aantal YCSB-clientthreads te variëren).
  2. Werklast uitgevoerd bij bewerkingen van 5 miljoen records bij verschillende serverbelastingen.

Gezien onze ervaring met de high-end configuratie, verwachtten we dat XFS ook in deze rig een behoorlijke voorsprong zou hebben.

IOPS-schijfprestatieresultaten

Doorvoer-/latentiekenmerken voor het invoegen van 3M-records op de mediumconfiguratie:

Doorvoer-/latentiekenmerken voor 5M schrijf-/updatebewerkingen op de mediumconfiguratie:

IOPS-schijfwaarnemingen

  • XFS is vergelijkbaar, maar ligt iets achter op EXT4 in de middelgrote configuratie. Het lijkt erop dat op dit niveau van systeembronnen de prestatie-optimalisaties van XFS niet echt een verschil maken. Dit is een belangrijke opmerking als u overweegt om XFS op kleinere instanties te implementeren in de hoop op betere prestaties.

XFS vs EXT4 op AWS EC2

In prestatietermen is XFS inderdaad een krachtvermenigvuldiger in combinatie met hogesnelheidsschijven waar het echt van kan profiteren. Voor lage tot middelgrote systemen lijkt het niet veel te kunnen doen om uw prestaties te verbeteren.


  1. Kan geen index maken in mongodb, sleutel te groot om te indexeren

  2. Hoe verwijder je één 'document' op 'ID' met behulp van de officiële C#-driver voor MongoDB?

  3. MongoDB $addToSet

  4. Sla een afbeelding op in MongoDB met Node.js/Express en Mongoose