MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann man MongoDB mit YCSB benchmarken?

Die meisten DBaaS-Anbieter beschränken sich, wenn sie über Systemleistungsmerkmale sprechen, darauf, Informationen über die Hardware bereitzustellen, auf der ihre Systeme bereitgestellt werden. Angesichts der Anzahl der Variablen in einem solchen System ist es in der Tat schwierig, genau über die tatsächlichen Durchsatz-/Latenzeigenschaften einer Cloud-basierten Bereitstellung zu sprechen. Virtualisierte Umgebungen, unvorhersehbare Workloads, Netzwerklatenzen, unterschiedliche Regionen sind nur einige der Überlegungen.

Es ist jedoch eine gute Idee, ein angemessenes Verständnis der tatsächlichen Leistung Ihrer MongoDB-Bereitstellung zu haben:damit Sie basierend auf Ihren Anwendungsanforderungen genau bereitstellen können; damit Sie tatsächlich verschiedene DBaaS-Anbieter vergleichen können, um sicherzustellen, dass Sie das Beste für das Geld bekommen.

Dieser Blog ist eine Einführung in die Ausführung einiger grundlegender Leistungsbenchmarks auf Ihrem MongoDB-Cluster. Es geht detailliert auf die Konfiguration und Ausführung von YCSB-Benchmark-Tests und die Interpretation der Ergebnisse ein. Die Inspiration dafür kam aus dem kürzlich erschienenen MongoDB-Blog über Leistungsverbesserungen in MongoDB 3.0.

YCSB ist eine beliebte Java-Open-Source-Spezifikation und -Programmsuite, die von Yahoo! um die relative Leistung verschiedener NoSQL-Datenbanken zu vergleichen. Seine Workloads werden in verschiedenen Vergleichsstudien von NoSQL-Datenbanken verwendet.

YCSB einrichten

Dieser und spätere Abschnitte führen Sie Schritt für Schritt durch die Einrichtung, Konfiguration und Ausführung von YCSB-Tests auf Ihrem bevorzugten DBaaS-Anbietersystem.

Um Workload-Tests auszuführen, benötigen Sie einen Clientcomputer, vorzugsweise am selben geografischen Standort wie Ihr MongoDB-Cluster, um Latenzen über das Internet zu vermeiden. Wählen Sie eine Konfiguration aus, die über eine anständige Menge Saft verfügt, um mehrere Threads auszuführen, um Ihren Mongo-Cluster angemessen zu laden. Auf dem Rechner muss eine aktuelle Version von Java, Maven und Git installiert sein.

Schritte:

  • Wenn Java, Maven oder Git noch nicht auf Ihrem System installiert sind, installieren Sie sie. Schlagen Sie in der Dokumentation nach, die für Ihr spezifisches Betriebssystem verfügbar ist. Stellen Sie sicher, dass Sie eine Maven-Version installieren, die mit Ihrer Java-Version kompatibel ist. Testen Sie, ob alle Abhängigkeiten ordnungsgemäß funktionieren. Zum Beispiel
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • Wie von der Github-Seite von YCSB vorgeschlagen, könnten Sie das tar-Archiv von YCSB erhalten. Wir empfehlen jedoch, es aus der Quelle zu erstellen. Schritte sind in der MongoDB README von YCSB dokumentiert. Dies hilft uns später, die MongoDB-Authentifizierung für Ihren Cloud-Anbieter zu aktivieren.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Hinweis:Wenn Ihr `mvn clean package` oder `mvn clean install` Befehl aufgrund von Fehlern beim Auffinden des „mapkeeper“-Pakets fehlschlägt, löschen oder kommentieren Sie die beiden Instanzen der „mapkeeper“-Einträge in pom.xml auf der Wurzelebene. Weitere Informationen finden Sie in diesem Github-Problem.
  • Sobald der Build erfolgreich war, können Sie jetzt YCSB-Tests ausführen!

Authentifizierung aktivieren

Die meisten MongoDB-Anbieter bieten standardmäßig eine MongoDB-Authentifizierung und es gibt keine Möglichkeit, sie zu deaktivieren. Leider unterstützt YCSB derzeit keine MongoDB-Authentifizierung. Die Client-Implementierung selbst verwendet inzwischen hauptsächlich veraltete API-Aufrufe. Um unseren Anforderungen gerecht zu werden, haben wir eine neue MongoDB-spezifische YCSB-Eigenschaft hinzugefügt, 'mongodb.auth' zusammen mit ein paar Zeilen Code, um es zu unterstützen. Die Änderungen sind sehr einfach und ein Unterschied kann hier gefunden werden. Hier sind standardmäßige MongoDB-spezifische YCSB-Eigenschaften aufgelistet.

Erstellen Sie das Paket erneut mit mvn erneut, sobald die Änderungen abgeschlossen sind. Lesen Sie den obigen Abschnitt, wie Sie YCSB mit Maven erstellen.

Durchführen der Tests

Dieser Abschnitt des YCSB-Wikis listet die nächsten und nachfolgenden Aktivitäten im Detail auf. Wir werden sie hier zusammen mit anderen Hinweisen kurz beschreiben.

  • Der nächste Schritt besteht darin, die Art der Workload auszuwählen, die Sie ausführen möchten. Nehmen Sie sich die Zeit, den Abschnitt „Core Workloads“ im YCSB-Wiki zu lesen und zu verstehen. Sie sind hier zusammengefasst:
    • Arbeitslast A:Hohe Arbeitslast aktualisieren:50/50 % Mischung aus Lese-/Schreibvorgängen
    • Arbeitslast B:Hauptsächlich Lesearbeitslast:95/5 % Mischung aus Lese-/Schreibvorgängen
    • Workload C:Nur Lesen:100 % Lesevorgänge
    • Arbeitslast D:Letzte Arbeitslast lesen:Mehr Traffic bei den letzten Einfügungen
    • Arbeitslast E:Kurze Reichweiten:Auf kurze Reichweiten basierende Abfragen
    • Workload F:Read-modify-write:Vorhandene Datensätze lesen, ändern und aktualisieren
  • Natürlich können die einzelnen Workloads mithilfe von Kerneigenschaften optimiert werden. Möglicherweise möchten Sie eine Workload auswählen und die Eigenschaften so anpassen, dass sie mit den Eigenschaften Ihrer Anwendung übereinstimmen. (Diese vergleichende Studie hat eine Reihe interessanter „optimierter“ Workloads ausgewählt). Siehe auch den MongoDB-Blog, den wir im ersten Abschnitt erwähnt haben. (Unser Test erfasst Workload A mit standardmäßigen Lese-/Aktualisierungsverhältnissen).
  • Wählen Sie die Anzahl der Operationen (Eigenschaft ‚operationcount‘) so aus, dass der Test selbst über einen angemessenen Zeitraum ausgeführt wird. Tests, die innerhalb von 30 Minuten abgeschlossen sind, können keine guten Indikatoren für die allgemeine Leistung des Systems sein.
  • Wählen Sie die entsprechende Anzahl von Threads, die YCSB ausführen soll. Dies hängt wirklich davon ab, wie gut Ihre Client-Rechner sind, wie viel Last Ihr MongoDB-Cluster aufnehmen kann und wie repräsentativ er für Ihre tatsächliche Anwendung ist. Wir werden unsere Benchmark-Tests mit einer Reihe von Threads durchführen.
  • Führe die Ladephase aus. Wählen Sie eine Datensatzanzahl (Eigenschaft „recordcount“) zum Einfügen in die Datenbank, die der Anzahl der Operationen nahe kommt, die Sie darauf ausführen möchten. Wählen Sie eine angemessene Anzahl an Fäden, damit das Einsetzen nicht zu lange dauert. Zum Beispiel
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load ‘Flag zeigt an, dass dies ein Ladelauf ist.
    • s ‘ Flag druckt den Status in 10-Sekunden-Intervallen
    • recordcount ‘ ist auf 10 Millionen festgelegt.
    • threads ‘ setzt die Anzahl der Client-Threads auf 16.
    • mongodb.auth ‘ ist die Eigenschaft, die wir geschrieben haben, um die MongoDB-Authentifizierung zu aktivieren.
  • Denken Sie an
    • Die Standardausgabe in eine Datei umleiten.
    • Verwenden Sie 'screen ‘ oder eine gleichwertige Methode, damit Ihre Sitzung während der Ausführung dieser Vorgänge nicht verloren geht
  • Sobald die Datenladephase abgeschlossen ist, können Sie Ihre Workloads ausführen. Zum Beispiel
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • Wiederholen Sie die Läufe mit einer unterschiedlichen Anzahl von Threads. Denken Sie daran, die Ergebnisse umzuleiten, damit Sie sie später vergleichen können. Für z.B. Wir haben unsere Tests für 2, 4, 8, 16 und 32 Threads wiederholt.

Ergebnisse analysieren

Im letzten Abschnitt dieser YCSB-Wiki-Seite geht es um die Analyse von Ergebnissen. Die interessantesten Informationen sind der Gesamtdurchsatz und die 95/99 %-Perzentillatenzen. Normalerweise erhöht eine Erhöhung der Anzahl von Threads den Durchsatz bis zu dem Zeitpunkt, an dem die Gewinne abflachen und die Latenzen inakzeptabel werden. Für z.B. Hier ist ein Diagramm von Durchsatz und Latenz im Vergleich zur Anzahl der Threads für ein Testsystem, das wir zu bewerten versuchten. Ausgewählte Arbeitslast war Arbeitslast A und etwa 3 Millionen Vorgänge.

Aus dem Diagramm lässt sich schließen, dass 16 Threads wahrscheinlich der „Sweet Spot“ aus Lastsicht für diesen MongoDB-Server sind:Darüber hinaus ist die Durchsatzlinie selbst bei einem exponentiellen Wachstum der Anzahl von Threads flach, während die Latenzen unannehmbar groß werden.

Ein paar Hinweise:

  • Für ein besseres Bild der Systemleistung über die Cloud sollten Sie diese Tests an verschiedenen Stellen des Tages automatisieren und dann wiederholen. Wir haben festgestellt, dass die Leistungsmerkmale im Laufe des Tages erheblich variieren können.
  • Stellen Sie beim Vergleich zweier potenzieller DBaaS-Anbieter sicher, dass Sie Ihre Client-Rechner und den DBaaS-Cluster in derselben Region auswählen. Die Cluster sollten ähnlich konfiguriert sein. Denken Sie auch daran, die Tests zu verschiedenen Tageszeiten durchzuführen.

Was kommt als Nächstes

Hier sind ein paar Dinge, die wir untersuchen wollen, während wir mehr Arbeit in diesem Bereich leisten:

  • Arbeitslasten von mehreren Computern parallel ausführen:Beim Versuch, einen MongoDB-Cluster mit hoher Kapazität zu laden, reicht ein einzelner Client-Computer nicht aus. YCSB bietet derzeit keine einfache Möglichkeit, Workloads von mehreren Computern parallel auszuführen. Es kann jedoch manuell durchgeführt werden. Dies ist auch nützlich, wenn Sie versuchen, Daten in einen großen Cluster zu laden.
  • Größe des Datensatzes:Die Größe der Datenbank im Vergleich zum Arbeitsspeicher der MongoDB-Systeme ändert die absoluten Durchsatz-/Latenzeigenschaften, da MongoDB für größere Datensätze auf die Festplatte treffen muss .
  • Größe einzelner Datensätze:Es wird für die Leistungsmerkmale interessant, wenn die Datensatzgrößen groß sind, insbesondere wenn sie nahe an der maximal unterstützten Datensatzgröße liegen. Dies kann für Anwendungen entscheidend sein, die hauptsächlich Read-Modify-Write-Back-Operationen ausführen (wie Workload F).
  • Alternative MongoDB-Treiber:Da wir aktuell daran interessiert waren, zwei verschiedene DBaaS-Anbieter zu vergleichen, haben wir nicht versucht, effizientere Datenbanktreiber zu verwenden. Offensichtlich können mit den neuesten und effizienteren Treibern viel bessere absolute Zahlen erzielt werden. Dies wird für Anwendungen interessant sein, die versuchen, das letzte Quäntchen Saft aus ihrem System zu extrahieren. Dieser Blog spricht über Leistungsverbesserungsmessungen durch YCSB unter Verwendung eines asynchronen MongoDB-Treibers.
  • Alternative Benchmarking-Tools:Sysbench für MongoDB finden wir interessant. Wir schauen auf andere.