Multimandant-Systeme teilen Ressourcen zwischen zwei oder mehr Mandanten. 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 stimmen überein. Zu Spitzenzeiten verwendet Mandant A alle Ressourcen des Systems, was bedeutet, dass alle Anforderungen, die Mandant B vorgibt, fehlschlagen. Mit anderen Worten, die Gesamtressourcenauslastung ist höher als die Kapazität des Systems:
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:
Diese Situation kann auftreten, 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
Probleme mit lauten Nachbarn sind ein inhärentes Risiko, wenn Sie eine einzelne Ressource gemeinsam nutzen, und es ist nicht möglich, die Möglichkeit einer Beeinträchtigung durch ein Noisy Neighbor-Problem vollständig auszuschließen. 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
- Stellen Sie sicher, dass Ihre Anwendung die Dienstdrosselung verarbeiten kann, um das Senden unnötiger Anforderungen an den Dienst zu reduzieren. Stellen Sie sicher, dass Ihre Anwendung bewährte Methoden zum Wiederholen von Anforderungen befolgt, die eine vorübergehende Fehlerantwort erhalten haben.
- Erwerben Sie reservierte Kapazität, falls dies eine Option ist. Erwerben Sie bei Verwendung von Azure Cosmos DB beispielsweise reservierten Durchsatz, und stellen Sie bei Verwendung von ExpressRoute separate Leitungen für Umgebungen bereit, die empfindlich auf Leistungsschwankungen reagieren.
- Führen Sie die Migration zu einer Einzelmandanteninstanz des Diensts oder zu einer Dienstebene mit strengeren Isolationsgarantien durch. Führen Sie bei Verwendung von Service Bus beispielsweise die Migration zum Premium-Tarif durch, und stellen Sie bei Verwendung von Azure Cache for Redis einen Cache im Standard- oder Premium-Tarif bereit.
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 der Sicht eines Clients äußert sich das Noisy Neighbor-Problem typischerweise in fehlgeschlagenen Anfragen an den Dienst oder in Anfragen, deren Ausführung lange dauert. 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 Software Engineer
Andere Mitwirkende:
- Chad Kittel | Principal Software Engineer
- Paolo Salvatori | Principal Customer Engineer, FastTrack for Azure
- Daniel Scott-Raynsford | Partner Technology Strategist
- Arsen Vladimirskiy | Principal Customer Engineer, FastTrack for Azure
Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.