5 Stimmen

Gibt es gut identifizierte Muster für das Testen der Skalierbarkeit von Software?

In letzter Zeit habe ich mich sehr für die Identifizierung von Mustern für die Prüfung der Skalierbarkeit von Software interessiert. Aufgrund der variablen Natur der verschiedenen Softwarelösungen scheint es so, als gäbe es für das Problem der Skalierbarkeitstests von Software ebenso viele gute Lösungen wie für die Entwicklung und Implementierung von Software. Für mich bedeutet das, dass wir wahrscheinlich einige Muster für diese Art von Tests herausfiltern können, die weit verbreitet sind.

Um Unklarheiten zu beseitigen, sage ich im Voraus, dass ich die wikipedia-Definition der Skalierbarkeitstests.

Ich bin vor allem an Antworten interessiert, die spezifische Musternamen mit ausführlichen Beschreibungen vorschlagen.

4voto

Robert MacLean Punkte 38545

Alle mir bekannten Testszenarien verwenden dieselbe Grundstruktur für den Test, der darin besteht, eine Reihe von Anfragen an einen oder mehrere Anforderer zu stellen, die auf den zu testenden Verarbeitungsagenten ausgerichtet sind. Kurt Die Antwort der Kommission ist ein hervorragendes Beispiel für diesen Prozess. Im Allgemeinen führen Sie die Tests durch, um einige Schwellenwerte zu ermitteln, und führen auch einige alternative Konfigurationen durch (weniger Knoten, andere Hardware usw.), um einen genauen Durchschnittswert zu ermitteln.

Ein Requester kann ein Rechner, eine Netzwerkkarte, eine bestimmte Software oder ein Thread in der Software sein, der die Anfragen erzeugt. Alles, was er tut, ist, eine Anfrage zu erzeugen, die auf irgendeine Weise verarbeitet werden kann.

Ein Verarbeitungsagent ist die Software, die Netzwerkkarte, die Maschine, die die Anfrage tatsächlich bearbeitet und ein Ergebnis zurückliefert.

Was Sie jedoch mit den Ergebnissen machen, bestimmt die Art des Tests, den Sie durchführen, und das sind sie:

Last-/Leistungsprüfung : Dies ist die am häufigsten verwendete Variante. Die Ergebnisse werden verarbeitet, um zu sehen, wie viel auf verschiedenen Ebenen oder in verschiedenen Konfigurationen verarbeitet wird. Auch hier ist das, wonach Kurt oben sucht, ein Beispiel dafür.

Gleichgewichtstest : Eine gängige Praxis bei der Skalierung ist die Verwendung eines Lastausgleichsagenten, der Anfragen an einen Prozessagenten weiterleitet. Der Aufbau ist derselbe wie beim Lasttest, aber das Ziel ist es, die Verteilung der Anfragen zu überprüfen. In einigen Szenarien müssen Sie sicherstellen, dass eine gleichmäßige (oder möglichst gleichmäßige) Verteilung der Anfragen auf die Prozessagenten erreicht wird, und in anderen Szenarien müssen Sie sicherstellen, dass der Prozessagent, der die erste Anfrage für einen bestimmten Antragsteller bearbeitet hat, alle nachfolgenden Anfragen bearbeitet (Webfarmen werden häufig auf diese Weise benötigt).

Datensicherheit : Mit diesem Test werden die Ergebnisse gesammelt und die Daten verglichen. Gesucht wird nach Sperrproblemen (z. B. SQL-Sperren), die Schreibvorgänge verhindern, oder danach, dass Datenänderungen in einer akzeptablen Zeit oder weniger auf die verschiedenen Knoten oder Repositories repliziert werden, die Sie verwenden.

Grenztests : Dies ähnelt den Lasttests, außer dass das Ziel nicht die Verarbeitungsleistung ist, sondern die Frage, wie viel gespeichert wird, die Leistung beeinflusst. Wenn Sie zum Beispiel eine Datenbank haben, wie viele Zeilen/Tabellen/Spalten können Sie haben, bevor die E/A-Leistung unter ein akzeptables Niveau fällt.

Ich würde auch empfehlen Die Kunst der Kapazitätsplanung als ein hervorragendes Buch zu diesem Thema.

2voto

Tom Anderson Punkte 44661

Ich kann Roberts Liste um eine weitere Art von Tests ergänzen: Eintauchprüfung . Sie wählen eine entsprechend schwere Testlast aus und lassen sie dann über einen längeren Zeitraum laufen - wenn Ihre Leistungstests normalerweise eine Stunde dauern, lassen Sie sie über Nacht, den ganzen Tag oder die ganze Woche laufen. Sie überwachen sowohl die Korrektheit als auch die Leistung. Ziel ist es, jede Art von Problem zu erkennen, das sich im Laufe der Zeit langsam aufbaut: Dinge wie Speicherlecks, Packratting, gelegentliche Deadlocks, Indizes, die neu aufgebaut werden müssen, usw.

Dies ist eine andere Art von Skalierbarkeit, aber sie ist wichtig. Wenn Ihr System die Entwicklungsabteilung verlässt und in Betrieb geht, wird es nicht nur "horizontal" größer, indem mehr Last und mehr Ressourcen hinzugefügt werden, sondern auch in der zeitlichen Dimension: Es wird auf den Produktionsmaschinen wochen-, monate- oder jahrelang nonstop laufen, was in der Entwicklungsphase nicht der Fall war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X