Wie wird die Skalierbarkeit von Software gemessen?

21

Ich wurde gebeten, eine kleine technische Präsentation über die Skalierbarkeit bestimmter Anwendungen zu halten. Die Anwendung wurde mit Java, Spring MVC und Hibernate entwickelt. Ich habe Zugriff auf den Quellcode der Anwendung.

Wie kann ich die Skalierbarkeit von Software messen (mithilfe von Quellen) und welche Messdaten muss ich beachten, wenn ich die Skalierbarkeit von Software messe?

artjom
quelle

Antworten:

8

Ich würde mit dem Lesen eines Wikipedia-Artikels zu diesem Thema beginnen.

Kurz gesagt, Skalierbarkeit ist die Art und Weise, wie die Systemleistung mit dem Hinzufügen weiterer Ressourcen oder die Ressourcennutzung mit zunehmender Auslastung zunimmt . Wie viele gleichzeitige Benutzer kann Ihre Site beispielsweise verarbeiten, bis die Antwortzeit mehr als 0,3 Sekunden beträgt? Dieselbe Frage, nachdem Sie den verfügbaren RAM / Datenträger / CPU / etc verdoppelt haben. Sie können wahrscheinlich Ihr Wissen über die Interna der Anwendung nutzen, um zu entscheiden, welche Parameter überprüft werden sollten.

Richten Sie einen Prüfstand mit einem Server-Computer und einem oder mehreren Client-Computern ein. Verwenden Sie ein Tool, um die dem Server zur Verfügung stehende Ressourcenmenge zu begrenzen (z. B. ulimit), oder führen Sie eine störende Anwendung auf dem Server aus. Messen Sie, wie der Server mit Clientanforderungen umgeht. Wiederholen Sie die obigen Schritte, um die störende Last bzw. die verfügbaren Ressourcen schrittweise zu erhöhen / zu verringern. Am Ende erhalten Sie einen n-dimensionalen Raum mit Punkten. Es kann einfacher sein , nur einen Parameter zu einem Zeitpunkt , zu ändern , während alle anderen in einiger typischer Wert Fixierung (oder ein paar Werte). In diesem Fall können Sie das Ergebnis darstellen , wie eine Reihe von 2D mit Serverleistung Graphen (zB Anzahl der Nutzer / Anfragen) auf einer Achse und Ressourcennutzung / Verfügbarkeit auf der anderen Seite .

Es gibt komplexere Szenarien, in denen Ihre Anwendung mehr Server für mehr Teil der Anwendung verwendet, und Sie ihre Menge und das Verhältnis variieren können, aber ich denke, es ist nicht Ihr Fall ist. Allenfalls können Sie wahrscheinlich die Anzahl der Threads / Prozesse zu verändern, wenn diese Angelegenheiten.

Wenn Sie die gesamte Anwendung messen, benötigen Sie normalerweise keinen Quellcode-Zugriff. Es kann jedoch interessant sein, einen bestimmten Teil des Codes zu messen (z. B. nur DB oder UI). Dann können Sie den Quellcode verwenden nur dieses Modul für Messungen zu entlarven und die Tests ausgeführt werden . Dies wird als Mikrobenchmark bezeichnet .

Wenn Sie Beispiele suchen, gibt es eine Fülle von ihnen in wissenschaftlichen Artikeln. Durchsuchen Sie den Google Scholar nach Leistungsbewertungen und Ihren bevorzugten Begriffen.

Ilia K.
quelle
1

Die Skalierbarkeit ist für reale Anwendungen keine quantifizierbare Eigenschaft.

In der Praxis geht es bei der Skalierbarkeit darum, Workloads zu unterstützen, die in verschiedenen Dimensionen zunehmen.

So starten Sie mit der Anwendung wird die steigende Arbeitsbelastung mit vorhandenen Hardware-Ressourcen unterstützen. Aber es gibt verschiedene Punkte, an denen Sie Grenzen stoßen; zB die Größe des Speichers, die Anzahl der Kerne, auf Konkurrenzdatenstrukturen, Datenbankdurchsatz, und so weiter. Jedes Mal, wenn Sie eine dieser Grenzen stoßen, müssen Sie unterstützen zunehmende Workloads einen anderen Ansatz. Skalierbarkeit ist darüber, wie lange können Sie die Arbeitsbelastung weiter zunehmen, bevor Sie eine unüberwindbare Grenze erreicht, oder Sie brauchen eine große Redesign zu unternehmen.

Stephen C
quelle