Effiziente Leistung

Abgeschlossen

Stellen Sie sich vor, es wird eine Pressemitteilung über die neuesten Produktankündigungen Ihres Unternehmens veröffentlicht. Die zusätzliche Publicity durch die Pressemitteilung sorgt für hohe Besucherzahlen auf Ihrer Website. Kann Ihre Website diesen Anstieg des Datenverkehrs bewältigen? Kann Ihre Website die zusätzliche Last bewältigen, ohne langsamer oder gar nicht mehr zu reagieren?

In dieser Lerneinheit beschäftigen wir uns mit einigen der grundlegenden Prinzipien, die für eine hervorragende Anwendungsleistung sorgen. Dabei betrachten wir insbesondere die Skalierungs- und Optimierungsprinzipien, die die Säule „Leistungseffizienz“ bilden.

Was ist Leistungseffizienz?

Leistungseffizienz meint die Abstimmung der für eine Anwendung verfügbaren Ressourcen auf den eingehenden Bedarf. Die Leistungseffizienz umfasst die Skalierung von Ressourcen, das Identifizieren und Optimieren potenzieller Engpässe sowie die Optimierung Ihres Anwendungscodes für Spitzenleistung.

Sehen wir uns einige Muster und Verfahren an, mit denen Sie die Skalierbarkeit und Leistung Ihrer Anwendung verbessern können.

Zentrales und horizontales Hochskalieren

Computeressourcen können in zwei Richtungen skaliert werden:

  • Beim zentralen Hochskalieren werden einer einzelnen Instanz weitere Ressourcen hinzugefügt. Dieser Vorgang wird auch als vertikale Skalierung bezeichnet.

    An illustration that shows scaling up by adding resources to a virtual machine.

  • Beim horizontalen Hochskalieren werden weitere Instanzen hinzugefügt. Dieser Vorgang wird auch als horizontale Skalierung bezeichnet.

    An illustration that shows scaling out by adding instances to increase performance.

Beim Hochskalieren geht es darum, einer einzelnen Instanz mehr Ressourcen (z. B. CPU oder Arbeitsspeicher) hinzuzufügen. Bei dieser Instanz kann es sich um einen virtuellen Computer oder einen PaaS-Dienst handeln.

Durch das Hinzufügen von mehr Kapazität zur Instanz werden die für Ihre Anwendung verfügbaren Ressourcen erhöht, aber es gibt eine Einschränkung. VMs sind auf die Kapazität des Hosts beschränkt, auf dem sie ausgeführt werden, und die Hosts selbst weisen physische Einschränkungen auf. Wenn Sie eine Instanz zentral hochskalieren, können Sie schließlich an diese Grenzen stoßen. Dadurch sind Ihre Möglichkeiten beschränkt, der Instanz weitere Ressourcen hinzuzufügen.

Beim Aufskalieren geht es darum, einem Dienst mehr Instanzen hinzuzufügen. Dabei kann es sich um virtuelle Computer oder PaaS-Dienste handeln. Anstatt mehr Kapazität durch größere Leistungsfähigkeit einer einzelnen Instanz hinzuzufügen, wird Kapazität durch Erhöhen der Gesamtzahl von Instanzen hinzugefügt.

Der Vorteil des horizontalen Hochskalierens besteht darin, dass Sie unbegrenzt hochskalieren können, wenn Sie der Architektur weitere Computer hinzufügen müssen. Horizontales Hochskalieren erfordert eine Art der Lastverteilung. Diese kann beispielsweise durch einen Lastenausgleich erfolgen, bei dem Anforderungen auf die verfügbaren Server verteilt werden, oder durch einen Dienstermittlungsmechanismus zum Identifizieren der aktiven Server, an die Anforderungen gesendet werden sollen.

Bei beiden Skalierungstypen können Ressourcen verringert und somit Kosten optimiert werden.

Die automatische Skalierung ist der Prozess zum dynamischen Zuweisen von Ressourcen gemäß den jeweiligen Leistungsanforderungen. Wenn das Arbeitsvolumen zunimmt, benötigt eine Anwendung möglicherweise mehr Ressourcen, um die gewünschten Leistungsebenen aufrechtzuerhalten und die Vereinbarungen zum Servicelevel (SLAs) einzuhalten. Wenn die Nachfrage abnimmt und die hinzugefügten Ressourcen nicht mehr benötigt werden, kann die Zuordnung aufgehoben werden, um Kosten zu sparen.

Die automatische Skalierung nutzt die Elastizität von Umgebungen, die in der Cloud gehostet werden, und reduziert gleichzeitig den Verwaltungsaufwand. Die Leistung des Systems muss nicht ständig von einem Bediener überwacht werden, der entscheidet, ob Ressourcen hinzugefügt oder entfernt werden müssen.

Optimieren der Netzwerkleistung

Wenn Sie die Leistung optimieren, betrachten Sie die Netzwerk- und Speicherleistung, um sicherzustellen, dass deren Niveau innerhalb akzeptabler Grenzen liegt. Diese Leistungsstufen können sich auf die Reaktionszeit Ihrer Anwendung auswirken. Durch die Auswahl der richtigen Netzwerk- und Speichertechnologien für Ihre Architektur können Sie sicherstellen, dass Sie Ihren Kund*innen die bestmögliche Benutzererfahrung bieten.

Das Hinzufügen einer Messagingebene zwischen Diensten kann sich positiv auf die Leistung und Skalierbarkeit auswirken. Durch eine Messagingebene wird ein Puffer geschaffen, damit Anforderungen weiterhin ohne Fehler eingehen können, auch wenn die empfangende Anwendung überlastet ist. Die Anforderungen werden durch die Anwendung in der Reihenfolge beantwortet, in der sie empfangen wurden.

Optimieren der Speicherleistung

In vielen umfangreichen Lösungen werden Daten in separate Partitionen aufgeteilt, die getrennt verwaltet werden können und auf die separat zugegriffen werden kann. Die Partitionierungsstrategie muss sorgfältig ausgewählt werden, um die Vorteile zu maximieren und gleichzeitig nachteilige Auswirkungen zu minimieren. Die Partitionierung kann die Skalierbarkeit verbessern, Konflikte reduzieren und die Leistung optimieren.

Die Verwendung des Zwischenspeicherns in Ihrer Architektur kann die Leistung verbessern. Das Zwischenspeichern (oder Caching) ist ein Mechanismus zum Speichern häufig verwendeter Daten oder Objekten (Webseiten, Bilder), um diese schneller abrufen zu können. Sie können das Zwischenspeichern auf verschiedenen Ebenen Ihrer Anwendung verwenden. Sie können das Zwischenspeichern zwischen Ihren Anwendungsservern und einer Datenbank verwenden, um die für den Datenabruf benötigte Zeit zu verringern.

Sie können die Zwischenspeicherung auch zwischen Ihren Benutzer*innen und Ihren Webservern nutzen, indem Sie statische Inhalte in größerer Nähe zu den Benutzer*innen platzieren. Dadurch wird weniger Zeit benötigt, um die Webseiten an die Benutzer*innen zurückzugeben. Außerdem hat dies den Nebeneffekt, dass die Anforderungslast der Datenbank oder Webserver verringert wird, wodurch die Leistung für andere Anforderungen erhöht wird.

Erkennen von Leistungsengpässen in Ihrer Anwendung

Verteilte Anwendungen und Dienste in der Cloud sind komplexe Softwarekomponenten mit zahlreichen Variablen. In einer Produktionsumgebung sollten Sie unbedingt nachvollziehen können, auf welche Weise Benutzer*innen Ihr System verwenden. Außerdem müssen Sie in der Lage sein, die Ressourcennutzung nachzuverfolgen und allgemein die Integrität und Leistung des Systems zu überwachen. Sie können diese Informationen als Diagnosehilfe verwenden, um Probleme zu erkennen und zu beheben. Sie können diese Informationen auch verwenden, um potenzielle Probleme zu erkennen und zu verhindern, dass diese auftreten.

Für die Leistungsoptimierung müssen Sie verstehen, wie die Anwendungen selbst ausgeführt werden. Fehler, schlechter Code und Engpässe in abhängigen Systeme können durch ein Tool zur Steuerung der Anwendungsleistung aufgedeckt werden. Diese Probleme bleiben den Endbenutzer*innen, Entwickler*innen und Administrator*innen häufig verborgen, können sich aber nachteilig auf die Gesamtleistung Ihrer Anwendung auswirken.

Überprüfen Sie alle Ebenen Ihrer Anwendung, und ermitteln und beheben Sie Leistungsengpässe. Bei diesen Engpässen kann es sich um eine mangelhafte Arbeitsspeicherverwaltung in Ihrer Anwendung oder sogar um den Prozess zum Hinzufügen von Indizes zu Ihrer Datenbank handeln. Dabei kann es durchaus vorkommen, dass Sie nach der Beseitigung eines Engpasses einen weiteren entdecken, von dem Sie bislang gar nichts wussten.

Mit einem sorgfältig ausgearbeiteten Konzept für die Leistungsüberwachung können Sie ermitteln, welche Typen von Mustern und Verfahren für Ihre Architektur von Vorteil sind.

Überprüfen Sie Ihr Wissen

1.

Welches der folgenden Szenarios ist ein Beispiel für zentrales Hochskalieren (vertikales Skalieren)?

2.

Welches der folgenden Szenarien ist ein Beispiel für Aufskalieren (horizontales Skalieren)?