Leistungsoptimierung für eine verteilte AnwendungPerformance tuning a distributed application

In dieser Reihe werden nacheinander mehrere Szenarien für Cloudanwendungen beschrieben, um zu veranschaulichen, wie von einem Entwicklungsteam Auslastungstests und Metriken zum Diagnostizieren von Leistungsproblemen verwendet wurden.In this series, we walk through several cloud application scenarios, showing how a development team used load tests and metrics to diagnose performance issues. Diese Artikel basieren auf echten Auslastungstests, die wir bei der Entwicklung von Beispielanwendungen durchgeführt haben.These articles are based on actual load testing that we performed when developing example applications. Der Code für die einzelnen Szenarien ist auf GitHub verfügbar.The code for each scenario is available on GitHub.

Szenarien:Scenarios:

Was ist Leistung?What is performance?

Leistung wird häufig in Bezug auf den Durchsatz, die Antwortzeit und die Verfügbarkeit gemessen.Performance is frequently measured in terms of throughput, response time, and availability. Leistungsziele sollten auf Geschäftsvorgängen basieren.Performance targets should be based on business operations. Für kundenorientierte Aufgaben gelten unter Umständen strengere Anforderungen als für betriebsbezogene Aufgaben, z. B. das Erstellen von Berichten.Customer-facing tasks may have more stringent requirements than operational tasks such as generating reports.

Definieren Sie ein Servicelevelziel (Service Level Objective, SLO), mit dem Leistungsziele für jede Workload festgelegt werden.Define a service level objective (SLO) that defines performance targets for each workload. Hierfür unterteilen Sie ein Leistungsziel normalerweise in mehrere Key Performance Indicators (KPIs), z. B.:You typically achieve this by breaking a performance target into a set of Key Performance Indicators (KPIs), such as:

  • Latenz oder Antwortzeit bestimmter AnforderungenLatency or response time of specific requests
  • Anzahl von durchgeführten Anforderungen pro SekundeThe number of requests performed per second
  • Rate der Generierung von Ausnahmen durch das SystemThe rate at which the system generates exceptions.

Leistungsziele sollten explizit über eine Zielauslastung verfügen.Performance targets should explicitly include a target load. Außerdem erhalten auch dann nicht alle Benutzer genau den gleichen Leistungsgrad, wenn diese gleichzeitig auf das System zugreifen und die gleichen Schritte ausführen.Also, not all users will receive exactly the same level of performance, even when accessing the system simultaneously and performing the same work. Ein Servicelevelziel sollte daher auf Perzentilen basieren.So an SLO should be framed in terms of percentiles.

SLO-Beispiel: „Für Clientanforderungen wird bei Auslastungen von bis zu 25.000 Anforderungen/Sekunde innerhalb von 500 ms @ P90 eine Antwort bereitgestellt.“An example SLO for might be: "Client requests will have a response within 500 ms @ P90, at loads up to 25 K requests/second."

Zu lösende Probleme bei der Leistungsoptimierung für ein verteiltes SystemChallenges of performance tuning a distributed system

Es kann besonders aufwändig sein, in einer verteilten Anwendung Leistungsprobleme zu diagnostizieren.It can be especially challenging to diagnose performance issues in a distributed application. Beispiele hierfür sind:Some of the challenges are:

  • Eine einzelne Geschäftstransaktion oder ein Geschäftsvorgang betrifft normalerweise mehrere Komponenten des Systems.A single business transaction or operation typically involves multiple components of the system. Es kann schwierig sein, sich einen ganzheitlichen Überblick über einen einzelnen Vorgang zu verschaffen.It can be hard to get a holistic end-to-end view of a single operation.

  • Der Ressourcenverbrauch wird auf mehrere Knoten verteilt.Resource consumption is distributed across multiple nodes. Um eine einheitliche Ansicht zu erhalten, müssen Sie Protokolle und Metriken an einem zentralen Ort zusammenfassen.To get a consistent view, you need to aggregate logs and metrics in one place.

  • Die Cloud ermöglicht eine elastische Skalierung.The cloud offers elastic scale. Die automatische Skalierung ist ein wichtiges Verfahren zur Verarbeitung von Auslastungsspitzen, aber es kann auch zur Verdeckung von zugrunde liegenden Problemen führen.Autoscaling is an important technique for handling spikes in load, but it can also mask underlying issues. Darüber hinaus kann es auch schwierig zu ermitteln sein, welche Komponenten wann skaliert werden müssen.Also, it can be hard to know which components need to scale and when.

  • Kaskadierende Fehler können zu Folgefehlern führen, die das ursprüngliche Problem verstärken.Cascading failures can cause failures upstream of the root problem. Es kann daher vorkommen, dass das erste Anzeichen für das Problem in einer anderen Komponente als der Komponente des ursprünglichen Problems zu beobachten ist.As a result, the first signal of the problem may appear in a different component than the root cause.

Allgemeine bewährte MethodenGeneral best practices

Die Leistungsoptimierung ist gleichermaßen eine Kunst und eine Wissenschaft, aber der wissenschaftliche Anteil kann betont werden, indem ein systematischer Ansatz gewählt wird.Performance tuning is both an art and a science, but it can be made closer to science by taking a systematic approach. Hier sind einige bewährte Methoden angegeben:Here are some best practices:

  • Aktivieren von Telemetriedaten zum Erfassen von MetrikenEnable telemetry to collect metrics. Instrumentieren des CodesInstrument your code. Halten Sie sich an die bewährten Methoden für die Überwachung.Follow best practices for monitoring. Verwenden Sie die korrelierte Ablaufverfolgung, um alle Schritte einer Transaktion anzeigen zu können.Use correlated tracing so that you can view all the steps in a transaction.

  • Überwachen Sie auch die Perzentile 90/95/99, nicht nur den Mittelwert.Monitor the 90/95/99 percentiles, not just average. Der Durchschnittswert kann Ausreißer verdecken.The average can mask outliers. Die Samplingrate für Metriken ist ebenfalls wichtig.The sampling rate for metrics also matters. Wenn die Samplingrate zu niedrig ist, fallen Spitzen bzw. Ausreißer, die ein Hinweis auf Probleme sein können, ggf. nicht auf.If the sampling rate is too low, it can hide spikes or outliers that might indicate problems.

  • Kümmern Sie sich jeweils nur um einen Engpass.Attack one bottleneck at a time. Stellen Sie eine Hypothese auf, und testen Sie sie, indem Sie jeweils eine Variable ändern.Form a hypothesis and test it by changing one variable at a time. Wenn Sie einen Engpass beseitigt haben, tritt häufig ein anderer Engpass an einer vor- oder nachgelagerten Stelle auf.Removing one bottleneck will often uncover another bottleneck further upstream or downstream.

  • Fehler und Wiederholungen können eine große Auswirkung auf die Leistung haben.Errors and retries can have a large impact on performance. Wenn Ihnen auffällt, dass eine Drosselung aufgrund der Back-End-Dienste besteht, sollten Sie horizontal hochskalieren oder versuchen, die Nutzung zu optimieren (indem Sie beispielsweise Datenbankabfragen optimieren).If you see that you are being throttled by backend services, scale out or try to optimize usage (for example by tuning database queries).

  • Suchen Sie nach gängigen Antimustern in Bezug auf die Leistung.Look for common performance anti-patterns.

  • Suchen Sie nach Möglichkeiten, für Parallelität zu sorgen.Look for opportunities to parallelize. Zwei häufige Ursachen für Engpässe sind Nachrichtenwarteschlangen und Datenbanken.Two common sources of bottlenecks are message queues and databases. In beiden Fällen kann das Sharding hilfreich sein.In both cases, sharding can help. Weitere Informationen finden Sie unter Horizontale, vertikale und funktionale Datenpartitionierung.For more information, see Horizontal, vertical, and functional data partitioning. Suchen Sie nach „heißen“ Partitionen, die ein Hinweis auf unausgeglichene Lese- oder Schreiblasten sein können.Look for hot partitions that might indicate imbalanced read or write loads.

Nächste SchritteNext steps

Lesen Sie sich die Informationen zu den Szenarien für die Leistungsoptimierung durch.Read the performance tuning scenarios