Prüfliste zur LeistungseffizienzPerformance efficiency checklist

Leistungseffizienz ist die Fähigkeit Ihrer Workload, auf effiziente Weise eine den Anforderungen der Benutzer entsprechende Skalierung auszuführen. Sie ist außerdem eine der Säulen des Microsoft Azure Well-Architected Framework.Performance efficiency is the ability of your workload to scale to meet the demands placed on it by users in an efficient manner, and is one of the pillars of the Microsoft Azure Well-Architected Framework. Verwenden Sie diese Prüfliste, um Ihre Anwendungsarchitektur vom Standpunkt der Leistungseffizienz aus zu überprüfen.Use this checklist to review your application architecture from a performance efficiency standpoint.

AnwendungsentwurfApplication design

Partitionieren der Workload.Partition the workload. Entwickeln Sie Teile des Prozesses als diskret und zerlegbar.Design parts of the process to be discrete and decomposable. Minimieren Sie die Größe der einzelnen Teile, während Sie die üblichen Regeln für die Trennung von Belangen und das Single-Responsibility-Prinzip befolgen.Minimize the size of each part, while following the usual rules for separation of concerns and the single responsibility principle. Dadurch können Komponententeile auf eine Weise verteilt werden, die die Verwendung jeder Recheneinheit (beispielsweise eine Rolle oder ein Datenbankserver) maximiert.This allows the component parts to be distributed in a way that maximizes use of each compute unit (such as a role or database server). Es erleichtert auch die Skalierung der Anwendung, indem Sie Instanzen bestimmter Ressourcen hinzufügen.It also makes it easier to scale the application by adding instances of specific resources. Erwägen Sie für komplexe Domänen die Einführung einer Microservices-Architektur.For complex domains, consider adopting a microservices architecture.

Entwurf für die Skalierung.Design for scaling. Skalierung ermöglicht es Anwendungen, auf veränderbare Last zu reagieren, indem sie die Anzahl der Instanzen der Rollen, Warteschlangen und andere Dienste, die sie verwenden, erhöhen und verringern.Scaling allows applications to react to variable load by increasing and decreasing the number of instances of roles, queues, and other services they use. Die Anwendung muss jedoch zu diesem Zweck entworfen werden.However, the application must be designed with this in mind. Die Anwendung und die verwendeten Dienste müssen z. B. statusfrei sein, damit Anforderungen an eine beliebige Instanz weitergeleitet werden können.For example, the application and the services it uses must be stateless, to allow requests to be routed to any instance. Dies verhindert auch, dass die aktuellen Benutzer durch das Hinzufügen oder Entfernen bestimmter Instanzen beeinträchtigt werden.This also prevents the addition or removal of specific instances from adversely affecting current users. Sie sollten auch die Konfiguration oder automatische Erkennung von Instanzen implementieren, während diese hinzugefügt und entfernt werden, sodass der Code in der Anwendung das notwendige Routing durchführen kann.You should also implement configuration or autodetection of instances as they are added and removed, so that code in the application can perform the necessary routing. Eine Webanwendung kann z. B. eine Reihe von Warteschlangen in einem Roundrobin-Ansatz verwenden, um Anforderungen an Hintergrunddienste weiterzuleiten, die in Workerrollen ausgeführt werden.For example, a web application might use a set of queues in a round-robin approach to route requests to background services running in worker roles. Die Webanwendung muss Änderungen hinsichtlich der Anzahl der Warteschlangen erkennen können, um Anforderungen erfolgreich weiterleiten und den Lastenausgleich der Anwendung durchführen zu können.The web application must be able to detect changes in the number of queues, to successfully route requests and balance the load on the application.

Als Einheit skalieren.Scale as a unit. Planen Sie zusätzliche Ressourcen ein, um ein Wachstum zu ermöglichen.Plan for additional resources to accommodate growth. Sie sollten für jede Ressource die oberen Skalierungsgrenzen kennen und Sharding oder Zerlegung verwenden, um über diese Grenzen hinausgehen.For each resource, know the upper scaling limits, and use sharding or decomposition to go beyond these limits. Bestimmen der Skalierungseinheiten für das System im Hinblick auf klar definierte Ressourcensätze.Determine the scale units for the system in terms of well-defined sets of resources. Dadurch ist die Anwendung der horizontalen Hochskalierung einfacher und weniger anfällig für negative Auswirkungen auf die Anwendung aufgrund von Einschränkungen, die durch den Mangel an Ressourcen in einem Teil des gesamten Systems verursacht werden.This makes applying scale-out operations easier, and less prone to negative impact on the application through limitations imposed by lack of resources in some part of the overall system. Zum Beispiel kann das Hinzufügen von x Web- und Workerrollen möglicherweise y zusätzliche Warteschlangen und z Speicherkonten erforderlich machen, um die durch die Rollen generierte Workload zu bewältigen.For example, adding x number of web and worker roles might require y number of additional queues and z number of storage accounts to handle the additional workload generated by the roles. Eine Skalierungseinheit kann somit aus x Web- und Workerrollen, y Warteschlangen und z Speicherkonten bestehen.So a scale unit could consist of x web and worker roles, y queues, and z storage accounts. Entwerfen Sie die Anwendung so, dass sie einfach skaliert wird, indem Sie eine oder mehrere Skalierungseinheiten hinzufügen.Design the application so that it's easily scaled by adding one or more scale units.

Vermeiden von Clientaffinität.Avoid client affinity. Stellen Sie wenn möglich sicher, dass für die Anwendung keine Affinität erforderlich ist.Where possible, ensure that the application does not require affinity. Anfragen können dadurch an eine beliebige Instanz weitergeleitet werden, und die Anzahl der Instanzen ist irrelevant.Requests can thus be routed to any instance, and the number of instances is irrelevant. Dies verhindert auch den Aufwand für das Speichern, Abrufen und Verwalten von Zustandsinformationen für jeden einzelnen Benutzer.This also avoids the overhead of storing, retrieving, and maintaining state information for each user.

Nutzung von Funktionen der automatischen Plattformskalierung.Take advantage of platform autoscaling features. Wenn die Hostingplattform eine Funktion für die automatische Skalierung unterstützt, z. B. Azure Autoscale, bevorzugen Sie diese vor benutzerdefinierten Mechanismen oder Drittanbietermechanismen, es sei denn der integrierte Mechanismus kann Ihre Anforderungen nicht erfüllen.Where the hosting platform supports an autoscaling capability, such as Azure Autoscale, prefer it to custom or third-party mechanisms unless the built-in mechanism can't fulfill your requirements. Verwenden Sie wo möglich geplante Skalierungsregeln, um sicherzustellen, dass die Ressourcen ohne Startverzögerung zur Verfügung stehen. Fügen Sie jedoch automatische reaktive Skalierungsregeln hinzu, um gegebenenfalls unerwartete Änderungen der Nachfrage zu bewältigen.Use scheduled scaling rules where possible to ensure resources are available without a start-up delay, but add reactive autoscaling to the rules where appropriate to cope with unexpected changes in demand. Sie können die Vorgänge der automatischen Skalierung im klassischen Bereitstellungsmodell verwenden, um die automatische Skalierung anzupassen und um Regeln benutzerdefinierte Leistungsindikatoren hinzuzufügen.You can use the autoscaling operations in the classic deployment model to adjust autoscaling, and to add custom counters to rules. Weitere Informationen finden Sie unter Anleitungen für die automatische Skalierung.For more information, see Auto-scaling guidance.

Konfigurieren von Aufgaben mit hoher CPU- und E/A-Intensität als Hintergrundaufgaben.Offload CPU-intensive and I/O-intensive tasks as background tasks. Lagern Sie die Verarbeitung für diese Anforderung in einer separaten Aufgabe aus, wenn erwartet wird, dass eine Anforderung an einen Dienst lange Zeit für die Ausführung benötigt oder beträchtliche Ressourcen absorbiert.If a request to a service is expected to take a long time to run or absorb considerable resources, offload the processing for this request to a separate task. Verwenden Sie zum Ausführen dieser Aufgaben Workerrollen oder Hintergrundaufträge (abhängig von der Hostingplattform).Use worker roles or background jobs (depending on the hosting platform) to execute these tasks. Dadurch kann den Dienst weiterhin Anforderungen erhalten und reaktionsfähig bleiben.This strategy enables the service to continue receiving further requests and remain responsive. Weitere Informationen finden Sie unter Leitfaden für Hintergrundaufträge.For more information, see Background jobs guidance.

Verteilen Sie die Workload für Hintergrundaufgaben.Distribute the workload for background tasks. Wenn es viele Hintergrundaufgaben gibt oder die Aufgaben beträchtliche Zeit oder Ressourcen erfordern, können Sie die Arbeit auf mehrere Recheneinheiten (z. B. Workerrollen oder Hintergrundaufträge) verteilen.Where there are many background tasks, or the tasks require considerable time or resources, spread the work across multiple compute units (such as worker roles or background jobs). Eine mögliche Lösung ist das Muster „Konkurrierende Consumer“.For one possible solution, see the Competing Consumers pattern.

Erwägen Sie den Übergang zu einer Shared-Nothing-Architektur (Architektur ohne gemeinsam genutzte Inhalte).Consider moving toward a shared-nothing architecture. Eine Architektur ohne gemeinsam genutzte Inhalte verwendet unabhängige, eigenständige Knoten, die keine einzelnen Konfliktpunkt haben (z. B. gemeinsame Dienste oder Speicher).A shared-nothing architecture uses independent, self-sufficient nodes that have no single point of contention (such as shared services or storage). Theoretisch kann ein solches System fast unbegrenzt skaliert werden.In theory, such a system can scale almost indefinitely. Während ein vollständiger Ansatz ohne gemeinsam genutzte Inhalte im Allgemeinen für die meisten Anwendungen nicht geeignet ist, bietet er Möglichkeiten für Entwürfe mit besserer Skalierbarkeit.While a fully shared-nothing approach is generally not practical for most applications, it may provide opportunities to design for better scalability. Die Vermeidung der Verwendung von serverseitigem Sitzungsstatus, Clientaffinität und Datenpartitionierung sind gute Beispiele für den Übergang zu einer Architektur ohne gemeinsam genutzte Inhalte.For example, avoiding the use of server-side session state, client affinity, and data partitioning are good examples of moving toward a shared-nothing architecture.

DatenverwaltungData management

Verwenden Sie Datenpartitionierung.Use data partitioning. Teilen Sie die Daten auf mehrere Datenbanken und Datenbankserver auf, oder entwerfen Sie die Anwendung zur Verwendung von Datenspeicherdiensten, die diese Partitionierung transparent gewährleisten (z. B. Elastische Datenbank für Azure SQL-Datenbank und Azure-Tabellenspeicher).Divide the data across multiple databases and database servers, or design the application to use data storage services that can provide this partitioning transparently (examples include Azure SQL Database Elastic Database, and Azure Table storage). Dieser Ansatz hilft bei der Leistungsmaximierung und ermöglicht einfachere Skalierung.This approach can help to maximize performance and allow easier scaling. Es gibt verschiedene Partitionierungsverfahren wie horizontale, vertikale und funktionale Partitionierung.There are different partitioning techniques, such as horizontal, vertical, and functional. Sie können eine Kombination dieser Verfahren nutzen, um optimalen Nutzen aus verbesserter Abfrageleistung, einfacherer Skalierbarkeit, flexiblerer Verwaltung, besserer Verfügbarkeit und eine Übereinstimmung des Speichertyps und der darin enthaltenen Daten zu erreichen.You can use a combination of these to achieve maximum benefit from increased query performance, simpler scalability, more flexible management, better availability, and to match the type of store to the data it will hold. Berücksichtigen Sie außerdem die verschiedenen Arten von Datenspeichern für verschiedene Arten von Daten. Wählen Sie die Typen basierend darauf aus, wie gut sie für den spezifischen Datentyp optimiert sind.Also, consider using different types of data store for different types of data, choosing the types based on how well they are optimized for the specific type of data. Dazu zählt beispielsweise die Verwendung von Tabellenspeicher, einer Dokumentendatenbank oder eines Spalte-Familien-Datenspeichers anstelle von oder zusätzlich zu einer relationalen Datenbank.This may include using table storage, a document database, or a column-family data store, instead of, or as well as, a relational database. Weitere Informationen finden Sie unter Leitfaden Datenpartitionierung.For more information, see Data partitioning guidance.

Design für letztendliche Konsistenz.Design for eventual consistency. Letztendliche Konsistenz verbessert die Skalierbarkeit durch das Reduzieren oder Entfernen des Zeitaufwands für die Synchronisierung verknüpfter Daten, die über mehrere Speicher aufgeteilt sind.Eventual consistency improves scalability by reducing or removing the time needed to synchronize related data partitioned across multiple stores. Der Preis ist, dass Daten beim Lesen nicht immer konsistent sind und einige Schreibvorgänge möglicherweise Konflikte verursachen.The cost is that data is not always consistent when it is read, and some write operations may cause conflicts. Letztendliche Konsistenz ist ideal für Situationen, in denen die gleichen Daten oft gelesen jedoch selten geschrieben werden.Eventual consistency is ideal for situations where the same data is read frequently but written infrequently. Weitere Informationen finden Sie unter Data Consistency Primer(Grundlagen der Datenkonsistenz).For more information, see the Data Consistency Primer.

Reduzieren Sie viele Einzelaufrufinteraktionen zwischen Komponenten und Diensten.Reduce chatty interactions between components and services. Vermeiden Sie das Entwerfen von Interaktionen, bei denen eine Anwendung mehrere Aufrufe an einen Dienst machen muss (von denen jeder eine kleine Menge Daten zurückgibt), statt einem einzigen Aufruf, der alle Daten zurückgeben kann.Avoid designing interactions in which an application is required to make multiple calls to a service (each of which returns a small amount of data), rather than a single call that can return all of the data. Kombinieren Sie wenn möglich mehrere verwandte Vorgänge in einer einzigen Anforderung, wenn der Aufruf eines Dienstes oder einer Komponente mit spürbarer Latenz erfolgt.Where possible, combine several related operations into a single request when the call is to a service or component that has noticeable latency. Dies vereinfacht die Überwachung der Leistung und Optimierung komplexer Vorgänge.This makes it easier to monitor performance and optimize complex operations. Verwenden Sie z. B. gespeicherte Prozeduren in Datenbanken, um komplexe Logik einzukapseln, und reduzieren Sie die Anzahl der Roundtrips und Sperren für Ressourcen.For example, use stored procedures in databases to encapsulate complex logic, and reduce the number of round trips and resource locking.

Verwenden Sie Warteschlangen, um die Last für Schreibvorgänge mit hoher Geschwindigkeit auszugleichen.Use queues to level the load for high velocity data writes. Nachfrageschübe für einen Dienst können diesen Dienst überlasten und eskalierende Fehler verursachen.Surges in demand for a service can overwhelm that service and cause escalating failures. Um dies zu verhindern, empfiehlt sich die Implementierung des warteschlangenbasierten Lastenausgleichsmusters.To prevent this, consider implementing the Queue-Based Load Leveling pattern. Verwenden Sie eine Warteschlange, die als Puffer zwischen einer Aufgabe und einem Dienst, den sie aufruft, fungiert.Use a queue that acts as a buffer between a task and a service that it invokes. Dies kann eine vorübergehend starke Auslastung ausgleichen, die andernfalls zu einem Ausfall des Diensts oder zu einem Timeout der Aufgabe führen kann.This can smooth intermittent heavy loads that may otherwise cause the service to fail or the task to time out.

Minimieren Sie die Belastung des Datenspeichers.Minimize the load on the data store. Der Datenspeicher ist in der Regel ein Verarbeitungsengpass, eine teure Ressource, und er lässt sich oft nicht einfach aufskalieren. Entfernen Sie nach Möglichkeit Logik (z. B. die Verarbeitung von XML-Dokumenten oder JSON-Objekten) aus dem Datenspeicher, und führen Sie die Verarbeitung in der Anwendung durch.The data store is commonly a processing bottleneck, a costly resource, and often not easy to scale out. Where possible, remove logic (such as processing XML documents or JSON objects) from the data store, and perform processing within the application. Serialisieren oder deserialisieren Sie beispielsweise den XML-Code in der Anwendungsschicht, und übergeben Sie ihn an ein datenspeichereigenes Format, anstatt XML an die Datenbank zu übergeben (außer als nicht transparente Zeichenfolge für den Speicher).For example, instead of passing XML to the database (other than as an opaque string for storage), serialize or deserialize the XML within the application layer and pass it in a form that is native to the data store. In der Regel ist es einfacher, die Anwendung aufzuskalieren als den Datenspeicher. Sie sollten also versuchen, den größtmöglichen Teil der rechenintensiven Verarbeitung innerhalb der Anwendung auszuführen.It's typically much easier to scale out the application than the data store, so you should attempt to do as much of the compute-intensive processing as possible within the application.

Minimieren der abgerufenen Datenmenge.Minimize the volume of data retrieved. Rufen Sie nur die Daten ab, die Sie benötigen, indem Sie Spalten und Kriterien zum Auswählen von Zeilen angeben.Retrieve only the data you require by specifying columns and using criteria to select rows. Verwenden Sie Tabellenwertparameter und die entsprechenden Isolationsgrade.Make use of table value parameters and the appropriate isolation level. Verwenden Sie Mechanismen wie Entitätstags, um ein unnötiges Abrufen von Daten zu vermeiden.Use mechanisms like entity tags to avoid retrieving data unnecessarily.

Verwenden Sie Zwischenspeichern aggressiv.Aggressively use caching. Verwenden Sie nach Möglichkeit Zwischenspeicherung, um die Ressourcen und Dienste zu verringern, die Daten generieren oder übermitteln.Use caching wherever possible to reduce the load on resources and services that generate or deliver data. Zwischenspeichern ist in der Regel für Daten geeignet, die relativ statisch sind oder für deren Erhalt beträchtliche Verarbeitung notwendig ist.Caching is typically suited to data that is relatively static, or that requires considerable processing to obtain. Eine Zwischenspeicherung sollte gegebenenfalls auf allen Ebenen der Anwendung erfolgen, einschließlich bei Datenzugriff und Generierung der Benutzeroberfläche.Caching should occur at all levels where appropriate in each layer of the application, including data access and user interface generation. Weitere Informationen finden Sie unter Leitfaden Zwischenspeichern.For more information, see the Caching Guidance.

Umgang mit Datenzuwachs und -aufbewahrung.Handle data growth and retention. Die Datenmenge, die von einer Anwendung gespeichert wird, wächst mit der Zeit.The amount of data stored by an application grows over time. Dieses Wachstum erhöht die Speicherkosten und die Wartezeit beim Zugriff auf die Daten, was wiederum den Anwendungsdurchsatz und die Leistung beeinträchtigt.This growth increases storage costs as well as latency when accessing the data, affecting application throughput and performance. Es ist möglich, regelmäßig einige der alten Daten zu archivieren, auf die nicht mehr zugegriffen wird, oder Daten, auf die selten zugegriffen wird, in den langfristigen Speicher zu verschieben, der kostengünstiger ist, aber eine höhere Zugriffslatenz hat.It may be possible to periodically archive some of the old data that is no longer accessed, or move data that is rarely accessed into long-term storage that is more cost efficient, even if the access latency is higher.

Optimieren von Data Transfer Objects (DTOs) mit einem effizienten Binärformat.Optimize Data Transfer Objects (DTOs) using an efficient binary format. DTOs werden viele Male zwischen den Ebenen einer Anwendung übergeben.DTOs are passed between the layers of an application many times. Wenn Sie die Größe minimieren, wird die Belastung von Ressourcen und dem Netzwerk reduziert.Minimizing the size reduces the load on resources and the network. Wägen Sie jedoch die Ersparnisse gegen den Aufwand für das Konvertieren der Daten in das erforderliche Format an jedem Einsatzort ab.However, balance the savings with the overhead of converting the data to the required format in each location where it is used. Übernehmen Sie ein Format, das maximale Interoperabilität bietet, um eine einfache Wiederverwendung einer Komponente zu ermöglichen.Adopt a format that has the maximum interoperability to enable easy reuse of a component.

Cachesteuerung einstellen.Set cache control. Entwerfen und konfigurieren Sie die Anwendung derart, dass wenn möglich eine Ausgabezwischenspeicherung oder Fragmentzwischenspeicherung verwendet wird, um die Verarbeitungslast zu minimieren.Design and configure the application to use output caching or fragment caching where possible, to minimize processing load.

Aktivieren Sie clientseitiges Zwischenspeichern.Enable client side caching. Webanwendungen sollten Cacheeinstellungen für Inhalte aktivieren, die zwischengespeichert werden können.Web applications should enable cache settings on the content that can be cached. Dies ist häufig standardmäßig deaktiviert.This is commonly disabled by default. Konfigurieren Sie den Server für die Lieferung entsprechender Cache-Control-Header, um die Zwischenspeicherung von Inhalten auf Proxyservern und Clients zu aktivieren.Configure the server to deliver the appropriate cache control headers to enable caching of content on proxy servers and clients.

Verwenden Sie Azure Blob Storage und Azure Content Delivery Network zur Reduzierung der Auslastung der Anwendung.Use Azure blob storage and the Azure Content Delivery Network to reduce the load on the application. Erwägen Sie die Speicherung von statischen oder relativ statischen öffentlichen Inhalten wie Bildern, Ressourcen, Skripten und Stylesheets im Blobspeicher.Consider storing static or relatively static public content, such as images, resources, scripts, and style sheets, in blob storage. Dieser Ansatz befreit die Anwendung von der Arbeitsbelastung, die durch die dynamische Generierung dieser Inhalte für jede Anforderung entsteht.This approach relieves the application of the load caused by dynamically generating this content for each request. Darüber hinaus sollten Sie die Verwendung des Content Delivery Network zum Zwischenspeichern dieser Inhalte und für die Lieferung an Clients in Betracht ziehen.Additionally, consider using the Content Delivery Network to cache this content and deliver it to clients. Die Verwendung des Content Delivery Network kann die Leistung auf dem Client verbessern, da Inhalte aus dem geografisch am nächsten liegenden Rechenzentrum mit Content Delivery Network-Cache übermittelt werden.Using the Content Delivery Network can improve performance at the client because the content is delivered from the geographically closest datacenter that contains a Content Delivery Network cache. Weitere Informationen finden Sie unter der Anleitungen zum Content Delivery Network (CDN).For more information, see the Content Delivery Network Guidance.

Optimieren und rationalisieren Sie SQL-Abfragen und Indizes.Optimize and tune SQL queries and indexes. Einige T-SQL-Anweisungen oder Konstrukte haben möglicherweise negative Auswirkungen auf die Leistung, die durch die Optimierung des Codes in einer gespeicherten Prozedur verringert werden können.Some T-SQL statements or constructs may have an adverse effect on performance that can be reduced by optimizing the code in a stored procedure. Vermeiden Sie z.B. die Konvertierung von datetime-Typen in einen varchar vor dem Vergleich mit einem datetime-Literalwert.For example, avoid converting datetime types to a varchar before comparing with a datetime literal value. Verwenden Sie stattdessen die Datum/Uhrzeit-Vergleichsfunktionen.Use date/time comparison functions instead. Das Fehlen geeigneter Indizes kann die Ausführung der Abfrage auch verlangsamen.Lack of appropriate indexes can also slow query execution. Wenn Sie ein Framework für objekt-relationale Zuordnung verwenden, stellen Sie sicher, dass Sie verstehen, wie es funktioniert und wie es sich auf die Leistung der Datenzugriffsschicht auswirkt.If you use an object/relational mapping framework, understand how it works and how it may affect performance of the data access layer. Weitere Informationen finden Sie unter Abfrageoptimierung.For more information, see Query Tuning.

Erwägen Sie die Denormalisierung von Daten.Consider denormalizing data. Datennormalisierung hilft, Duplizierung und Inkonsistenzen zu vermeiden.Data normalization helps to avoid duplication and inconsistency. Die Verwaltung mehrerer Indizes, Prüfung auf referenzielle Integrität, Durchführung mehrerer Zugriffe auf kleine Datenblöcke und Verknüpfung von Tabellen, um die Daten wieder zusammenzusetzen, führt zu einem Aufwand, der sich auf die Leistung auswirken kann.However, maintaining multiple indexes, checking for referential integrity, performing multiple accesses to small chunks of data, and joining tables to reassemble the data imposes an overhead that can affect performance. Überlegen Sie, ob etwas zusätzliches Speichervolumen und Duplizierung akzeptabel ist, um die Last auf den Datenspeicher zu reduzieren.Consider if some additional storage volume and duplication is acceptable in order to reduce the load on the data store. Berücksichtigen Sie auch, ob auf die Anwendung selbst (die in der Regel leichter zu skalieren ist) zurückgegriffen werden kann, um Aufgaben wie das Verwalten von referenzieller Integrität zu übernehmen, damit die Last für den Datenspeicher verringert wird.Also consider if the application itself (which is typically easier to scale) can be relied on to take over tasks such as managing referential integrity in order to reduce the load on the data store. Weitere Informationen finden Sie unter Leitfaden Datenpartitionierung.For more information, see Data partitioning guidance.

ImplementierungImplementation

Überprüfen Sie die leistungsbezogenen Antimuster.Review the performance antipatterns. Unter Leistungsbezogene Antimuster für Cloudanwendungen finden Sie gängige Methoden, die wahrscheinlich zu Skalierbarkeitsproblemen führen, wenn eine Anwendung überlastet ist.See Performance antipatterns for cloud applications for common practices that are likely to cause scalability problems when an application is under pressure.

Verwenden Sie asynchrone Aufrufe.Use asynchronous calls. Verwenden Sie wenn möglich asynchronen Code beim Zugriff auf Ressourcen oder Dienste, die durch E/A oder Netzwerkbandbreite beschränkt sein können oder die eine merkliche Latenz haben, um eine Sperrung des aufrufenden Threads zu vermeiden.Use asynchronous code wherever possible when accessing resources or services that may be limited by I/O or network bandwidth, or that have a noticeable latency, in order to avoid locking the calling thread.

Vermeiden Sie das Sperren von Ressourcen, und verwenden Sie stattdessen einen optimistischen Ansatz.Avoid locking resources, and use an optimistic approach instead. Sperren Sie nie den Zugriff auf Ressourcen wie z. B. Speicher oder andere Dienste, die merkliche Latenz haben, da es sich dabei um eine primäre Ursache von Leistungseinbußen handelt.Never lock access to resources such as storage or other services that have noticeable latency, because this is a primary cause of poor performance. Verwenden Sie immer optimistische Ansätze, um gleichzeitige Vorgänge wie z. B. das Schreiben in den Speicher zu verwalten.Always use optimistic approaches to managing concurrent operations, such as writing to storage. Verwenden Sie die Funktionen der Speicherschicht, um Konflikte zu verwalten.Use features of the storage layer to manage conflicts. In verteilten Anwendungen können Daten nur letztendlich konsistent sein.In distributed applications, data may be only eventually consistent.

Komprimieren Sie sehr stark komprimierbare Daten über Netzwerke mit hohen Wartezeiten und geringer Bandbreite.Compress highly compressible data over high latency, low bandwidth networks. In den meisten Fällen stellen in einer Webanwendung HTTP-Antworten auf Clientanforderungen die größte von der Anwendung generierte und über das Netzwerk übertragene Datenmenge.In the majority of cases in a web application, the largest volume of data generated by the application and passed over the network is HTTP responses to client requests. HTTP-Komprimierung kann dies besonders für statische Inhalte erheblich reduzieren.HTTP compression can reduce this considerably, especially for static content. Dies kann Kosteneinsparungen und Lastverringerung für das Netzwerk bieten, obwohl die Komprimierung dynamischer Inhalte zu einer minimal höheren Auslastung auf dem Server führt.This can reduce cost as well as reducing the load on the network, though compressing dynamic content does apply a fractionally higher load on the server. In anderen allgemeinen Umgebungen kann die Datenkomprimierung die übertragene Datenmenge reduzieren und den Zeit- und Kostenaufwand minimieren, jedoch führen die Komprimierungs- und Dekomprimierungsprozesse zu einem Mehraufwand.In other, more generalized environments, data compression can reduce the volume of data transmitted and minimize transfer time and costs, but the compression and decompression processes incur overhead. Daher sollte die Komprimierung nur verwendet werden, wenn ein nachweisbarer Leistungsgewinn besteht.As such, compression should only be used when there is a demonstrable gain in performance. Andere Serialisierungsmethoden, z. B. JSON oder binäre Codierungen, können die Nutzlastgröße bei geringerer Auswirkung auf die Leistung senken, wobei sie sich bei XML wahrscheinlich vergrößert.Other serialization methods, such as JSON or binary encodings, may reduce the payload size while having less impact on performance, whereas XML is likely to increase it.

Verkürzen Sie die Zeit, die Verbindungen und Ressourcen verwendet werden.Minimize the time that connections and resources are in use. Verwalten Sie Verbindungen und Ressourcen nur, solange Sie sie verwenden müssen.Maintain connections and resources only for as long as you need to use them. Öffnen Sie z. B. Verbindungen so spät wie möglich, und ermöglichen Sie die baldmöglichste Rückgabe an den Verbindungspool.For example, open connections as late as possible, and allow them to be returned to the connection pool as soon as possible. Greifen Sie auf die Ressourcen so spät wie möglich zu, und entsorgen Sie sie so schnell wie möglich.Acquire resources as late as possible, and dispose of them as soon as possible.

Minimieren Sie die Anzahl der benötigten Verbindungen.Minimize the number of connections required. Dienstverbindungen absorbieren Ressourcen.Service connections absorb resources. Begrenzen Sie die erforderliche Anzahl, und stellen Sie sicher, dass vorhandene Verbindungen möglichst wiederverwendet werden.Limit the number that are required and ensure that existing connections are reused whenever possible. Verwenden Sie z. B. nach dem Ausführen der Authentifizierung gegebenenfalls den Identitätswechsel, um einen Code als bestimmte Identität auszuführen.For example, after performing authentication, use impersonation where appropriate to run code as a specific identity. Dies kann dabei helfen, den Verbindungspool durch die Wiederverwendung von Verbindungen optimal zu nutzen.This can help to make best use of the connection pool by reusing connections.

Hinweis

APIs verwenden Verbindungen für einige Dienste automatisch wieder, sofern dienstspezifische Richtlinien eingehalten werden.APIs for some services automatically reuse connections, provided service-specific guidelines are followed. Es ist wichtig, dass Sie die Umstände verstehen, unter denen eine Verbindung für jeden Dienst, die die Anwendung nutzt, erneut verwendet werden kann.It's important that you understand the conditions that enable connection reuse for each service that your application uses.

Senden Sie zur Optimierung der Netzwerknutzung Anforderungen in Batches.Send requests in batches to optimize network use. Senden Sie z. B. Nachrichten stapelweise, wenn Sie auf eine Warteschlange zugreifen und führen Sie beim Zugriff auf Speicher oder einen Cache mehrere Lese- oder Schreibvorgänge als Batch aus.For example, send and read messages in batches when accessing a queue, and perform multiple reads or writes as a batch when accessing storage or a cache. Dies kann helfen, die Effizienz der Dienste und Datenspeicher zu maximieren, indem die Anzahl der Aufrufe über das Netzwerk verringert wird.This can help to maximize efficiency of the services and data stores by reducing the number of calls across the network.

Vermeiden Sie eine Anforderung zum Speichern des serverseitigen Sitzungsstatus wenn möglich.Avoid a requirement to store server-side session state where possible. Serverseitige Sitzungsstatusverwaltung erfordert in der Regel Clientaffinität (sprich das Routing jeder Anforderung zur gleichen Serverinstanz), wodurch die Skalierungsfähigkeit des Systems beeinflusst wird.Server-side session state management typically requires client affinity (that is, routing each request to the same server instance), which affects the ability of the system to scale. Im Idealfall sollten Sie die Clients in Bezug auf die Server, die sie verwenden, statusfrei entwerfen.Ideally, you should design clients to be stateless with respect to the servers that they use. Speichern Sie jedoch vertrauliche Daten oder große Mengen von Client-Daten in einem verteilten serverseitigen Cache, auf den alle Instanzen der Anwendung zugreifen können, wenn die Anwendung den Sitzungszustand beibehalten muss.However, if the application must maintain session state, store sensitive data or large volumes of per-client data in a distributed server-side cache that all instances of the application can access.

Optimieren Sie Tabellenspeicherschemas.Optimize table storage schemas. Erwägen Sie bei der Verwendung von Tabellenspeichern, bei denen die Tabellen- und Spaltennamen übergeben und mit jeder Abfrage verarbeitet werden müssen, wie z. B. Azure-Tabellenspeicher, die Nutzung von kürzeren Namen, um diesen zusätzlichen Aufwand zu reduzieren.When using table stores that require the table and column names to be passed and processed with every query, such as Azure table storage, consider using shorter names to reduce this overhead. Gehen Sie keine Kompromisse hinsichtlich der Lesbarkeit und Verwaltbarkeit ein, indem Sie übermäßig kompakte Namen verwenden.However, do not sacrifice readability or manageability by using overly compact names.

Stellen Sie Ressourcenabhängigkeiten während der Bereitstellung oder beim Anwendungsstart her.Create resource dependencies during deployment or at application startup. Vermeiden Sie den wiederholten Aufruf von Methoden, die das Vorhandensein einer Ressource testen und dann die Ressource erstellen, wenn sie nicht vorhanden ist.Avoid repeated calls to methods that test the existence of a resource and then create the resource if it does not exist. Methoden wie CloudTable.CreateIfNotExists und CloudQueue.CreateIfNotExists in der Azure Storage-Clientbibliothek folgen diesem Muster.Methods such as CloudTable.CreateIfNotExists and CloudQueue.CreateIfNotExists in the Azure Storage Client Library follow this pattern. Diese Methoden können einen beträchtlichen Aufwand nötig machen, wenn sie vor jedem Zugriff auf einen Tabellenspeicher oder eine Speicherwarteschlange aufgerufen werden.These methods can impose considerable overhead if they are invoked before each access to a storage table or storage queue. Alternative:Instead:

  • Erstellen Sie die erforderlichen Ressourcen beim Bereitstellen der Anwendung oder beim ersten Start. (Ein einzelner Aufruf von CreateIfNotExists für jede Ressource im Startcode für eine Web- oder Workerrolle ist zulässig.)Create the required resources when the application is deployed, or when it first starts (a single call to CreateIfNotExists for each resource in the startup code for a web or worker role is acceptable). Achten Sie jedoch darauf, Ausnahmen zu behandeln, die auftreten können, wenn der Code versucht, auf eine Ressource zuzugreifen, die nicht vorhanden ist.However, be sure to handle exceptions that may arise if your code attempts to access a resource that doesn't exist. In diesen Fällen sollten Sie die Ausnahme protokollieren und möglicherweise einen Operator darüber benachrichtigen, dass eine Ressource fehlt.In these situations, you should log the exception, and possibly alert an operator that a resource is missing.
  • Unter bestimmten Umständen ist es angebracht, die fehlende Ressource als Teil des Ausnahmebehandlungscodes zu erstellen.Under some circumstances, it may be appropriate to create the missing resource as part of the exception handling code. Sie sollten diesen Ansatz jedoch mit Vorsicht anwenden, da das Nichtvorhandensein der Ressource auf einen Programmierfehler (z. B. einen falsch geschriebenen Ressourcennamen) oder auf ein anderes Problem auf Infrastrukturebene hinweisen könnte.But you should adopt this approach with caution as the non-existence of the resource might be indicative of a programming error (a misspelled resource name for example), or some other infrastructure-level issue.

Verwenden Sie einfache Frameworks.Use lightweight frameworks. Wählen Sie die APIs und Frameworks die Sie verwenden sorgfältig, um die Ressourcennutzung und Ausführungszeit sowie die Gesamtlast auf die Anwendung zu minimieren.Carefully choose the APIs and frameworks you use to minimize resource usage, execution time, and overall load on the application. Die Verwendung von Web-API zur Behandlung von Dienstanforderungen kann den Platzbedarf der Anwendung reduzieren und die Ausführungsgeschwindigkeit erhöhen, ist aber möglicherweise nicht für komplexere Szenarien geeignet, in denen die zusätzlichen Funktionen von Windows Communication Foundation erforderlich sind.For example, using Web API to handle service requests can reduce the application footprint and increase execution speed, but it may not be suitable for advanced scenarios where the additional capabilities of Windows Communication Foundation are required.

Erwägen Sie, die Anzahl der Dienstkonten zu minimieren.Consider minimizing the number of service accounts. Verwenden Sie z. B. ein spezielles Konto für den Zugriff auf Ressourcen oder Dienste, die Verbindungen beschränken oder bessere Leistung bringen, wenn weniger Verbindungen verwaltet werden.For example, use a specific account to access resources or services that impose a limit on connections, or perform better where fewer connections are maintained. Dieser Ansatz wird häufig für Dienste wie z. B. Datenbanken verwendet, kann aber die Möglichkeit zur genauen Überwachung der Vorgänge aufgrund der Identitätswechsel des ursprünglichen Benutzers beeinflussen.This approach is common for services such as databases, but it can affect the ability to accurately audit operations due to the impersonation of the original user.

führen Sie Leistungsprofilerstellung und Auslastungstests durch und stellen vor der endgültigen Version sicher, dass die Anwendung ausführt und nach Bedarf skaliert wird.Carry out performance profiling and load testing during development, as part of test routines, and before final release to ensure the application performs and scales as required. Diese Tests sollten auf der gleichen Art von Hardware stattfinden, wie die Produktionsplattform, mit den gleichen Datentypen und -mengen sowie der Benutzerauslastung, die in der Produktion auftreten.This testing should occur on the same type of hardware as the production platform, and with the same types and quantities of data and user load as it will encounter in production. Weitere Informationen finden Sie unter Testen der Leistung eines Clouddiensts.For more information, see Testing the performance of a cloud service.