Empfehlungen zur Optimierung von Skalierung und Partitionierung
Gilt für die folgende Prüfliste zur Leistungseffizienz von Azure Well-Architected Framework:
PE:05 | Optimieren Sie Skalierung und Partitionierung. Integrieren Sie zuverlässige und kontrollierte Skalierung und Partitionierung. Der Skalierungseinheitenentwurf der Workload ist die Grundlage der Skalierungs- und Partitionierungsstrategie. |
---|
In diesem Leitfaden werden die Empfehlungen zum Skalieren und Partitionieren einer Workload beschrieben. Skalierung ist die Möglichkeit, die Ressourcen, die einer Workload zugeordnet sind, je nach Bedarf zu erhöhen oder zu verringern. Bei der Partitionierung wird die Workload in kleinere, verwaltbare Einheiten unterteilt, um Daten und Verarbeitung auf mehrere Ressourcen zu verteilen. Eine Workload, die weder skaliert noch partitioniert wird, kann in Zeiten mit hoher Nachfrage eine schlechte Leistung aufweisen und in Zeiten mit geringer Nachfrage die Kapazität unzureichend ausgelastet sein.
Definitionen
Begriff | Definition |
---|---|
Autoscale | Ein Feature, das die Kapazitätsgrenzen eines Diensts basierend auf vordefinierten Konfigurationen automatisch anpasst, sodass er nach Bedarf hoch- oder herunterskaliert werden kann. |
Capacity | Die Obergrenze oder maximale Kapazität eines bestimmten Diensts oder Features. |
Clientaffinität (Sitzungsaffinität) | Das absichtliche Routing von Anforderungen von einem einzelnen Client an einen einzelnen Server instance, um eine konsistente Sitzungsverwaltung sicherzustellen. |
Konsistenz (verteilte Datenbank) | Die Gleichmäßigkeit von Daten über mehrere Knoten in einer verteilten Datenbank, um sicherzustellen, dass alle Replikate zu einem bestimmten Zeitpunkt über die gleichen Daten verfügen. |
Konsistenz (relationale Datenbank) | Die Eigenschaft einer Transaktion, die eine Datenbank von einem gültigen Zustand in einen anderen bringt, wobei die Datenintegrität erhalten bleibt. |
Konsistenzebene | 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 Nebenläufigkeit | Ein Ansatz zum Aktualisieren von Datenbanken, der Momentaufnahmen verwendet, um Updates anstelle herkömmlicher Sperrmechanismen vorzunehmen. |
Partitionierung | Der Prozess der physischen Aufteilung von Daten in separate Datenspeicher. |
Skalierbarkeit | Die Fähigkeit einer Workload, ihre Kapazitätsgrenzen dynamisch zu ändern, um unterschiedlichen Anforderungen gerecht zu werden. |
Skalierungseinheit | Eine Gruppe von Ressourcen, die proportional skaliert werden. |
Statusaffinität | Die Speicherung von Clientsitzungsdaten auf einem einzelnen Server, sodass derselbe Server nachfolgende Anforderungen vom gleichen Client verarbeitet. |
Vertikale Skalierung | Ein Skalierungsansatz, der vorhandenen Ressourcen Computekapazität hinzufügt. |
Wichtige Entwurfsstrategien
Sowohl die Skalierung als auch die Partitionierung tragen zur Leistungseffizienz bei, indem sichergestellt wird, dass Ressourcen effektiv genutzt werden und die Workload unterschiedliche Lasten verarbeiten kann. Diese Vorgehensweisen sind besonders wichtig in Cloudumgebungen, in denen Anwendungen flexibel und anpassungsfähig an sich ändernde Anforderungen sein müssen. Die Skalierung stellt sicher, dass Sie die Workloadkapazität erweitern können, um die steigenden Anforderungen zu erfüllen. Die Partitionierung ermöglicht es Ihnen, Aufgaben oder Daten effizient aufzuteilen, um diese wachsenden Anforderungen zu erfüllen. Die Grundlage beider Prozesse ist der Skalierungseinheitenentwurf 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 Workloadineffizienzen umgehen.
Optimieren der Skalierung
Die Optimierung der Skalierung ist der Prozess zum Anpassen der Anzahl von Servern, Instanzen oder Ressourcen, um die schwankenden Anforderungen einer Workload zu erfüllen. Sie stellt sicher, dass die Workload erhöhten Datenverkehr oder Anforderungen verarbeiten kann, ohne dass es zu Leistungseinbußen oder Ausfallzeiten kommt.
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 erhöhen. Die Auswahl der richtigen Strategie stellt sicher, dass Ressourcen effizient angepasst werden, um workloadanforderungen zu erfüllen, ohne übermäßig beansprucht oder verschwendet zu werden. Um die richtige Skalierungsstrategie zu wählen, müssen Sie die Anwendungsfälle für die vertikale und horizontale Skalierung verstehen und verstehen, wie sie die Anforderungen Ihrer Workload erfüllen.
Grundlegendes zur vertikalen Skalierung. Mithilfe der vertikalen Skalierung können Sie die Kapazität einer einzelnen Ressource erhöhen, z. B. ein Upgrade auf einen größeren Server oder instance Größe. Die vertikale Skalierung ist nützlich, wenn die Workload von höherer Verarbeitungsleistung, Arbeitsspeicher oder anderen Ressourcen innerhalb einer einzelnen instance profitieren kann. Die vertikale Skalierung eignet sich für Workloads, die nicht einfach in kleinere Teile unterteilt werden können, 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 mehrere Server zu verteilen. Die horizontale Skalierung bietet Vorteile wie verbesserte Resilienz, höhere Kapazität und die Fähigkeit, erhöhte Datenverkehrs- oder Workloadanforderungen zu bewältigen. Es ist effektiv für cloudnative Anwendungen, die für die Ausführung auf mehreren Knoten konzipiert sind. Die horizontale Skalierung eignet sich für Workloads, die in kleinere Teile unterteilt werden können, die unabhängig voneinander ausgeführt werden.
Verstehen der Workload Die Eignung einer vertikalen oder horizontalen Skalierung hängt von den spezifischen Merkmalen und Anforderungen der Workload 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 Skalierungseinheitenentwurf für Komponenten, die zusammen skaliert werden sollen. Beispielsweise sind für 100 virtuelle Computer möglicherweise zwei Warteschlangen und drei Speicherkonten erforderlich, um die zusätzliche Workload zu verarbeiten. Die Skalierungseinheit würde 100 virtuelle Computer, zwei Warteschlangen und drei Speicherkonten sein. Sie sollten alle Komponenten unabhängig skalieren, bei denen Kapazitätsauslastungsschwankungen auftreten.
Architektur: Bewerten Sie den Entwurf der Anwendungsarchitektur. Einige Anwendungen können inhärent so konzipiert sein, dass sie horizontal skaliert werden können, mit zustandslosen Komponenten, die problemlos auf 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 Elastizitätsanforderungen der Workload.
Entwerfen der Infrastruktur für skalierungsfähiges Design
Das Entwerfen einer Infrastruktur für die Skalierung ist der Prozess der Erstellung einer Architektur, die steigende Anforderungen und Workloads 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 Wachstum zu ermöglichen. Zu den Strategien gehören die Vermeidung von Singletons, die zu Engpässen werden können, und die Entkopplung von Anwendungskomponenten, um unabhängige Skalierbarkeit zu gewährleisten. Wenn Sie eine Workload so entwerfen, dass sie skalierbar ist, kann sie die Workload effektiv auf 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 Ihre Workload stattdessen auf mehrere Ressourcen, um Skalierbarkeit, Fehlertoleranz und Leistung zu verbessern. Erkunden Sie einige spezifische Beispiele und Entwurfsüberlegungen, um Singletons in Workloadressourcen zu vermeiden:
Warteschlangenbasiertes Lastenausgleich: Anstatt sich zum Verarbeiten von Nachrichten auf eine einzelne Warteschlange zu verlassen, sollten Sie die Workload über mehrere Warteschlangen partitionieren, um die Verarbeitungslast zu verteilen. Es bietet eine bessere Skalierbarkeit und parallele Verarbeitung.
Datenverarbeitung: Singletonmuster treten häufig in Datenverarbeitungsszenarien auf, in denen die Verarbeitung nicht aufgefächert wird. Unterteilen Sie aufgaben mit langer Ausführungsdauer in kleinere Aufgaben, die besser skaliert werden können, um die Workload auf mehrere Ressourcen zu verteilen und die Parallelität zu nutzen.
Entwurfsmuster: Entwurfsmuster wie Fan-out/Fan-In oder Pipes and Filters können dazu beitragen, Singletons in Workflows zu vermeiden. Diese Muster ermöglichen die Verteilung von Verarbeitungsaufgaben auf mehrere Ressourcen und erhöhen die Skalierbarkeit und Flexibilität.
Entkoppeln Sie Komponenten. Die Entkopplung von Anwendungskomponenten ist ein wichtiger Aspekt beim Entwerfen von Skalierbarkeit. Dabei wird die Anwendung in kleinere, unabhängige Komponenten unterteilt, die basierend auf spezifischen Workloadanforderungen unabhängig betrieben 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 die anderen zu beeinträchtigen. 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 ausfällt, können die anderen Komponenten weiterhin unabhängig funktionieren.
Entkoppelte Komponenten sind einfacher zu warten und zu aktualisieren. Änderungen oder Aktualisierungen an einer Komponente können ohne Auswirkungen auf die anderen komponenten vorgenommen werden, da sie unabhängig sind. Befolgen Sie die folgenden Richtlinien, um Anwendungskomponenten aus Gründen der Skalierbarkeit zu entkoppeln:
Trennung der Bedenken: Identifizieren Sie die Verantwortlichkeiten und Funktionen Ihrer Anwendung. Teilen Sie die Zuständigkeiten basierend auf ihren spezifischen Aufgaben in separate Komponenten auf. Beispielsweise können Sie über separate Komponenten für die Benutzerauthentifizierung, Datenverarbeitung und Benutzeroberfläche verfügen.
Lose Kopplung: Entwerfen Sie die Komponenten so, dass sie über klar definierte Schnittstellen und Protokolle miteinander kommunizieren. Dieser Entwurf reduziert Abhängigkeiten zwischen Komponenten und ermöglicht ein einfacheres Ersetzen oder Skalieren 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, wodurch die Gesamtskalierbarkeit verbessert wird.
Microservices: Erwägen Sie die Implementierung von Microservices, bei denen es sich um kleine, unabhängige Dienste handelt, 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 einer Anwendung für die Skalierung
Wenn Sie eine Workload skalieren, sollten Sie die Anwendung so entwerfen, dass sie die Last verteilt. Nur weil Sie weitere Replikate auf Infrastrukturebene hinzufügen können, bedeutet dies nicht, dass Ihre Anwendung die Replikate verwenden kann. Beim Entwerfen einer Anwendung für die Skalierung geht es darum, eine Anwendung so zu strukturieren, dass sie erhöhte Anforderungen bewältigen kann, indem die Workload auf Ressourcen verteilt wird. Vermeiden Sie Lösungen, die Clientaffinität, Datensperrung oder Zustandsaffinität für eine einzelne instance erfordern, wenn möglich. 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 Skalierbarkeit der Anwendung 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 des Servers befindet. Das Externalisieren des Sitzungszustands ist die Praxis, Sitzungsdaten außerhalb des Anwendungsservers oder Containers zu speichern. Sie können den Sitzungszustand externalisieren, um Sitzungsdaten auf mehrere Server oder Dienste 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. Grundlegendes zu den 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 Ihres 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. Die Optionen umfassen die Verwendung eines verteilten Caches, einer Datenbank oder eines Sitzungszustandsdiensts. Berücksichtigen Sie Bei der Auswahl Faktoren wie Datenkonsistenz, Latenz und Skalierbarkeit.
Einrichten der Anwendung Aktualisieren Sie Ihre Anwendung, um die ausgewählte Sitzungszustandsspeicherlösung zu verwenden. 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 zu speichern und aus der externen Speicherlösung abzurufen. Möglicherweise müssen Sie apIs oder Bibliotheken verwenden, die von der Speicherlösung bereitgestellt werden, um den Sitzungszustand zu verwalten.
Beseitigen Sie die Clientaffinität. Clientaffinität wird auch als Sitzungsaffinität oder persistente Sitzungen bezeichnet. Wenn Sie die Clientaffinität beseitigen, verteilen Sie Clientanforderungen gleichmäßig auf mehrere Replikate oder Server, 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 zu unbeabsichtigter und künstlicher Clientanheftung führen, wenn zu viele Anforderungen an ein Back-End-instance gesendet werden. Das Anheften kann erfolgen, wenn der Algorithmus so eingerichtet ist, dass immer Anforderungen vom gleichen Benutzer an denselben instance gesendet werden. Dies kann auch vorkommen, wenn sich die Anforderungen zu ähnlich sind.
Beseitigen Sie die Datensperrung. Datensperren sorgen für Konsistenz, haben jedoch Leistungsnachteile. Dies kann zu Sperrenausweitungen führen und sich negativ auf Parallelität, Latenz und Verfügbarkeit auswirken. Um datensperren zu vermeiden, sollten Sie optimistische Parallelität implementieren. Nicht relationale Datenbanken sollten die Steuerung der optimistischen Parallelität verwenden und über die richtige Konsistenzebene verfügen. Ihre Strategie für die Datenpartitionierung sollte auch Ihre Parallelitätsanforderungen unterstützen.
Verwenden Sie die dynamische Dienstermittlung. Die dynamische Dienstermittlung ist der Prozess der automatischen Erkennung und Registrierung von Diensten in einem verteilten System. Damit können Clients verfügbare Dienste ermitteln, ohne eng mit bestimmten Instanzen verknüpft zu sein. Clients sollten keine direkte Abhängigkeit von einer bestimmten instance in der Workload annehmen können. Um diese Abhängigkeiten zu vermeiden, sollten Sie einen Proxy zum Verteilen und Verteilen von Clientverbindungen verwenden. Der Proxy fungiert als Vermittler zwischen Clients und Diensten und bietet eine Abstraktionsebene, die das Hinzufügen oder Entfernen von Diensten ohne Auswirkungen auf Clients ermöglicht.
Verwenden Sie Hintergrundaufgaben. Wenn eine Anwendung skaliert wird, kann sie eine steigende Workload oder eine höhere Anzahl gleichzeitiger Anforderungen verarbeiten. Das Auslagern von intensiven Aufgaben als Hintergrundaufgaben ermöglicht es der Standard-Anwendung, Benutzeranforderungen zu verarbeiten, ohne dass ressourcenintensive Vorgänge überlastet sind. Führen Sie die folgenden Schritte aus, um Aufgaben als Hintergrundaufgaben auszulagern:
Suchen Sie die CPU- und E/A-intensiven Aufgaben in Ihrer Anwendung, die Sie auslagern 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 Standard Anwendungslogik, und stellen Sie einen Mechanismus zum Starten und Verwalten von Hintergrundaufgaben bereit.
Implementieren Sie die Verarbeitung von Hintergrundaufgaben mit geeigneten Technologien oder Frameworks. Schließen Sie Features ein, die von Ihrer Programmiersprache oder Plattform bereitgestellt werden, z. B. asynchrone Programmierung, Threading oder Aufgabenwarteschlangen. Sie enthalten intensive Vorgänge in separaten Aufgaben oder Threads. Diese Aufgaben können gleichzeitig ausgeführt oder in bestimmten Intervallen ausgeführt werden.
Verteilen Sie Hintergrundaufgaben, wenn es viele gibt oder wenn die Aufgaben viel Zeit oder Ressourcen erfordern. Eine mögliche Lösung ist das Muster „Konkurrierende Consumer“.
Konfigurieren der Skalierung
Das Konfigurieren der Skalierung ist der Prozess der Einrichtung und Anpassung von Parametern, um Ressourcen basierend auf Workloadanforderungen dynamisch zuzuordnen. Es umfasst Strategien wie die Verwendung von Features für die automatische Skalierung, das Verständnis der Grenzen der Dienstskalierung und die Implementierung aussagekräftiger Lademetriken. Die richtige Konfiguration stellt sicher, dass eine Anwendung auf unterschiedliche Anforderungen reagieren und gleichzeitig die Effizienz maximiert. Berücksichtigen Sie beim Konfigurieren der Skalierung die folgenden Strategien:
Verwenden Sie Dienste mit automatischer Skalierung. Das Feature für die autoskalierte Skalierung skaliert die Infrastruktur automatisch, um die Nachfrage zu erfüllen. Verwenden Sie PaaS-Angebote (Platform-as-a-Service) mit integrierten Features für die autoskalierte Skalierung. Die einfache Skalierung von PaaS ist ein großer Vorteil. Für das horizontale Hochskalieren virtueller Computer ist beispielsweise ein separater Lastenausgleich, die Clientanforderungsbehandlung und ein extern gespeicherter Zustand erforderlich. PaaS-Angebote übernehmen die meisten dieser Aufgaben.
Einschränken der automatischen Skalierung. Legen Sie Grenzwerte für die automatische Skalierung fest, um die Überskalierung zu minimieren, die zu unnötigen Kosten führen kann. Manchmal können Sie keine Skalierungsgrenzwerte festlegen. In diesen Fällen sollten Sie Warnungen festlegen, um Sie zu benachrichtigen, wenn die Komponente die maximale Skalierungsgrenze erreicht und überskaliert wird.
Verstehen der Grenzen der Dienstskalierung. Wenn Sie die Grenzwerte, Inkremente und Einschränkungen der Dienstskalierung verstehen, können Sie bei der Auswahl eines Diensts fundierte Entscheidungen treffen. Skalierungsgrenzen bestimmen, ob der ausgewählte Dienst die erwartete Workload verarbeiten, effizient skalieren und die Leistungsanforderungen Ihrer Anwendung erfüllen kann. Zu den zu berücksichtigenden Skalierungsgrenzen gehören:
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 Workload bewältigen und Spitzenauslastungen ohne Leistungseinbußen bewältigen kann. Jede Ressource verfügt über eine obere Skalierungsgrenze. Wenn Sie die Skalierungsgrenzen überschreiten 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 das Ausflackern von Ressourcen zu verhindern.
Skalierungseinschränkungen: Bei einigen Diensten können Sie hoch- oder herunterskalieren, aber Sie können die Skalierung automatisch rückgängig machen. Sie sind gezwungen, manuell zu skalieren, oder Sie müssen möglicherweise eine neue Ressource erneut bereitstellen. Diese Einschränkungen dienen häufig zum Schutz der Workload. Das Herunterskalieren oder Skalieren in kann Auswirkungen auf die Verfügbarkeit und Leistung der Workload haben. Ein Dienst kann bestimmte Einschränkungen oder Einschränkungen erzwingen, um sicherzustellen, dass die Workload über ausreichende Ressourcen für einen effektiven Betrieb verfügt. 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 Verarbeiten der Datenreplikation und -konsistenz beim Hoch- oder Ausskalieren, bietet aber möglicherweise nicht die gleiche Unterstützung für das Herunter- oder Einsskalieren.
Verwenden Sie aussagekräftige Lademetriken. Bei der Skalierung sollten aussagekräftige Lademetriken als Skalierungstrigger verwendet werden. Zu aussagekräftigen Lademetriken gehören einfache Metriken wie CPU oder Arbeitsspeicher. Sie umfassen auch erweiterte Metriken, z. B. Warteschlangentiefe, SQL-Abfragen, abfragen benutzerdefinierte Metriken und HTTP-Warteschlangenlänge. Erwägen Sie, eine Kombination aus einfachen und erweiterten Lademetriken als Skalierungstrigger zu verwenden.
Verwenden Sie einen Puffer. Ein Puffer ist nicht genutzte Kapazität, die zum Verarbeiten von Bedarfsspitzen verwendet werden kann. Ein gut durchdachter Workloadplan für unerwartete Workloadspitzen. Sie sollten einen Puffer hinzufügen, um Spitzen für die horizontale und vertikale Skalierung zu verarbeiten.
Verhindern eines Flappings. Flapping ist eine Schleifenbedingung, die auftritt, wenn ein Skalierungsereignis ein entgegengesetztes Skalierungsereignis auslöst und eine fortlaufende Skalierungsaktion erstellt. Wenn die Skalierung in beispielsweise die Anzahl von Instanzen verringert, kann dies dazu führen, dass die CPU-Auslastung in den verbleibenden Instanzen steigt, wodurch ein Horizontalskalierungsereignis ausgelöst wird. Das Horizontalskalierungsereignis führt wiederum dazu, dass die CPU-Auslastung sinkt und der Prozess wiederholt wird.
Es ist wichtig, eine angemessene Marge zwischen den Schwellenwerten für horizontales Hochskalieren und Horizontalskalieren zu wählen, um ein Flapping zu vermeiden. Sie können häufige und unnötige Horizontal- und Horizontalskalierungsaktionen 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 erleichtern. Sie können das Bereitstellungsstempelmuster verwenden, um eine Workload einfach zu skalieren, indem Sie eine oder mehrere Skalierungseinheiten hinzufügen.
Risiko: Die Skalierung trägt zwar zur Optimierung der Kosten bei, indem sie die Kapazität an die Nachfrage anpasst, kann aber in langen Zeiträumen mit hoher Nachfrage zu erhöhten Gesamtkosten 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. Es trägt dazu bei, dass die Workload effizient skaliert wird und die Leistungseffizienz bei unterschiedlichen Lasten maximiert wird.
Sie müssen sicherstellen, dass Ihre Workload unter realen Bedingungen effizient skaliert wird. Es ist wichtig, Auslastungs- und Belastungstests in einer Umgebung durchzuführen, die Ihre Produktionseinrichtung widerspiegelt. Diese Tests, die in Nichtproduktionsumgebungen durchgeführt werden, ermöglichen es Ihnen, vertikale und horizontale Skalierungsstrategien zu bewerten und zu ermitteln, welche die Leistung am effektivsten optimiert. Hier ist ein empfohlener Ansatz zum Testen der Skalierung:
Definieren Sie Workloadszenarien. Identifizieren Sie die wichtigsten Workloadszenarien, die Sie testen müssen, z. B. die Erhöhung des Benutzerdatenverkehrs, gleichzeitige Anforderungen, das Datenvolumen oder die Ressourcennutzung.
Verwenden Sie eine produktionsähnliche Testumgebung. Erstellen Sie eine separate Testumgebung, die in Bezug auf Infrastruktur, Konfiguration und Daten der Produktionsumgebung sehr ähnlich ist.
Legen Sie Leistungsmetriken fest. Definieren Sie die zu messenden Leistungsmetriken, z. B. Antwortzeit, Durchsatz, CPU- und Arbeitsspeicherauslastung und Fehlerraten.
Entwickeln von Testfällen. Entwickeln Sie Testfälle, die verschiedene Workloadszenarien simulieren und die Auslastung schrittweise erhöhen, 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 Auslastungsebene. Überwachen Des Workloadverhaltens, des Ressourcenverbrauchs und der Leistungsminderung.
Analysieren und Optimieren der Skalierung Analysieren Sie die Testergebnisse, um Leistungsengpässe, Skalierbarkeitseinschränkungen oder Verbesserungsmöglichkeiten zu identifizieren. Optimieren Sie die Konfiguration, Infrastruktur oder den Code, um die Skalierbarkeit und Leistung zu verbessern. Es dauert zeit, bis die Skalierung abgeschlossen ist. Testen Sie daher die Auswirkungen von Skalierungsverzögerungen.
Adressabhängigkeiten. Suchen Sie nach potenziellen Abhängigkeitsproblemen. Das Skalieren oder Partitionieren 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 einen sorgfältigen Entwurf, um horizontal zu skalieren. Sie sollten Measures wie optimistische Parallelität oder Datenpartitionierung in Betracht ziehen, um mehr Durchsatz für die Datenbank zu ermöglichen.
Nach Anpassungen erneut testen. 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 Budgeteinschränkungen und Kosteneffizienzziele Ihrer Workload. Die vertikale Skalierung kann höhere Kosten verursachen, da größere und leistungsfähigere Ressourcen benötigt werden. Die horizontale Skalierung ermöglicht Kosteneinsparungen durch die Verwendung kleinerer Instanzen, die je nach Bedarf hinzugefügt oder entfernt werden können.
Partitionsworkload
Partitionierung ist der Prozess der Aufteilung eines großen Datasets oder einer Workload in kleinere, besser verwaltbare Teile, die als Partitionen bezeichnet werden. Jede Partition enthält eine Teilmenge der Daten oder Workload und wird in der Regel separat gespeichert oder verarbeitet. Die Partitionierung ermöglicht die parallele Verarbeitung und reduziert Konflikte. Die Aufteilung der Workload in kleinere Einheiten ermöglicht es der Anwendung, jede Einheit unabhängig zu verarbeiten. Das Ergebnis ist eine bessere Ressourcennutzung und schnellere Verarbeitungszeiten. Die Partitionierung trägt auch dazu bei, die Daten auf mehrere Speichergeräte zu verteilen, wodurch die Auslastung einzelner Geräte verringert und die Gesamtleistung verbessert wird.
Grundlegendes zur Partitionierung
Der spezifische Partitionierungsansatz, den Sie verwenden, hängt von der Art der Daten oder Workload ab, über die Sie verfügen, und von der verwendeten Technologie. Zu den gängigen Strategien für die Partitionierung gehören:
Horizontale Partitionierung: Bei diesem Ansatz wird das Dataset oder die Workload anhand bestimmter Kriterien unterteilt, z. B. Wertebereiche oder bestimmte Attribute. Jede Partition enthält eine Teilmenge der Daten, die die definierten Kriterien erfüllt.
Vertikale Partitionierung: Bei diesem Ansatz wird das Dataset oder die Workload basierend auf bestimmten Attributen oder Spalten unterteilt. 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 Workload basierend auf den spezifischen Funktionen oder Vorgängen unterteilt, die ausgeführt werden müssen. Jede Partition enthält die Daten oder Komponenten, die für eine bestimmte Funktion erforderlich sind, um eine optimierte Verarbeitung und Leistung zu ermöglichen.
Planen der Partitionierung
Es ist wichtig, beim Partitionieren Faktoren wie Datenverteilung, Abfragemuster, Datenwachstum und Workloadanforderungen zu berücksichtigen. Eine ordnungsgemäße Planung und Planung sind unerlässlich, um die Effektivität der Partitionierung sicherzustellen und die Leistungseffizienz zu maximieren. Wenn Sie die Partitionierung als nachdenklich behandeln, ist dies schwieriger, da Sie bereits über eine Liveworkload verfügen, die verwaltet werden muss. Möglicherweise müssen Sie die Datenzugriffslogik ändern, große Datenmengen auf Partitionen verteilen und die fortgesetzte Nutzung 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. Jede Art der Partitionierung hat ihre eigenen Vorteile und Überlegungen. Hier sind einige Faktoren, die für jeden Partitionierungstyp zu berücksichtigen sind:
Horizontale Partitionierung ist geeignet, wenn Sie die Daten auf mehrere Ressourcen oder Server verteilen möchten, um eine bessere Skalierbarkeit und Leistung zu erzielen. Es ist effektiv, wenn die Workload unabhängig auf jeder Partition parallelisiert und verarbeitet werden kann. Erwägen Sie horizontale Partitionierung, wenn mehrere Benutzer oder Prozesse gleichzeitig auf das Dataset zugreifen oder es aktualisieren müssen.
Vertikale Partitionierung ist geeignet, wenn häufig auf bestimmte Attribute oder Spalten zugegriffen wird, während auf andere weniger häufig zugegriffen wird. Vertikale Partitionierung ermöglicht einen effizienten Zugriff auf die erforderlichen Daten, indem unnötige Datenabrufe minimiert werden.
Funktionale Partitionierung ist geeignet, wenn verschiedene Funktionen unterschiedliche Teilmengen der Daten erfordern und unabhängig verarbeitet werden können. Funktionale Partitionierung kann die Leistung optimieren, indem jeder Partition erlaubt wird, bestimmte Vorgänge zu konzentrieren.
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 Antwortzeit, Durchsatz und Skalierbarkeit. Vergleichen Sie die Ergebnisse mit Leistungszielen, und identifizieren Sie Engpässe oder Probleme. Identifizieren Sie anhand der Analyse potenzielle Optimierungsmöglichkeiten. Möglicherweise müssen Sie Daten partitionsübergreifend verteilen, die Partitionsgrößen anpassen oder die Partitionierungskriterien ändern.
Kompromiss: Partitionierung erhöht die Komplexität des Entwurfs und der Entwicklung einer Workload. Die Partitionierung erfordert Gespräche und Planung zwischen Entwicklern und Datenbankadministratoren.
Risiko: Die Partitionierung führt zu einigen potenziellen Problemen, die berücksichtigt und behoben werden müssen, einschließlich:
Datenschiefe: Partitionierung kann zu Datenabweichungen führen, bei denen bestimmte Partitionen im Vergleich zu anderen eine unverhältnismäßig hohe Daten- oder Workloadmenge erhalten. Datenschiefe können zu Leistungsungleichgewichten und erhöhten Konflikten auf bestimmten Partitionen führen.
Abfrageleistung: Schlecht entworfene Partitionierungsschemas können sich negativ auf die Abfrageleistung auswirken. Wenn Abfragen partitionsübergreifend auf Daten 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 zur Unterstützung der vertikalen und horizontalen Skalierung. Azure-Dienste verfügen über unterschiedliche Leistungsebenen, 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 die Optimierung des Skalierungsverhaltens zu unterstützen. Die meisten Skalierungsimplementierungen in Azure können Grenzwerte festlegen und die erforderliche Sichtbarkeit unterstützen, um bei Änderungen benachrichtigt 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. In Azure Kubernetes Service (AKS) können Sie beispielsweise Monitor verwenden, um die horizontale automatische Podskalierung (HORIZONTAL POD AUTOMATIC Scaling, HPA) und die automatische Clusterskalierung zu aktivieren. Mithilfe der Überwachungs- und Warnungsfunktionen von Monitor können Sie die Skalierung in Azure effektiv vereinfachen und sicherstellen, dass Sich Ihre Anwendungen und Infrastruktur dynamisch an die Nachfrage anpassen können.
Sie können auch eine benutzerdefinierte automatische Skalierung in Azure erstellen. Sie können Warnungen in Monitor für Ressourcen verwenden, die über kein Feature für die automatische Skalierung verfügen. Diese Warnungen können abfragebasiert oder metrikbasiert eingerichtet werden und Aktionen mithilfe von Azure Automation ausführen. Automation bietet eine Plattform zum Hosten und Ausführen von PowerShell- und Python-Code in Azure, der Cloud und lokalen Umgebungen. Es bietet Features wie die Bereitstellung von Runbooks bei Bedarf oder nach einem Zeitplan, Ausführungsverlauf und Protokollierung, integrierte Geheimnisspeicher und Quellcodeverwaltungsintegration.
Entwerfen einer skalierbaren Anwendung: Hier sind einige Möglichkeiten, wie Azure den Entwurf der Anwendungsskalierung erleichtert.
Entfernen von Datensperren: In Azure SQL-Datenbank können Sie optimierte Sperren aktivieren, um die Leistung von Datenbanken zu verbessern, die eine strikte 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 Lastenausgleichsmodule 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 zur Verbesserung der Leistung und Skalierbarkeit bei, indem die Daten auf mehrere Partitionen verteilt werden. Weitere Informationen finden Sie unter Datenpartitionsstrategien.
Verwandte Links
- Gründe für Datenpartitionierung
- Bewährte Methoden für die automatische Skalierung
- Übersicht über das Feature für die autoskalierte Skalierung in Azure
- Horizontale, vertikale und funktionale Datenpartitionierung
- Überlegungen zum Anwendungsentwurf
Prüfliste zur Leistungseffizienz
Sehen Sie sich den vollständigen Satz von Empfehlungen an.