AWS to niezwykle popularna i zaufana platforma chmurowa do zarządzania wdrożeniami MongoDB, ale kwestia XFS vs EXT4 sprawia, że wielu programistów zastanawia się, który system plików Linux zapewni im najlepszą wydajność dla ich aplikacji. Oficjalny przewodnik MongoDB dotyczący wdrażania w środowisku produkcyjnym zaleca korzystanie z systemu plików XFS w systemie Linux, zwłaszcza podczas wdrażania silnika pamięci masowej WiredTiger. Zalecenie nie mówi nam jednak, dlaczego powinniśmy spodziewać się wzrostu wydajności ani jakiego rodzaju przyrostu wydajności doświadczymy. Postanowiliśmy dotrzeć do sedna, badając ilościowo wydajność MongoDB w XFS, aby móc porównać, czy EXT4 jest lepszym wyborem dla instancji AWS EC2.
System plików XFS
XFS to wysoce skalowalny, wysokowydajny 64-bitowy system plików dziennika opracowany przez firmę SGI w 1993 r. i przeniesiony do systemu Linux w 2002 r. Obsługuje wysoce równoległe operacje we/wy i systemy plików o rozmiarze do 9 eksabajtów, a także zapisuje w dzienniku tylko metadane systemu plików, nie dane użytkownika. Niektóre kluczowe funkcje zwiększające wydajność XFS to:
- Równoległy dostęp za pośrednictwem grup alokacji zapewnia, że wiele wątków może jednocześnie wykonywać operacje we/wy na tym samym woluminie.
- Alokacja na podstawie zakresu zmniejsza fragmentację, rozmiar metadanych i poprawia wydajność we/wy, umożliwiając mniej i większe operacje we/wy.
- Opóźniona alokacja poprawia ciągłość danych i wydajność. Fragmentacja jest redukowana przez łączenie zapisów i przydzielanie ekstentów w dużych porcjach, a pliki zapisywane losowo (takie jak te, które są mapowane w pamięci) mogą być przydzielane w sposób ciągły
Istnieje wiele innych funkcji XFS do odkrycia i możesz dowiedzieć się więcej na stronie XFS i w Podręczniku użytkownika XFS.
Przeprowadzanie testów wydajności w MongoDB
Jak mogłeś dowiedzieć się z naszych poprzednich postów, używamy YCSB do testowania wydajności MongoDB, w tym szczegółowego porównania wydajności MongoDB wspieranej przez MMAP w różnych dostawcach chmury. Zdecydowaliśmy się użyć tego samego obciążenia YCSB, którego używaliśmy wcześniej:Obciążenie A (aktualizacja ciężka:50% odczytów + 50% aktualizacji). Faza wstawiania obciążenia mierzy wydajność 100% obciążeń zapisu, podczas gdy faza obciążenia mierzy wydajność względem rzeczywistego obciążenia (50/50% odczyt/aktualizacja).
Nasze testy przeprowadzono na sterowniku synchronizacji MongoDB, a dystrybucją systemu Linux był Amazon Linux (4.4.44-39.55.amzn1.x86_64). Do naszych testów wybraliśmy MongoDB w wersji 3.2.10 z WiredTiger, ponieważ WT oczekiwano lepszych zysków i przeprowadziliśmy testy na 2 różnych platformach sprzętowych:
- Dyski o dużej szybkości :instancja AWS EC2 c3.large, w której MongoDB używa dysków SSD w konfiguracji RAID 0 do przechowywania (mapuje do rozmiaru klastra ScaleGrid HighPerfLarge).
- Dyski o średniej szybkości :instancja AWS EC2 m3.medium, w której MongoDB korzystała z dysków z aprowizowaną liczbą IOPS EBS (Elastic Block Store) ustawionym na 300 IOPS (mapy do klastra ScaleGrid o rozmiarze średnim).
Uwaga:Wszelkie testy wydajności w środowiskach zwirtualizowanych należy traktować z przymrużeniem oka. Naszym celem nie jest porównywanie wyników wydajności w tych środowiskach, ale zapewnienie ilościowego pomiaru różnic wydajności między EXT4 i XFS w tym samym środowisku zwirtualizowanym.
Dysk SSD o dużej szybkości
Przeprowadziliśmy następujący test na naszej wysokowydajnej platformie:
- Wstawiono 6 milionów rekordy przy różnych obciążeniach serwera (poprzez zmianę liczby wątków klienta YCSB).
- Uruchomiono obciążenie przy liczbie operacji wynoszącej 10 milionów rekordy przy różnych obciążeniach serwera.
Wyniki wydajności dysków SSD
Charakterystyka przepustowości/opóźnień dla wstawiania rekordów 6M w konfiguracji o wysokiej wydajności:
Charakterystyka przepustowości/opóźnień dla operacji zapisu/aktualizacji 10M w konfiguracji o wysokiej wydajności:
Obserwacje dysku SSD
- XFS jest niesamowicie szybki zarówno podczas fazy wstawiania, jak i wykonywania obciążenia. Przy mniejszej liczbie wątków jest nawet o 50% szybszy niż EXT4. Wraz ze wzrostem obciążenia oba systemy plików były ograniczone przepustowością podstawowego sprzętu, ale XFS nadal utrzymywał swoją przewagę.
- Opóźnienie zarówno dla XFS, jak i EXT4 było porównywalne w obu seriach. Pamiętaj, że wszystkie liczby są podane w mikrosekundach.
Wolniejszy aprowizowany dysk IOPS EBS (300 IOPS)
Na naszym średniej wielkości platformie został przeprowadzony następujący test:
- Wstawiono 3 miliony rekordy przy różnych obciążeniach serwera (poprzez zmianę liczby wątków klienta YCSB).
- Uruchomiono obciążenie przy liczbie operacji wynoszącej 5 milionów rekordy przy różnych obciążeniach serwera.
Biorąc pod uwagę nasze doświadczenie w konfiguracji high-end, spodziewaliśmy się, że XFS będzie mieć przyzwoitą przewagę również w tym zestawie.
Wyniki wydajności dysków IOPS
Charakterystyka przepustowości/opóźnień dla wstawiania rekordów 3M w konfiguracji medium:
Charakterystyka przepustowości/opóźnień dla operacji zapisu/aktualizacji 5M w konfiguracji medium:
Obserwacje dysku IOPS
- XFS jest porównywalny, choć nieco mniej niż EXT4 w konfiguracji średniej wielkości. Wygląda na to, że na tym poziomie zasobów systemowych optymalizacje wydajności XFS tak naprawdę nie robią różnicy. To ważna obserwacja, jeśli rozważasz wdrożenie XFS na mniejszych instancjach w nadziei na poprawę wydajności.
XFS kontra EXT4 w AWS EC2
Pod względem wydajności XFS jest rzeczywiście mnożnikiem siły w połączeniu z szybkimi dyskami, z których może czerpać realne korzyści. W przypadku systemów o niskim i średnim poziomie wydaje się, że nie jest w stanie wiele zrobić, aby poprawić wydajność.