Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für diese Checkliste für azure Well-Architected Framework Performance Efficiency:
PE:05 | Optimieren Sie die Skalierung und Partitionierung. Integrieren Sie zuverlässige und kontrollierte Skalierung und Partitionierung. Der Skalierungseinheitsentwurf der Workload ist die Grundlage der Skalierungs- und Partitionierungsstrategie. |
---|
In diesem Handbuch werden die Empfehlungen zum Skalieren und Partitionieren einer Workload beschrieben. Die Skalierung ist die Möglichkeit, die Ressourcen zu erhöhen oder zu verringern, die einer Workload basierend auf der Nachfrage zugeordnet sind. Bei der Partitionierung wird die Arbeitsauslastung in kleinere, verwaltbare Einheiten unterteilt, um Daten und Die Verarbeitung über mehrere Ressourcen hinweg zu verteilen. Eine Workload, die nicht skaliert oder partitioniert wird, kann in Zeiträumen mit hoher Nachfrage und unzureichender Kapazität in Zeiträumen mit geringer Nachfrage eine schlechte Leistung erzielen.
Definitionen
Begriff | Definition |
---|---|
Automatische Skalierung | Ein Feature, das die Kapazitätsgrenzen eines Diensts basierend auf vordefinierten Konfigurationen automatisch anpasst, sodass es bei Bedarf nach oben oder unten skaliert werden kann. |
Kapazität | Die Obergrenze oder maximale Kapazität eines bestimmten Diensts oder Features. |
Clientaffinität (Sitzungsaffinität) | Das beabsichtigte Routing von Anforderungen von einem einzelnen Client zu einer einzelnen Serverinstanz, um eine konsistente Sitzungsverwaltung sicherzustellen. |
Konsistenz (verteilte Datenbank) | Die Einheitlichkeit von Daten über mehrere Knoten in einer verteilten Datenbank hinweg, um sicherzustellen, dass alle Replikate zu einem bestimmten Zeitpunkt dieselben Daten haben. |
Konsistenz (relationale Datenbank) | Die Eigenschaft einer Transaktion, die eine Datenbank aus einem gültigen Zustand in einen anderen bringt, wobei die Datenintegrität beibehalten wird. |
Konsistenzstufe | Eine Konfiguration, die definiert, wie und wann Daten in einem verteilten Datenbanksystem repliziert werden, um den Kompromiss zwischen Konsistenz und Leistung zu bestimmen. |
Datensperre | Ein Mechanismus, der verwendet wird, um gleichzeitige Aktualisierungen derselben Daten zu verhindern. |
Horizontale Skalierung | Ein Skalierungsansatz, der Instanzen eines bestimmten Ressourcentyps hinzufügt. |
Optimistische Parallelität | Ein Ansatz zum Aktualisieren von Datenbanken, bei dem Momentaufnahmen verwendet werden, um Aktualisierungen anstelle herkömmlicher Sperrmechanismen vorzunehmen. |
Partitionierung | Der Vorgang der physischen Aufteilung von Daten in separate Datenspeicher. |
Skalierbarkeit | Die Fähigkeit einer Workload, ihre Kapazitätsgrenzen dynamisch zu ändern, um unterschiedliche Anforderungen zu erfüllen. |
Skalierungseinheit | Eine Gruppe von Ressourcen, die proportional zusammen skaliert werden. |
Statusaffinität | Die Speicherung von Clientsitzungsdaten auf einem einzelnen Server, sodass derselbe Server nachfolgende Anforderungen vomselben Client verarbeitet. |
Vertikale Skalierung | Ein Skalierungsansatz, der vorhandenen Ressourcen Rechenkapazität hinzufügt. |
Sowohl die Skalierung als auch die Partitionierung tragen zur Leistungseffizienz bei, indem sichergestellt wird, dass Ressourcen effektiv verwendet werden und die Workload unterschiedliche Lasten verarbeiten kann. Diese Praktiken sind besonders wichtig in Cloudumgebungen, in denen Anwendungen flexibel und anpassungsfähig für sich ändernde Anforderungen sein müssen. Die Skalierung stellt sicher, dass Sie die Workloadkapazität erweitern können, um steigende Anforderungen zu erfüllen. Mithilfe der Partitionierung können Sie Aufgaben oder Daten effizient aufteilen, um diese wachsenden Anforderungen zu bewältigen. Die Grundlage dieser beiden Prozesse ist der Skalierungseinheitsentwurf der Workload. Es bestimmt, wie Ihre Workload wachsen und Aufgaben verteilen soll. Durch die Integration eines zuverlässigen und kontrollierten Ansatzes für die Skalierung und Partitionierung können Sie potenzielle Arbeitsauslastungen ineffizienzen querschritten.
Optimieren der Skalierung
Die Optimierungsskalierung ist der Prozess der Anpassung der Anzahl von Servern, Instanzen oder Ressourcen, um die schwankenden Anforderungen einer Workload zu erfüllen. Dadurch wird sichergestellt, dass die Arbeitsauslastung erhöhte Datenverkehrs- oder Anforderungen verarbeiten kann, ohne dass Leistungseinbußen oder Ausfallzeiten auftreten.
Auswählen einer Skalierungsstrategie
Die Auswahl einer Skalierungsstrategie umfasst die Entscheidung zwischen vertikalen oder horizontalen Methoden, um die Kapazität einer Workload basierend auf ihren spezifischen Anforderungen zu verbessern. Durch die Auswahl der richtigen Strategie wird sichergestellt, dass Ressourcen effizient angepasst werden, um Arbeitsauslastungsanforderungen ohne Übernutzung oder Abfall zu erfüllen. Um die richtige Skalierungsstrategie auszuwählen, müssen Sie die Anwendungsfälle für die vertikale und horizontale Skalierung und deren Erfüllung der Anforderungen Ihrer Workload verstehen.
Grundlegendes zur vertikalen Skalierung. Mithilfe der vertikalen Skalierung können Sie die Kapazität einer einzelnen Ressource erhöhen, z. B. das Upgrade auf einen größeren Server oder eine größere Instanzgröße. Die vertikale Skalierung ist nützlich, wenn die Workload von erhöhter Verarbeitungsleistung, Arbeitsspeicher oder anderen Ressourcen innerhalb einer einzigen Instanz profitieren kann. Die vertikale Skalierung eignet sich für Workloads, die nicht einfach in kleinere Teile unterteilt werden oder wenn die Anwendungsarchitektur keine horizontale Skalierung unterstützt.
Grundlegendes zur horizontalen Skalierung. Mithilfe der horizontalen Skalierung können Sie weitere Instanzen oder Ressourcen hinzufügen, um die Workload auf mehreren Servern zu verteilen. Die horizontale Skalierung bietet Vorteile wie verbesserte Resilienz, erhöhte Kapazität und die Möglichkeit, erhöhte Datenverkehrs- oder Workloadanforderungen zu bewältigen. Es ist effektiv für cloudeigene Anwendungen, die für die Ausführung auf mehreren Knoten entwickelt wurden. Die horizontale Skalierung eignet sich für Workloads, die in kleinere Teile unterteilt werden können, die unabhängig voneinander ausgeführt werden.
Verstehen sie die Arbeitsauslastung. Die Eignung der vertikalen oder horizontalen Skalierung hängt von den spezifischen Merkmalen und Anforderungen der Arbeitsauslastung ab. Regelmäßige Leistungsüberwachung und Tests in den folgenden Bereichen können dazu beitragen, die Skalierungsstrategie im Laufe der Zeit zu optimieren:
Anforderungen: Verstehen Sie die spezifischen Anforderungen der Workload, indem Sie Faktoren wie Ressourcenanforderungen, Skalierbarkeitsanforderungen und die Einschränkungen der Workload berücksichtigen.
Skalierungseinheiten: Erstellen Sie einen Skalierungseinheitsentwurf für Komponenten, die voraussichtlich zusammen skaliert werden. Beispielsweise erfordern 100 virtuelle Computer möglicherweise zwei Warteschlangen und drei Speicherkonten, um die zusätzliche Workload zu verarbeiten. Die Skalierungseinheit wäre 100 virtuelle Computer, zwei Warteschlangen und drei Speicherkonten. Sie sollten unabhängig voneinander alle Komponenten skalieren, die fluktuierende Kapazitätsnutzungsschwankungen aufweisen.
Architektur: Bewerten des Entwurfs der Anwendungsarchitektur. Einige Anwendungen können inhärent so konzipiert sein, dass sie horizontal skaliert werden können, mit zustandslosen Komponenten, die problemlos über mehrere Instanzen verteilt werden können. Andere Anwendungen verfügen möglicherweise über zustandsbehaftete Komponenten oder Abhängigkeiten, die die vertikale Skalierung geeigneter machen. Bewerten Sie die Skalierbarkeits- und Flexibilitätsanforderungen der Arbeitsauslastung.
Entwerfen der Zuskalierung der Infrastruktur
Das Entwerfen der zu skalierenden Infrastruktur ist der Prozess der Erstellung einer Architektur, die steigende Anforderungen und Arbeitsauslastung bewältigen kann, indem Ressourcen nach Bedarf hinzugefügt oder angepasst werden. Es umfasst die Planung und Implementierung von Lösungen, die horizontal oder vertikal skaliert werden können, um das Wachstum zu berücksichtigen. Strategien umfassen das Vermeiden von Singletons, die zu Engpässen werden und Anwendungskomponenten entkoppeln können, um eine unabhängige Skalierbarkeit sicherzustellen. Wenn Sie eine Workload so entwerfen, dass sie skalierbar ist, kann sie die Workload effektiv über mehrere Ressourcen verteilen, was Engpässe verhindert und die Ressourcenauslastung maximiert.
Vermeiden Sie Singletons. Sie sollten die Verwendung einer einzelnen, zentralisierten Ressource für die gesamte Workload vermeiden. Verteilen Sie stattdessen Ihre Arbeitsauslastung über mehrere Ressourcen, um eine bessere Skalierbarkeit, Fehlertoleranz und Leistung zu erzielen. Erkunden Sie einige spezifische Beispiele und Entwurfsüberlegungen, um Singletons in Workloadressourcen zu vermeiden:
Warteschlangenbasiertes Lastenausgleich: Anstatt auf eine einzelne Warteschlange zum Verarbeiten von Nachrichten zu vertrauen, sollten Sie die Partitionierung der Workload über mehrere Warteschlangen hinweg in Betracht ziehen, um die Verarbeitungslast zu verteilen. Es bietet eine bessere Skalierbarkeit und parallele Verarbeitung.
Datenverarbeitung: Singleton-Muster treten häufig in Datenverarbeitungsszenarien auf, in denen die Verarbeitung nicht ausflüht. Unterteilen Sie lange ausgeführte Vorgänge in kleinere Vorgänge, die besser skaliert werden können, um die Arbeitsauslastung über mehrere Ressourcen hinweg zu verteilen und die Vorteile des Parallelismus zu nutzen.
Entwurfsmuster: Designmuster wie Fan-out/Fan-in oder Pipes und Filters können dabei helfen, Singletons in Workflows zu vermeiden. Diese Muster ermöglichen die Verteilung von Verarbeitungsaufgaben über mehrere Ressourcen hinweg und fördern Skalierbarkeit und Flexibilität.
Decouple-Komponenten. Die Entkoppelung von Anwendungskomponenten ist ein wichtiger Aspekt beim Entwerfen der Skalierbarkeit. Sie umfasst das Aufteilen der Anwendung in kleinere, unabhängige Komponenten, die unabhängig von bestimmten Arbeitsauslastungsanforderungen ausgeführt und skaliert werden können. Wenn beispielsweise eine Komponente aufgrund einer erhöhten Nachfrage mehr Ressourcen benötigt, können Sie diese Komponente skalieren, ohne dass sich dies auf die anderen auswirkt. Diese Flexibilität sorgt für eine effiziente Ressourcenzuordnung und verhindert Engpässe. Durch Entkoppeln von Komponenten können Sie Fehler isolieren und die Auswirkungen auf die gesamte Anwendung minimieren. Wenn eine Komponente fehlschlägt, können die anderen Komponenten weiterhin unabhängig funktionieren.
Entkoppelte Komponenten sind einfacher zu verwalten und zu aktualisieren. Änderungen oder Aktualisierungen an einer Komponente können ohne Auswirkungen auf die anderen vorgenommen werden, da sie unabhängig sind. Befolgen Sie die folgenden Richtlinien, um Anwendungskomponenten für Skalierbarkeit zu entkoppeln:
Trennung von Bedenken: Identifizieren Sie die Verantwortlichkeiten und Funktionen Ihrer Anwendung. Teilen Sie die Verantwortlichkeiten auf der Grundlage ihrer spezifischen Aufgaben in separate Komponenten auf. Beispielsweise verfügen Sie möglicherweise über separate Komponenten für die Benutzerauthentifizierung, die Datenverarbeitung und die Benutzeroberfläche.
Lose Kopplung: Entwerfen Sie die Komponenten so, dass sie über gut definierte Schnittstellen und Protokolle miteinander kommunizieren. Dieses Design reduziert Abhängigkeiten zwischen Komponenten und ermöglicht eine einfachere Ersetzung oder Skalierung einzelner Komponenten.
Asynchrone Kommunikation: Verwenden Sie asynchrone Kommunikationsmuster wie Nachrichtenwarteschlangen oder ereignisgesteuerte Architekturen, um Komponenten weiter zu entkoppeln. Diese Muster ermöglichen es Komponenten, Aufgaben unabhängig in ihrem eigenen Tempo zu verarbeiten und die Gesamtskalierbarkeit zu verbessern.
Microservices: Erwägen Sie die Implementierung von Microservices, die kleine, unabhängige Dienste sind, die sich auf bestimmte Geschäftsfunktionen konzentrieren. Jeder Microservice kann unabhängig entwickelt, bereitgestellt und skaliert werden, was mehr Flexibilität und Skalierbarkeit bietet.
Entwerfen der Zuskalierung der Anwendung
Beim Skalieren einer Workload sollten Sie die Anwendung so entwerfen, dass sie die Last verteilt. Da Sie auf Infrastrukturebene weitere Replikate hinzufügen können, bedeutet dies nicht, dass Ihre Anwendung die Replikate verwenden kann. Das Entwerfen einer Anwendung zur Skalierung ist die Strukturierung einer Anwendung, sodass sie erhöhte Anforderungen bewältigen kann, indem sie ihre Arbeitsauslastung über Ressourcen verteilt. Vermeiden Sie Lösungen, die eine Clientaffinität, Datensperre oder Statusaffinität für eine einzelne Instanz erfordern. Sie möchten einen Client oder Prozess an eine Ressource weiterleiten, die über verfügbare Kapazität verfügt. Berücksichtigen Sie die folgenden Strategien, um die Anwendungsskalierbarkeit zu gestalten:
Entfernen Sie den serverseitigen Sitzungszustand. Sie sollten Anwendungen so entwerfen, dass sie nach Möglichkeit zustandslos sind. Für zustandsbehaftete Anwendungen sollten Sie einen Zustandsspeicher verwenden, der sich außerhalb ihres Servers befindet. Das Externalisieren des Sitzungszustands ist die Methode, Sitzungsdaten außerhalb des Anwendungsservers oder Containers zu speichern. Sie können den Sitzungsstatus externisieren, um Sitzungsdaten auf mehreren Servern oder Diensten zu verteilen, wodurch eine nahtlose Sitzungsverwaltung in einer verteilten Umgebung ermöglicht wird. Berücksichtigen Sie beim Externalisieren des Sitzungszustands Folgendes:
Bewerten Sie Ihre Sitzungsanforderungen. Verstehen sie die Sitzungsdaten, die gespeichert und verwaltet werden müssen. Berücksichtigen Sie Sitzungsattribute, Sitzungstimeouts und alle spezifischen Anforderungen für die Sitzungsreplikation oder Persistenz. Bestimmen Sie die Größe des Sitzungszustands und die Häufigkeit von Lese- und Schreibvorgängen.
Wählen Sie eine Lösung aus. Wählen Sie eine Speicherlösung aus, die ihren Leistungs- und Skalierbarkeitsanforderungen entspricht. Zu den Optionen gehören die Verwendung eines verteilten Caches, einer Datenbank oder eines Sitzungsstatusdiensts. Berücksichtigen Sie Faktoren wie Datenkonsistenz, Latenz und Skalierbarkeit, wenn Sie Ihre Wahl treffen.
Richten Sie Ihre Anwendung ein. Aktualisieren Sie Ihre Anwendung so, dass die ausgewählte Sitzungszustandsspeicherlösung verwendet wird. Möglicherweise müssen Sie die Konfigurationsdateien oder den Code Ihrer Anwendung ändern, um eine Verbindung mit dem externen Speicherdienst herzustellen.
Aktualisieren Sie Ihre Logik. Ändern Sie die Sitzungsverwaltungslogik Ihrer Anwendung, um Sitzungsdaten aus der externen Speicherlösung zu speichern und abzurufen. Möglicherweise müssen Sie APIs oder Bibliotheken verwenden, die von der Speicherlösung zum Verwalten des Sitzungszustands bereitgestellt werden.
Vermeiden Sie die Clientaffinität. Clientaffinität wird auch als Sitzungsaffinität oder Haftsitzungen bezeichnet. Wenn Sie die Clientaffinität beseitigen, verteilen Sie Clientanforderungen gleichmäßig über mehrere Replikate oder Server hinweg, ohne alle Anforderungen von einem Client an dasselbe Replikat weiterzuleiten. Diese Konfiguration kann die Skalierbarkeit und Leistung von Anwendungen verbessern, indem jedes verfügbare Replikat die Anforderungen verarbeiten kann.
Überprüfen Sie Ihren Lastenausgleichsalgorithmus. Ein Lastenausgleichsalgorithmus kann unbeabsichtigtes und künstliches Anheften von Clients verursachen, bei denen zu viele Anforderungen an eine Back-End-Instanz gesendet werden. Das Anheften kann passieren, wenn der Algorithmus so eingerichtet ist, dass immer Anforderungen vomselben Benutzer an dieselbe Instanz gesendet werden. Es kann auch passieren, wenn die Anforderungen einander zu ähnlich sind.
Entfernen Sie die Datensperre. Die Datensperre gewährleistet Konsistenz, hat jedoch Leistungsnachteile. Es kann zu Sperreskalationen führen und negative Auswirkungen auf Parallelität, Latenz und Verfügbarkeit haben. Um die Datensperre zu vermeiden, sollten Sie optimistische Parallelität implementieren. Nichtrelationale Datenbanken sollten optimistische Parallelitätssteuerelemente verwenden und die richtige Konsistenzstufe aufweisen. Ihre Strategie für die Datenpartitionierung sollte auch Ihre Parallelitätsanforderungen unterstützen.
Verwenden Sie die dynamische Dienstermittlung. Dynamische Dienstermittlung ist der Prozess der automatischen Erkennung und Registrierung von Diensten in einem verteilten System. Es ermöglicht Clients, verfügbare Dienste zu ermitteln, ohne eng mit bestimmten Instanzen verbunden zu sein. Clients sollten nicht in der Lage sein, eine direkte Abhängigkeit von einer bestimmten Instanz in der Workload zu übernehmen. Um diese Abhängigkeiten zu vermeiden, sollten Sie einen Proxy verwenden, um Clientverbindungen zu verteilen und neu zu verteilen. Der Proxy fungiert als Vermittler zwischen Clients und Diensten und stellt eine Abstraktionsebene bereit, mit der Dienste hinzugefügt oder entfernt werden können, ohne dass sich dies auf Clients auswirkt.
Verwenden Sie Hintergrundaufgaben. Wenn eine Anwendung skaliert wird, kann sie eine zunehmende Workload oder eine höhere Anzahl gleichzeitiger Anforderungen verarbeiten. Das Entladen intensiver Aufgaben als Hintergrundaufgaben ermöglicht es der Hauptanwendung, Benutzeranforderungen zu verarbeiten, ohne ressourcenintensive Vorgänge zu überwältigen. Führen Sie die folgenden Schritte aus, um Aufgaben als Hintergrundaufgaben zu entladen:
Suchen Sie die CPU-intensiven und E/A-intensiven Aufgaben in Ihrer Anwendung, die Sie entladen können. Diese Aufgaben umfassen in der Regel schwere Berechnungen oder Interaktionen mit externen Ressourcen wie Datenbanken oder Netzwerkvorgängen.
Entwerfen Sie Ihre Anwendung so, dass Hintergrundaufgaben unterstützt werden. Entkoppeln Sie die intensiven Aufgaben von der Hauptanwendungslogik, und stellen Sie einen Mechanismus zum Starten und Verwalten von Hintergrundaufgaben bereit.
Implementieren Sie die Verarbeitung von Hintergrundaufgaben mit geeigneten Technologien oder Frameworks. Umfassen Sie Features, die von Ihrer Programmiersprache oder Plattform bereitgestellt werden, z. B. asynchrone Programmierung, Threading oder Aufgabenwarteschlangen. Enthalten intensive Vorgänge in separaten Aufgaben oder Threads, können diese Aufgaben gleichzeitig ausgeführt oder geplant werden, um in bestimmten Intervallen ausgeführt zu werden.
Verteilen Sie Hintergrundaufgaben, wenn viele davon vorhanden sind oder wenn die Vorgänge erhebliche Zeit oder Ressourcen erfordern. Eine mögliche Lösung finden Sie im Muster konkurrierender Verbraucher.
Konfigurieren der Skalierung
Das Konfigurieren der Skalierung ist der Prozess der Einrichtung und Anpassung von Parametern, um Ressourcen basierend auf Arbeitsauslastungsanforderungen dynamisch zuzuordnen. Es umfasst Strategien wie die Verwendung von Features für die automatische Skalierung, das Verständnis von Dienstskalierungsgrenzen und die Implementierung aussagekräftiger Lademetriken. Durch die richtige Konfiguration wird sichergestellt, dass eine Anwendung auf unterschiedliche Anforderungen reagieren kann und gleichzeitig die Effizienz maximiert. Berücksichtigen Sie beim Konfigurieren der Skalierung die folgenden Strategien:
Verwenden Sie Dienste mit automatischer Skalierung. Die Autoskalierungsfunktion skaliert die Infrastruktur automatisch so, dass sie den Anforderungen entspricht. Verwenden Sie Plattform-as-a-Service-Angebote (PaaS) mit integrierten Autoscale-Features. Die Einfache Skalierung auf PaaS ist ein großer Vorteil. Beispielsweise erfordert das Skalieren virtueller Computer einen separaten Lastenausgleich, eine Clientanforderungsbehandlung und einen extern gespeicherten Zustand. PaaS-Angebote behandeln die meisten dieser Aufgaben.
Schränken Sie die automatische Skalierung ein. Legen Sie die Grenzwerte für die automatische Skalierung fest, um die Überskalierung zu minimieren, die zu unnötigen Kosten führen könnte. Manchmal können Sie keine Skalierungsgrenzwerte festlegen. In diesen Fällen sollten Sie Benachrichtigungen festlegen, um Sie zu benachrichtigen, wenn die Komponente die maximale Skalierungsgrenze erreicht und überkaliert.
Grundlegendes zu Dienstskalierungsgrenzen. Wenn Sie die Grenzwerte für die Dienstskalierung, Schritten und Einschränkungen verstehen, können Sie fundierte Entscheidungen treffen, wenn Sie einen Dienst auswählen. Skalierungsgrenzen bestimmen, ob Ihr ausgewählter Dienst die erwartete Workload verarbeiten kann, effizient skalieren und die Leistungsanforderungen Ihrer Anwendung erfüllen kann. Zu berücksichtigende Skalierungsgrenzen sind:
Skalierungsgrenzwerte: Skalierungsgrenzwerte sind die maximale Kapazität, die ein Standort oder Dienst verarbeiten kann. Es ist wichtig, diese Grenzwerte zu kennen, um sicherzustellen, dass der Dienst die erwartete Arbeitsauslastung aufnehmen und Spitzenauslastung ohne Leistungsbeeinträchtigung verarbeiten kann. Jede Ressource hat eine obere Skalierungsgrenze. Wenn Sie über die Skalierungsgrenzen hinausgehen müssen, sollten Sie Ihre Workload partitionieren.
Skalierungsschritte: Dienste werden in definierten Schritten skaliert. Beispielsweise können Computedienste nach Instanzen und Pods skaliert werden, während Datenbanken nach Instanzen, Transaktionseinheiten und virtuellen Kernen skaliert werden können. Es ist wichtig, diese Inkremente zu verstehen, um die Ressourcenzuordnung zu optimieren und ressourcenflapping zu verhindern.
Skalierungseinschränkungen: Einige Dienste ermöglichen ihnen das Skalieren oder Verkleineren, beschränken aber ihre Fähigkeit, die Skalierung automatisch rückgängig zu machen. Sie müssen manuell skaliert werden, oder Sie müssen möglicherweise eine neue Ressource erneut bereitstellen. Diese Einschränkungen dienen häufig zum Schutz der Arbeitsauslastung. Das Skalieren oder Skalieren in kann Auswirkungen auf die Verfügbarkeit und Leistung der Workload haben. Ein Dienst erzwingt möglicherweise bestimmte Einschränkungen oder Einschränkungen, um sicherzustellen, dass die Workload über ausreichende Ressourcen verfügt, um effektiv zu arbeiten. Diese Einschränkungen können sich auf die Datenkonsistenz und Synchronisierung auswirken, insbesondere in verteilten Systemen. Der Dienst verfügt möglicherweise über Mechanismen zum Behandeln der Datenreplikation und -Konsistenz während der Skalierung nach oben oder außerhalb, bietet aber möglicherweise nicht die gleiche Unterstützung für die Skalierung nach unten oder in.
Verwenden Sie aussagekräftige Lademetriken. Die Skalierung sollte aussagekräftige Lademetriken als Skalierungstrigger verwenden. Aussagekräftige Lademetriken umfassen einfache Metriken, z. B. CPU oder Arbeitsspeicher. Sie umfassen auch erweiterte Metriken, z. B. Warteschlangentiefe, SQL-Abfragen, benutzerdefinierte Metrikabfragen und LÄNGE der HTTP-Warteschlange. Erwägen Sie die Verwendung einer Kombination aus einfachen und erweiterten Lademetriken als Skalierungstrigger.
Verwenden Sie einen Puffer. Ein Puffer ist nicht verwendete Kapazität, die zum Verarbeiten von Spitzen bei Bedarf verwendet werden kann. Eine gut gestaltete Workload-Pläne für unerwartete Spitzen bei der Arbeitsauslastung. Sie sollten einen Puffer hinzufügen, um Spitzen für die horizontale und vertikale Skalierung zu behandeln.
Verhindern Sie das Flapping. Beim Flapping handelt es sich um eine Schleifenbedingung, die auftritt, wenn ein Skalierungsereignis ein entgegengesetztes Skalierungsereignis auslöst und eine fortlaufende Rück- und Rückskalierungsaktion erstellt. Wenn die Skalierung beispielsweise die Anzahl der Instanzen verringert, kann die CPU-Auslastung in den verbleibenden Instanzen steigen, wodurch ein Scaleout-Ereignis ausgelöst wird. Das Skalierungsereignis wiederum führt dazu, dass die CPU-Auslastung sinkt und den Prozess wiederholt.
Es ist wichtig, einen angemessenen Rand zwischen den Skalierungs- und Skalierungsschwellenwerten auszuwählen, um das Flapping zu vermeiden. Sie können häufige und unnötige Skalierungs- und Skalierungsaktionen verhindern, indem Sie Schwellenwerte festlegen, die einen erheblichen Unterschied bei der CPU-Auslastung bieten.
Verwenden Sie Bereitstellungsstempel. Es gibt Techniken, die das Skalieren einer Workload vereinfachen. Sie können das Bereitstellungsstempelmuster verwenden, um eine Workload einfach zu skalieren, indem Sie eine oder mehrere Skalierungseinheiten hinzufügen.
Risiko: Während die Skalierung dazu beiträgt, die Kosten zu optimieren, indem sie die Kapazität an die Nachfrage anpassen, kann dies zu erhöhten Gesamtkosten in langen Zeiträumen hoher Nachfrage führen.
Testen der Skalierung
Das Testen der Skalierung umfasst die Simulation verschiedener Workloadszenarien in einer kontrollierten Umgebung, um zu bewerten, wie eine Workload auf unterschiedliche Anforderungen reagiert. Sie trägt dazu bei, dass die Arbeitsauslastung effizient skaliert wird und die Leistungseffizienz bei unterschiedlichen Lasten maximiert wird.
Sie müssen sicherstellen, dass Ihre Arbeitsauslastung unter realen Bedingungen effizient skaliert wird. Es ist wichtig, Belastungs- und Stresstests in einer Umgebung durchzuführen, die Ihre Produktionseinrichtung widerspiegelt. Diese Tests, die in Nichtproduktionsumgebungen durchgeführt werden, ermöglichen es Ihnen, sowohl vertikale als auch horizontale Skalierungsstrategien zu bewerten und zu bestimmen, welche die Leistung am effektivsten optimiert. Hier ist ein empfohlener Ansatz zum Testen der Skalierung:
Definieren sie Arbeitsauslastungsszenarien. Identifizieren Sie die wichtigsten Workloadszenarien, die Sie testen müssen, z. B. erhöhen Sie den Benutzerdatenverkehr, gleichzeitige Anforderungen, datenvolume oder ressourcennutzung.
Verwenden Sie produktionsähnliche Testumgebung. Erstellen Sie eine separate Testumgebung, die der Produktionsumgebung in Bezug auf Infrastruktur, Konfiguration und Daten sehr ähnlich ist.
Legen Sie Leistungsmetriken fest. Definieren Sie die Leistungsmetriken, die gemessen werden sollen, z. B. Antwortzeit, Durchsatz, CPU- und Arbeitsspeicherauslastung sowie Fehlerraten.
Entwickeln Sie Testfälle. Entwickeln Sie Testfälle, die verschiedene Workloadszenarien simulieren, und erhöhen Sie die Auslastung schrittweise, um die Leistung auf verschiedenen Ebenen zu bewerten.
Führen Sie Tests aus und überwachen Sie sie. Führen Sie die Tests mithilfe der definierten Testfälle aus, und sammeln Sie Leistungsdaten auf jeder Ladeebene. Überwachen des Arbeitsauslastungsverhaltens, des Ressourcenverbrauchs und der Leistungsbeeinträchtigung.
Analysieren und optimieren Sie die Skalierung. Analysieren Sie die Testergebnisse, um Leistungsengpässe, Skalierbarkeitseinschränkungen oder Verbesserungsbereiche zu identifizieren. Optimieren Sie die Konfiguration, Infrastruktur oder den Code, um Skalierbarkeit und Leistung zu verbessern. Es dauert Zeit, bis die Skalierung abgeschlossen ist, also testen Sie die Auswirkungen von Skalierungsverzögerungen.
Adressabhängigkeiten. Suchen sie potenzielle Abhängigkeitsprobleme. Die Skalierung oder Partitionierung in einem Bereich einer Workload kann zu Leistungsproblemen bei einer Abhängigkeit führen. Die zustandsbehafteten Teile einer Workload, z. B. Datenbanken, sind die häufigste Ursache für Abhängigkeitsleistungsprobleme. Datenbanken erfordern ein sorgfältiges Design, um horizontal zu skalieren. Sie sollten Measures, z. B. optimistische Parallelität oder Datenpartitionierung, in Betracht ziehen, um einen größeren Durchsatz für die Datenbank zu ermöglichen.
Wiederholen Sie den Test nach Anpassungen. Wiederholen Sie die Skalierbarkeitstests nach der Implementierung von Optimierungen, um die Verbesserungen zu überprüfen und sicherzustellen, dass die Workload die erwarteten Workloads effizient verarbeiten kann.
Kompromiss: Berücksichtigen Sie die Budgetbeschränkungen und Kosteneffizienzziele Ihrer Arbeitsauslastung. Die vertikale Skalierung kann aufgrund des Bedarfs an größeren und leistungsstärkeren Ressourcen höhere Kosten umfassen. Die horizontale Skalierung bietet Kosteneinsparungen mithilfe kleinerer Instanzen, die basierend auf Bedarf hinzugefügt oder entfernt werden können.
Partitionsworkload
Die Partitionierung ist der Prozess der Aufteilung eines großen Datasets oder einer Arbeitsauslastung in kleinere, verwaltbare Teile, die als Partitionen bezeichnet werden. Jede Partition enthält eine Teilmenge der Daten oder Arbeitsauslastungen und wird in der Regel separat gespeichert oder verarbeitet. Die Partitionierung ermöglicht die parallele Verarbeitung und reduziert den Inhalt. Das Aufteilen der Arbeitsauslastung in kleinere Einheiten ermöglicht es der Anwendung, jede Einheit unabhängig voneinander zu verarbeiten. Das Ergebnis ist eine bessere Verwendung von Ressourcen und schnellere Verarbeitungszeiten. Die Partitionierung hilft auch beim Verteilen der Daten auf mehreren Speichergeräten, wodurch die Last auf einzelnen Geräten reduziert und die Gesamtleistung verbessert wird.
Grundlegendes zur Partitionierung
Der spezifische Partitionierungsansatz, den Sie verwenden, hängt von der Art der Daten oder Workload ab, die Sie verwenden, und der technologie, die Sie verwenden. Zu den gängigen Strategien für die Partitionierung gehören:
Horizontale Partitionierung: Bei diesem Ansatz wird das Dataset oder die Workload basierend auf bestimmten Kriterien geteilt, z. B. Wertebereiche oder bestimmte Attribute. Jede Partition enthält eine Teilmenge der Daten, die den definierten Kriterien entsprechen.
Vertikale Partitionierung: Bei diesem Ansatz wird das Dataset oder die Workload basierend auf bestimmten Attributen oder Spalten geteilt. Jede Partition enthält eine Teilmenge der Spalten oder Attribute, die einen effizienteren Zugriff auf die erforderlichen Daten ermöglichen.
Funktionale Partitionierung: Bei diesem Ansatz werden die Daten oder Arbeitsauslastungen basierend auf den spezifischen Funktionen oder Vorgängen geteilt, die ausgeführt werden müssen. Jede Partition enthält die Daten oder Komponenten, die für eine bestimmte Funktion erforderlich sind, und ermöglicht eine optimierte Verarbeitung und Leistung.
Planen der Partitionierung
Es ist wichtig, Faktoren wie Datenverteilung, Abfragemuster, Datenwachstum und Workloadanforderungen bei der Partitionierung zu berücksichtigen. Eine ordnungsgemäße Planung und Planung sind unerlässlich, um die Effektivität der Partitionierung zu gewährleisten und die Leistungsfähigkeit zu maximieren. Wenn Sie die Partitionierung als Nachherein adressieren, ist dies schwieriger, da Sie bereits über eine Live-Workload verfügen, die verwaltet werden kann. Möglicherweise müssen Sie die Datenzugriffslogik ändern, große Datenmengen über Partitionen verteilen und die fortgesetzte Verwendung während der Datenverteilung unterstützen.
Implementieren der Partitionierung
Es ist wichtig, die Merkmale Ihrer Daten, Zugriffsmuster, Parallelitätsanforderungen und Skalierbarkeitsziele zu analysieren, wenn Sie entscheiden, welche Art von Partitionierung verwendet werden soll. Jeder Partitionstyp hat seine eigenen Vorteile und Überlegungen. Im Folgenden sind einige Faktoren aufgeführt, die für jeden Partitionstyp zu berücksichtigen sind:
Die horizontale Partitionierung ist geeignet, wenn Sie die Daten über mehrere Ressourcen oder Server verteilen möchten, um die Skalierbarkeit und Leistung zu verbessern. Es ist effektiv, wenn die Workload unabhängig von jeder Partition parallelisiert und verarbeitet werden kann. Erwägen Sie die horizontale Partitionierung, wenn mehrere Benutzer oder Prozesse gleichzeitig auf das Dataset zugreifen oder aktualisieren müssen.
Die vertikale Partitionierung ist geeignet, wenn häufig auf bestimmte Attribute oder Spalten zugegriffen wird, während auf andere weniger häufig zugegriffen wird. Die vertikale Partitionierung ermöglicht einen effizienten Zugriff auf die erforderlichen Daten, indem unnötige Datenabrufe minimiert werden.
Die funktionale Partitionierung ist geeignet, wenn unterschiedliche Funktionen unterschiedliche Teilmengen der Daten erfordern und unabhängig verarbeitet werden können. Die funktionale Partitionierung kann die Leistung optimieren, indem jede Partition bestimmte Vorgänge konzentrieren kann.
Testen und Optimieren der Partitionierung
Testen Sie das Partitionierungsschema, um die Effektivität und Effizienz der Strategie zu überprüfen, damit Sie Anpassungen vornehmen können, um die Leistung zu verbessern. Messen Sie Faktoren wie Reaktionszeit, Durchsatz und Skalierbarkeit. Vergleichen Sie die Ergebnisse mit Leistungszielen, und identifizieren Sie Engpässe oder Probleme. Anhand der Analyse identifizieren Sie potenzielle Optimierungsmöglichkeiten. Möglicherweise müssen Sie Daten auf Partitionen neu verteilen, Partitionsgrößen anpassen oder die Partitionskriterien ändern.
Kompromiss: Die Partitionierung fügt dem Entwurf und der Entwicklung einer Workload Komplexität hinzu. Die Partitionierung erfordert Unterhaltungen und Planungen zwischen Entwicklern und Datenbankadministratoren.
Risiko: Die Partitionierung führt zu einigen potenziellen Problemen, die berücksichtigt und behoben werden müssen, darunter:
Datenverknortung: Die Partitionierung kann zu einer Neigung der Daten führen, bei denen bestimmte Partitionen im Vergleich zu anderen Daten oder Arbeitsauslastungen eine unverhältnismäßige Menge an Daten oder Arbeitsauslastungen erhalten. Datenverknügungen können zu Leistungsungleichgewichten und zu einer erhöhten Abneigung bei bestimmten Partitionen führen.
Abfrageleistung: Schlecht gestaltete Partitionierungsschemas können sich negativ auf die Abfrageleistung auswirken. Wenn Abfragen auf Daten über mehrere Partitionen zugreifen müssen, ist möglicherweise eine zusätzliche Koordination und Kommunikation zwischen Partitionen erforderlich, was zu einer erhöhten Latenz führt.
Azure-Erleichterung
Optimieren der Skalierung. Azure verfügt über die Infrastrukturkapazität, um die vertikale und horizontale Skalierung zu unterstützen. Azure-Dienste weisen unterschiedliche Leistungsstufen auf, die als SKUs bezeichnet werden. SKUs ermöglichen es Ihnen, vertikal zu skalieren. Viele der Azure-Ressourcen unterstützen die automatische Skalierung oder andere direkte Skalierungsoptionen. Einige Ressourcen unterstützen erweiterte Metriken oder benutzerdefinierte Eingaben, um das Skalierungsverhalten zu optimieren. Die meisten Skalierungsimplementierungen in Azure können Grenzwerte festlegen und die erforderliche Observability unterstützen, um auf Änderungen hingewiesen zu werden.
Mit Azure Monitor können Sie verschiedene Metriken und Bedingungen in Ihren Anwendungen und Ihrer Infrastruktur überwachen. Sie können Monitor verwenden, um automatisierte Skalierungsaktionen basierend auf vordefinierten Regeln auszulösen. Beispielsweise können Sie in Azure Kubernetes Service (AKS) Monitor verwenden, um die automatische Horizontale Pod-Skalierung (HPA) und die automatische Clusterskalierung zu aktivieren. Mithilfe der Überwachungs- und Warnfunktionen von Monitor können Sie die Skalierung in Azure effektiv vereinfachen und sicherstellen, dass Ihre Anwendungen und Infrastruktur dynamisch an die Anforderungen angepasst werden können.
Sie können auch eine benutzerdefinierte automatische Skalierung in Azure erstellen. Sie können Warnungen in "Überwachen" für Ressourcen verwenden, die nicht über ein Feature für die automatische Skalierung verfügen. Diese Warnungen können so eingerichtet werden, dass sie abfragebasiert oder metrikbasiert sind und Aktionen mithilfe von Azure Automation ausführen können. Automatisierung bietet eine Plattform zum Hosten und Ausführen von PowerShell- und Python-Code in Azure, der Cloud und lokalen Umgebungen. Es bietet Features wie das Bereitstellen von Runbooks bei Bedarf oder nach einem Zeitplan, Ausführungsverlauf und Protokollierung, integrierte Geheimspeicher und Quellcodeverwaltungsintegration.
Entwerfen von Anwendungen zur Skalierung: Hier sind einige Möglichkeiten, wie Azure das Design der Anwendungsskalierung erleichtert;
Entfernen der Datensperre: In der Azure SQL-Datenbank können Sie eine optimierte Sperrung aktivieren, um die Leistung von Datenbanken zu verbessern, die eine strenge Konsistenz erfordern.
Verwenden von Hintergrundaufgaben: Azure bietet Dienste und Anleitungen für die Implementierung von Hintergrundaufträgen. Weitere Informationen finden Sie unter "Hintergrundaufträge".
Implementieren des Lastenausgleichs: Azure stellt Lastenausgleichsgeräte bereit, die keine Clientaffinität erfordern. Zu diesen Lastenausgleichsmodulen gehören Azure Front Door, Azure Application Gateway und Azure Load Balancer.
Partitionieren einer Workload: Azure bietet verschiedene Partitionierungsstrategien für verschiedene Datenspeicher. Diese Strategien tragen dazu bei, die Leistung und Skalierbarkeit zu verbessern, indem die Daten über mehrere Partitionen verteilt werden. Weitere Informationen finden Sie unter Datenpartitionsstrategien.
Verwandte Links
- Warum Partitionsdaten?
- Bewährte Methoden für die automatische Skalierung
- Übersicht über das Feature "AutoScale" in Azure
- Horizontale, vertikale und funktionale Datenpartitionierung
- Überlegungen zum Anwendungsentwurf
Prüfliste zur Leistungseffizienz
Lesen Sie den vollständigen Satz von Empfehlungen.