Noisy Neighbor-Antimuster

Azure

Bei mehrinstanzenfähigen Systemen werden Ressourcen von mehreren Mandanten gemeinsam verwendet. Da Mandanten dieselbe Ressource gemeinsam verwenden, kann die Aktivität eines Mandanten eine negative Auswirkung auf die Nutzung des Systems durch einen anderen Mandanten haben.

Problembeschreibung

Sie können einen Dienst, der von mehreren Kunden oder Mandanten gemeinsam genutzt werden soll, als mehrinstanzenfähigen Dienst erstellen. Ein Vorteil von mehrinstanzenfähigen Systemen besteht darin, dass Ressourcen in einem Pool zusammengefasst und von mehreren Mandanten gemeinsam verwendet werden können. Dies führt häufig zu geringeren Kosten und einer besseren Effizienz. Wenn aber ein einzelner Mandant eine unverhältnismäßig große Menge der im System verfügbaren Ressourcen verwendet, kann die Gesamtleistung des Systems beeinträchtigt werden. Das Noisy Neighbor-Problem tritt auf, wenn die Leistung eines Mandanten aufgrund der Aktivitäten eines anderen Mandanten beeinträchtigt wird.

Stellen Sie sich ein mehrinstanzenfähiges Beispielsystem mit zwei Mandanten vor. Die Nutzungsmuster von Mandant A und Mandant B treten gleichzeitig auf. Dies bedeutet, dass die Gesamtauslastung in Bezug auf die Ressourcennutzung zu Spitzenzeiten die Kapazität des Systems übersteigt:

Abbildung: Ressourcennutzung von zwei Mandanten. Da Mandant A die gesamten Systemressourcen nutzt, kommt es für Mandant B zu Fehlern.

Wahrscheinlich erhält die Mandantenanforderung Vorrang, die zuerst eintrifft. Der andere Mandant verzeichnet daraufhin einen Noisy-Neighbor-Effekt. Es kann auch sein, dass die Leistung beider Mandanten beeinträchtigt ist.

Das Noisy Neighbor-Problem tritt auch auf, wenn jeder einzelne Mandant relativ kleine Mengen der Systemkapazität verbraucht, aber die gemeinsame Ressourcennutzung vieler Mandanten zu einer Spitze bei der Gesamtauslastung führt:

Abbildung: Drei Mandanten, die jeweils weniger als den maximalen Durchsatz der Lösung verbrauchen. Zusammen nutzen die drei Mandanten die gesamten Systemressourcen.

Dies kann passieren, wenn Sie über mehrere Mandanten verfügen, die alle ähnliche Nutzungsmuster aufweisen, oder wenn Sie keine ausreichende Kapazität für die Abdeckung der gemeinsamen Systemlast bereitgestellt haben.

Beheben des Problems

Noisy Neighbor-Probleme stellen für mehrinstanzenfähige Systeme ein inhärentes Risiko dar. Es ist nicht möglich, vollständig auszuschließen, dass es zu einem Noisy Neighbor-Problem kommt. Es gibt aber einige Schritte, die sowohl von Kunden als auch von Dienstanbietern ausgeführt werden können, um die Wahrscheinlichkeit von Noisy Neighbor-Problemen zu verringern oder deren Auswirkungen einzudämmen.

Aktionen, die Kunden durchführen können

Aktionen, die Dienstanbieter durchführen können

  • Überwachen Sie die Ressourcennutzung für Ihr System. Überwachen Sie sowohl die gesamte Ressourcennutzung als auch die Ressourcen, die jeder Mandant verwendet. Konfigurieren Sie Warnungen, um Spitzen bei der Ressourcennutzung zu erkennen, und konfigurieren Sie nach Möglichkeit die Automatisierung, damit bekannte Probleme automatisch behoben werden, indem hoch- oder herunterskaliert wird.
  • Wenden Sie die Ressourcenkontrolle an. Erwägen Sie die Anwendung von Richtlinien, die verhindern, dass ein einzelner Mandant das System vollständig auslastet und die verfügbare Kapazität für andere Mandanten reduziert. Dies kann mit einer Kontingenterzwingung mithilfe des Drosselungsmusters oder des Ratenbegrenzungsmusters erreicht werden.
  • Erweitern Sie Ihre Infrastruktur. Dazu können Sie beispielsweise hochskalieren, indem Sie einige Ihrer Lösungskomponenten aktualisieren, oder aufskalieren, indem Sie zusätzliche Shards (Sharding-Muster) oder Stempel (Muster mit Bereitstellungsstempeln) bereitstellen.
  • Ermöglichen Sie Mandanten den Erwerb von vorab bereitgestellter oder reservierter Kapazität. Diese Funktion erhöht die Sicherheit für Mandanten, dass deren Workloads von Ihrer Lösung richtig verarbeitet werden.
  • Optimieren Sie die Ressourcennutzung der Mandanten. Sie können z. B. einen der folgenden Ansätze ausprobieren:
    • Wenn Sie mehrere Instanzen Ihrer Lösung hosten, sollten Sie die Mandanten ggf. neu auf die Instanzen oder Stempel verteilen. Erwägen Sie beispielsweise, Mandanten mit vorhersagbaren und ähnlichen Nutzungsmustern auf mehrere Stempel zu verteilen, um deren Nutzungsspitzen zu reduzieren.
    • Überlegen Sie, ob Sie über Hintergrundprozesse oder ressourcenintensive Workloads verfügen, die nicht zeitempfindlich sind. Führen Sie diese Workloads asynchron außerhalb der Spitzenzeiten aus, damit Ihre Ressourcenkapazität in Spitzenzeiten für zeitempfindliche Workloads verfügbar ist.
  • Überprüfen Sie, ob Ihre Downstream-Dienste über Kontrollelemente verfügen, mit denen Noisy Neighbor-Probleme vermieden werden können. Bei Verwendung von Kubernetes können Sie beispielsweise die Verwendung von Podgrenzwerten erwägen, und bei Verwendung von Service Fabric ist die Verwendung der integrierten Governancefunktionen eine Möglichkeit.
  • Schränken Sie die Vorgänge ein, die von Mandanten durchgeführt werden können. Verhindern Sie beispielsweise, dass Mandanten Vorgänge durchführen, die mit sehr umfangreichen Datenbankabfragen verbunden sind, z. B. indem Sie eine maximale Anzahl von Mehrwegdatensätzen oder ein Zeit-Limit für Abfragen angeben. Dies verringert das Risiko, dass Mandanten Aktionen ergreifen, die sich unter Umständen negativ auf andere Mandanten auswirken.
  • Stellen Sie ein Systems für die Service-Qualität (Quality of Service, QoS) bereit. Beim Anwenden eines Systems für die Servicequalität räumen Sie einigen Prozessen oder Workloads Priorität ein. Indem Sie die Servicequalität in Ihren Entwurf und Ihre Architektur einbinden, können Sie sicherstellen, dass Vorgänge mit hoher Priorität Vorrang haben, wenn die Auslastung der Ressourcen sehr hoch ist.

Überlegungen

In den meisten Fällen sorgen einzelne Mandanten nicht absichtlich für Noisy Neighbor-Probleme. Einzelne Mandanten sind sich gegebenenfalls gar nicht bewusst, dass ihre Workloads für andere zu Noisy Neighbor-Problemen führen. Es ist aber auch möglich, dass einige Mandanten Sicherheitsrisiken in gemeinsam verwendeten Komponenten ausnutzen, um einen Angriff auf einen Dienst durchzuführen – entweder einzeln oder per DDoS-Angriff (Distributed Denial of Service).

Unabhängig von der Ursache ist es wichtig, diese Probleme als Probleme mit der Ressourcenkontrolle zu behandeln und Nutzungskontingente, Drosselung und Kontrollelemente zu nutzen, um das Problem zu entschärfen.

Hinweis

Informieren Sie Ihre Kunden unbedingt über alle Drosselungsmaßnahmen, die Sie ergreifen, und auch über alle Nutzungskontingente, die für Ihren Dienst gelten. Es ist wichtig, dass Kunden fehlgeschlagene Anforderungen zuverlässig verarbeiten und nicht von Einschränkungen oder Kontingenten überrascht werden, die Sie anwenden.

Erkennen des Problems

Aus Kundensicht tritt das Noisy Neighbor-Problem normalerweise in Form von fehlgeschlagenen Serveranforderungen oder Anforderungen mit langer Ausführungsdauer auf. Ein Hinweis auf ein potenzielles Noisy Neighbor-Problem ist, wenn dieselbe Anforderung zu anderen Zeiten erfolgreich ist und nach dem Zufallsprinzip fehlschlägt. Clientanwendungen sollten die Telemetriedaten aufzeichnen, um die Erfolgsrate und Leistung der an Dienste gesendeten Anforderungen nachzuverfolgen. Darüber hinaus sollten die Anwendungen zu Vergleichszwecken auch die grundlegenden Leistungsmetriken aufzeichnen.

Aus Sicht eines Diensts kann das Noisy Neighbor-Problem auf verschiedene Arten auftreten:

  • Spitzen bei der Ressourcennutzung. Es ist wichtig, dass Sie gut mit Ihrer üblichen grundlegenden Ressourcennutzung vertraut sind und dass Sie die Überwachung und Warnungen konfigurieren, um Spitzen bei der Ressourcennutzung zu erkennen. Stellen Sie sicher, dass Sie alle Ressourcen berücksichtigen, die sich ggf. auf die Leistung oder Verfügbarkeit Ihres Diensts auswirken können. Hierzu gehören Metriken wie CPU- und Arbeitsspeicherauslastung der Server, Datenträger-E/A, Datenbanknutzung, Netzwerkdatenverkehr und Metriken, die von verwalteten Diensten verfügbar gemacht werden, z. B. die Anzahl von Anforderungen und die synthetischen und abstrakten Leistungsmetriken wie beispielsweise die Azure Cosmos DB-Anforderungseinheiten.
  • Fehler beim Ausführen eines Vorgangs für einen Mandanten. Suchen Sie insbesondere nach Fehlern, die auftreten, wenn ein Mandant keinen großen Teil der Systemressourcen verwendet. Ein Muster dieser Art kann ein Hinweis darauf sein, dass für den Mandanten das Noisy Neighbor-Problem aufgetreten ist. Erwägen Sie, den Ressourcenverbrauch pro Mandant nachzuverfolgen. Bei Verwendung von Azure Cosmos DB können Sie beispielsweise überlegen, ob Sie die für die einzelnen Anforderungen genutzten Anforderungseinheiten protokollieren. Sie können den Bezeichner des Mandanten dann den Telemetriedaten als Dimension hinzufügen, damit Sie den Verbrauch von Anforderungseinheiten für jeden Mandanten aggregieren können.

Beitragende

Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:

Hauptautor:

  • John Downs | Principal Customer Engineer, FastTrack for Azure

Andere Mitwirkende:

Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.