2012-03-31 5 views
0

Ich bin ein Anfänger in GAE und evaluiere noch, ob ich das für mein Schulprojekt verwenden sollte. Ich muss zeigen, dass eine Anwendung skalierbar sein kann, die Definition, die ich hier verwenden möchte, ist, ob sie mehrere tausend Benutzer gleichzeitig bedienen kann.Google App Engine, Auslastungstest auf dem Appspot-Server

Jetzt Lasttest ist eine Möglichkeit, dies zu tun. Das Laden ist jedoch nutzlos, wenn Google die Anwendung abhängig von der Auslastung auf mehrere verschiedene Instanzen skaliert.

Also, ich denke über die Simulation von Datenspeicher lesen/schreibt Zugriff Memcache usw., um die Skalierbarkeit Perspektiven der Anwendung zu zeigen.

Jetzt ist die Verwendung von JUnit Test ein guter Weg, dies zu tun. Sie können jedoch nur lokal ausgeführt werden. Gibt es eine Möglichkeit, sie auf dem Server, der eigentlichen Produktionsumgebung, auszuführen? Wenn das gemacht werden kann, dann kann ich einfach diese Tests schreiben und sie per Eclipse ausführen und ich sollte fertig sein! Der andere Weg besteht darin, Funktionstests mit Selen zu verwenden, um die Last und die tatsächlichen Benutzerbedingungen zu simulieren, aber dies würde höchstwahrscheinlich meinen Computer zum Absturz bringen und auch nicht gleichzeitig auftreten.

Die andere Option besteht darin, ein Python-Lasttestskript zu verwenden und Beispiel-JSON-Daten zu verwenden, um Anforderungen an die Server-URLs zu senden. Dies habe ich jedoch versucht, aber ich kann nicht die Optionen testen, wo echte Benutzerinteraktion erforderlich ist, da die Live-Site eine Google-Anmeldung erfordert.

Irgendwelche Ideen wohin gehe ich?

+1

Ich bin mir nicht ganz sicher, ob ich Ihre Frage verstehe. Ich verstehe den Teil über die Last nicht, der vergeblich ist - Sie erwarten, dass Google die Anwendung skaliert, um Tausende von Benutzern zu behandeln ... also ... im Grunde wollen Sie nur beweisen, dass die Antwort ja ist? Versuchen Sie herauszufinden, wie viele Benutzer Sie für eine einzelne Instanz bereitstellen können? Wenn Sie mit App Engine arbeiten, wird GAE weitere Instanzen hochfahren. Ein Problem besteht darin, das Kontingent zu beenden, bevor der Test beendet ist. – dragonx

+0

Ja, das ist wahr, aber was ich meine ist, dass es eine Möglichkeit geben sollte, Datastore-Tests auf den Server-Ebenen durchzuführen, um irgendeine Form von Verhalten zu simulieren, sagen wir einmal, Entitäten 100-mal lesen/schreiben zu können Die Frage wurde nicht richtig gestellt. – redDragonzz

Antwort

1

Sehen Sie sich entweder Siege (http://www.joedog.org/siege-home/) oder JMeter (http://jmeter.apache.org/) an, um Ihre Apps remote zu testen. Das Problem ist jedoch, dass Sie das Limit Ihrer eigentlichen Testmaschine erreichen werden, bevor Sie das Limit dessen, was Sie testen wollen, erreicht haben, so dass viele Leute ein paar EC2-Instanzen hochfahren und die Lasttests von dort aus ausführen. Seige ist sehr einfach, es liest nur eine Liste von URLs aus einer Textdatei und klammert den Server so hart, wie Sie es sagen. Mit JMeter können Sie robustere Tests erstellen, mit denen Sie sich beispielsweise bei einem Server anmelden und detailliertere Details zur Funktionsweise Ihrer App protokollieren können.

Das sind die zwei besten kostenlosen und einfach zu bedienenden Tools (IMHO).

+0

Gehen wir darauf hinweisen, dass mit einer ganzen Reihe von GAE-Erfahrung, der langsame Teil * IS * der Datenspeicher, das ist der Teil, den Sie tatsächlich Test laden müssen. Sie können Ihre Geschwindigkeit ruinieren, indem Sie zu viele Datenspeicheranfragen stellen. Gets sind billig, Anfragen nicht. Richten Sie JMeter ein, zeichnen Sie eine Reihe von URLs auf, klicken Sie eine Weile darauf und gehen Sie dann zu appstats, um zu sehen, wo Ihre Latenz liegt. –

+0

Gehen wir, um zu sehen, ob es funktioniert. – redDragonzz

0

Es klingt, als ob Sie wirklich Datenspeicheroperationen simulieren möchten.

Sie können einen HTTP-Request-Handler schreiben, der Ihre junit-Tests lädt und aufruft, und dann entweder die Ergebnisse zum Protokollieren oder als HTTP-Ergebnis ausgeben.

Wenn sie lange dauern, können Sie sie auf einer Back-End-Instanz ausführen.

Im Sinne von Ricks Vorschlag können Sie wahrscheinlich auch einen Test für eine Back-End-Instanz ausführen, die HTTP-Anfragen an Ihre Frontend-Instanzen mithilfe der asynchronen HTTP-API sendet und Ihre Front-End-Instanzen dazu veranlasst, viel zu tun Das musst du simulieren.