Share via


Anforderungsdrosselung

Letzte Änderung: Donnerstag, 3. März 2011

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Übersicht über die Anforderungssteuerung
Initialisierung des Drosselungssteuerungssystems
Bestimmen, ob eine Anforderung blockiert wird
Registrierte Leistungsindikatoren
Anforderungsklassifizierungen
Berechnungsmodul für die Integritätsbewertung

In diesem Thema wird das System von Microsoft SharePoint Foundation zum Drosseln von HTTP-Anforderungen beschrieben, wenn Front-End-Webserver zu stark ausgelastet sind, um alle eingehenden Anforderungen zu behandeln.

Übersicht über die Anforderungssteuerung

SharePoint Foundation enthält ein System zur Überwachung verschiedener Windows Server 2008-Leistungsindikatoren und zum Drosseln (d. h. Blockieren) von HTTP-Anforderungen, falls einer dieser Indikatoren angibt, dass ein Server zu stark ausgelastet ist, um alle empfangenen Anforderungen zu behandeln. Das Überwachungs- und Drosselungssystem kann für eine bestimmte SharePoint Foundation-Webanwendung in der Zentraladministration oder mithilfe eines PowerShell-Befehls in der SharePoint-Verwaltungsshell aktiviert oder deaktiviert werden. Das System kann über das SharePoint Foundation-Objektmodell oder über Cmdlets in der SharePoint-Verwaltungsshell geändert werden.

TippTipp

Bevor Sie anfangen, Code für das Überwachungs- und Drosselungsobjektmodell von SharePoint Foundation zu programmieren, sollten Ihnen das Windows Server 2008-System der Leistungsindikatoren und die Konzepte für Kategorie (auch Leistungsobjekt genannt), Indikator und Instanz bekannt sein. Weitere Informationen zu diesen Themen und zum Erstellen eigener Leistungsindikatoren finden Sie in den folgenden Themen:

Initialisierung des Drosselungssteuerungssystems

Das Drosselungssteuerungssystem wird während des BeginRequest-Ereignisses der ersten HTTP-Anforderung für einen bestimmten Arbeitsprozess auf einem bestimmten Front-End-Webserver initialisiert. Bei nachfolgenden Anforderungen desselben Prozesses werden die Entitäten und Threads wiederverwendet, die bei dieser ersten Anforderung initialisiert wurden. Falls die Webanwendung zurückgesetzt wird, wird das System bei der ersten Anforderung nach der Zurücksetzung erneut initialisiert. Die beiden wichtigsten Schritte bei der Initialisierung werden in den folgenden Unterabschnitten beschrieben.

Erstellen eines Leistungsinspektors

Jeder Arbeitsprozess jeder Webanwendung auf jedem Front-End-Webserver besitzt seinen eigenen Leistungsinspektor, der mit Informationen aus der HttpThrottleSettings-Eigenschaft der Webanwendung initialisiert wird. Der Inspektor besteht aus den folgenden wichtigen Bestandteilen:

  • Einer Gruppe von Integritätsbewertungen, eine für jeden überwachten Leistungsindikator. Die Bewertungen sind Int32-Werte von 0 bis 10, wobei 0 die Bewertung für die beste Integrität ist und 10 die schlechteste Integrität angibt.

  • Einer Gesamtintegritätsbewertung für den Prozess, bei der es sich ebenfalls um einen Int32-Wert von 0 bis 10 handelt.

  • Einer Gruppe von Leistungsrohwerten für jeden überwachten Indikator, die aus dem Indikator gelesen (als Stichprobe entnommen) werden. Sie sind von der ältesten Stichprobe bis zur neuesten Stichprobe sortiert.

  • Einem Serverstatus-Prüfungsthread, der zur regelmäßigen Entnahme von Stichproben aus den Indikatorwerten verwendet wird.

  • Einer Einstellung für das Aktualisierungsintervall, mit dem festgelegt wird, wie oft die Indikatoren erneut geprüft werden. Der Standardwert ist 5 Sekunden.

Starten des Serverstatus-Prüfungsthreads

Der Serverstatus-Prüfungsthread wird bei der Erstellung des Inspektors erstellt. Er durchläuft die folgenden Schritte in einem Intervall, das durch das Aktualisierungsintervall des Inspektors angegeben wird.

  1. Ruft das SPHttpThrottleSettings-Objekt in der HttpThrottleSettings-Eigenschaft der Webanwendung ab. (Dieses Objekt kann nach der letzten Schleife geändert worden sein. Möglicherweise wurde z. B. das Aktualisierungsintervall geändert, oder ein weiterer Leistungsindikator wurde der Liste der überwachten Indikatoren hinzugefügt.)

  2. Überprüft, dass die Anforderungseinschränkung nach der letzten Schleife nicht deaktiviert wurde.

  3. Legt das Aktualisierungsintervall des Inspektors mit dem Wert von SPHttpThrottleSettings.RefreshInterval fest.

  4. Ruft die GenerateMonitors()-Methode auf. Mit dieser Methode wird ein SPSystemPerformanceCounterMonitor-Objekt für jeden zu überwachenden Leistungsindikator erstellt. Informationen dazu, welche Indikatoren des Servers überwacht werden müssen, werden durch eine persistente Gruppe von SPPerformanceMonitorCreationData-Objekten bereitgestellt. Für jeden der zu überwachenden Indikatoren ist ein Objekt vorhanden. Jedes dieser Erstellungsdatenobjekte besitzt ein kritisches untergeordnetes SPHealthScoreCalculator-Objekt. Dieses Objekt kann einen Leistungsindikatorwert in eine Integritätsbewertung von 0 bis 10 übersetzen. (Es kann auch das Ergebnis einer mathematischen Funktion mehrerer Leistungswerte verwenden und dieses in eine Integritätsbewertung übersetzen.)

  5. Jeder Monitor ruft den letzten Wert des überwachten Indikators ab und speichert diesen Wert in der Gruppe der Leistungsrohwerte des Inspektors für den entsprechenden Indikator.

  6. Jedes Überwachungsobjekt aktualisiert die Integritätsbewertung für den überwachten Indikator. Dieser Schritt umfasst die folgenden Unterschritte:

    1. Stichprobenwerte, die zu alt sind, werden aus der Gruppe der Leistungsrohdaten entfernt. Nur die neuesten n Werte werden beibehalten, wobei n der Wert der HttpThrottleSettings.NumberOfSamples-Eigenschaft ist.

    2. Auf die verbleibenden Werte wird eine mathematische Funktion angewendet, um einen gewichteten Durchschnitt der Werte zu erstellen. Je aktueller der Wert, desto höher wird er gewichtet.

    3. Das Überwachungsobjekt verwendet sein Berechnungsmodul für die Integritätsbewertung, um eine Integritätsbewertung von 0 bis 10 für den gewichteten Durchschnitt zu berechnen.

  7. Die Gesamtintegritätsbewertung für den Arbeitsprozess wird auf die höchste Bewertung (höchste Integrität) der Bewertungen der einzelnen Überwachungsobjekte festgelegt.

  8. Die Drosselungsebene wird in Übereinstimmung mit den folgenden Regeln festgelegt:

    • Falls die Gesamtintegritätsbewertung für den Prozess kleiner ist als 10, müssen die Anforderungen nicht gedrosselt werden, sodass die Drosselungsebene auf Normal festgelegt wird.

    • Falls die Gesamtintegritätsbewertung bei 10 liegt (die höchste mögliche Bewertung und die niedrigste Integrität), jedoch für weniger als 60 Sekunden bei 10 lag, wird die Drosselungsebene auf FirstStage festgelegt. Dies bedeutet, dass bestimmte Kategorien von HTTP-Anforderungen blockiert werden und ein HTTP 503-Fehler (Dienst nicht verfügbar) an den Client gesendet wird. Diese Drosselung betrifft nur Anforderungen, die demselben Arbeitsprozess zugewiesen sind. Informationen dazu, wie vom System bestimmt wird, welche Kategorien von Anforderungen blockiert werden, und wie entschieden wird, zu welcher Kategorie eine bestimmte Anforderung gehört, finden Sie weiter unten in diesem Thema unter Bestimmen, ob eine Anforderung blockiert wird.

    • Falls die Gesamtintegritätsbewertung 10 beträgt und für mindestens 60 Sekunden 10 betrug, wird die Drosselungsebene auf SecondStage festgelegt. Dies bedeutet, dass zusätzliche Kategorien von Anforderungen blockiert werden.

  9. Der Prüfungsthread wartet für die Dauer des Aktualisierungsintervalls und wird dann wiederholt.

    HinweisHinweis

    Falls die Drosselungsebene bei FirstStage oder SecondStage liegt, wird die Drosselung für den Arbeitsprozess fortgesetzt, bis die Gesamtintegritätsbewertung in einem Zyklus des Prüfungsthreads auf einen Wert unter 10 zurückgesetzt wird.

Bestimmen, ob eine Anforderung blockiert wird

Falls das Überwachungs- und Drosselungssystem für eine angegebene Webanwendung aktiviert ist, wird die Entscheidung, ob eine bestimmte HTTP-Anforderung blockiert wird, während des PostResolveRequestCache-Ereignisses der Anforderung getroffen. Es werden insbesondere die folgenden Schritte ausgeführt:

  1. Das HTTP-Antwortobjekt wird initialisiert und ihm wird eine Gesamtintegritätsbewertung des Arbeitsprozesses hinzugefügt.

  2. Die Drosselungsebene des Prozesses wird überprüft, um festzustellen, ob sie bei FirstStage oder SecondStage liegt. Ist dies nicht der Fall, befindet sich der Prozess nicht im gedrosselten Modus, und die verbleibenden Schritte werden übersprungen.

  3. Falls sich der Prozess im gedrosselten Modus befindet, wird die Anforderung durch jede Drosselungsklassifizierung der Webanwendung getestet. Drosselungsklassifizierungen sind persistente Objekte, die in der HttpThrottleSettings.ThrottleClassifiers-Eigenschaft gespeichert sind. Jede Drosselungsklassifizierung ist tatsächlich eine Definition der Kategorie einer HTTP-Anforderung. Jede Kombination von Merkmalen von HTTP-Anforderungen kann zum Definieren einer Kategorie verwendet werden. Dazu zählen auch die Dateinamenerweiterung der angeforderten Ressource, die Werte bestimmter Header, der Benutzer-Agent und die HTTP-Methode (z. B. GET oder POST). Die Klassifizierung besitzt eine ThrottleLevel-Eigenschaft, mit der angegeben wird, ob Anforderungen dieser Kategorie in FirstStage, SecondStage oder gar nicht gedrosselt werden. Die Anforderung wird gemäß den folgenden Regeln blockiert oder nicht blockiert:

    • Falls der Arbeitsprozess die Drosselungsebene FirstStage besitzt, werden alle Anforderungen in Kategorien mit Drosselungsebene FirstStageund Anforderungen, die zu keiner definierten Kategorie gehören, blockiert.

    • Falls der Arbeitsprozess die Drosselungsebene SecondStage besitzt, werden Anforderungen in Kategorien mit Drosselungsebene SecondStage ebenfalls blockiert, zusätzlich zu denen, die bei einer Drosselungsebene des Arbeitsprozesses von FirstStage blockiert werden.

HinweisHinweis

Da Anforderungen, die mit keiner Klassifizierung übereinstimmen, im Drosselungsmodus FirstStage blockiert werden, müssen Sie programmseitig ein Klassifizierungsobjekt für einen Anforderungstyp erstellen, der nicht bis zur zweiten Stufe blockiert werden soll, und das Objekt mit einem ThrottleLevel-Wert von SecondStage konstruieren. Wenn ein Anforderungstyp niemals blockiert werden soll, müssen Sie auf gleiche Weise ein Klassifizierungsobjekt mit einem ThrottleLevel-Wert von Never konstruieren. Weitere Informationen zu Klassifizierungsobjekten finden Sie unter Anforderungsklassifizierungen weiter unten in diesem Thema.

An den Client einer blockierten Anforderung wird ein HTTP 503-Fehler gesendet.

HinweisHinweis

Falls eine Anforderung zu mehr als einer Kategorie gehört und die Kategorien nicht alle dieselbe Drosselungsebene besitzen, wird sie in Übereinstimmung mit der am strengsten gedrosselten Kategorie gedrosselt. Wenn eine Anforderung beispielsweise zu einer Kategorie gehört, die bei der Ebene FirstStage gedrosselt wird, und auch zu einer Kategorie, die nur gedrosselt wird, wenn SecondStage erreicht wird, dann wird sie in der ersten Stufe gedrosselt.

Registrierte Leistungsindikatoren

Bei der ersten Installation von SharePoint Foundation werden einige Leistungsindikatoren möglicherweise automatisch mit der ersten "SharePoint – 80"-Webanwendung für die Nachverfolgung durch das Überwachungs- und Drosselungssystem registriert. Indikatoren können im System entweder programmseitig oder mit einem Cmdlet in der SharePoint-Verwaltungsshell hinzugefügt oder entfernt werden. Wenn Sie eine Liste der registrierten Indikatoren für eine bestimmte Webanwendung abrufen möchten, können Sie das folgende Cmdlet in der SharePoint-Verwaltungsshell verwenden.

Get-SPWebApplicationHttpThrottlingMonitor –identity http://<Web application URL>

Die folgende Tabelle stellt eine typische Liste der Indikatoren dar, die ein SharePoint Foundation-Administrator möglicherweise für eine Webanwendung überwachen möchte.

Leistungskategorie

Indikator

Instanzname, falls mehrere

Arbeitsspeicher

Verfügbare MB

Dieser Indikator besitzt nur eine Instanz.

ASP.NET

Anforderungen in Warteschlangen

Dieser Indikator besitzt nur eine Instanz.

ASP.NET

Wartezeit der Anforderung

Dieser Indikator besitzt nur eine Instanz.

Prozessor

Interrupte/Sek

_Total

Informationen zum programmseitigen Registrieren oder Aufheben der Registrierung für einen Leistungsindikator für eine Webanwendung finden Sie unter Gewusst wie: Registrieren und Aufheben der Registrierung eines Leistungsindikators.

Anforderungsklassifizierungen

Eine HTTP-Anforderungsklassifizierung ist ein Objekt einer von SPRequestThrottleClassifier abgeleiteten Klasse. Diese Objekte sind in der Konfigurationsdatenbank als Wert der HttpThrottleSettings.ThrottleClassifiers-Eigenschaft persistent. Im Objektmodell sind einige von SPRequestThrottleClassifier abgeleitete Klassen vorhanden. Die Eigenschaften dieser Klassen sind schreibgeschützt, sodass ein vorhandenes Anforderungsklassifizierungsobjekt nicht geändert werden kann. Sie können dem Speicher jedoch neue Klassifizierungsobjekte mit anderen Eigenschaftswerten hinzufügen und alte Klassifizierungsobjekte entfernen. Die Klassen sind versiegelt. Sie können jedoch neue Objekte von jeder Klasse erstellen und eigene Klassifizierungsklassen von SPRequestThrottleClassifier ableiten. In der folgenden Tabelle sind die Klassen und die Art von Anforderungskategorie aufgeführt, die zum Definieren verwendet werden können. Zudem wird die Standarddrosselungsebene gezeigt, auf der übereinstimmende Anforderungen gedrosselt werden, wenn bei Erstellung des Klassifizierungsobjekts keine andere Ebene angegeben wird.

Typ

Kategorie

Standarddrosselungsebene

SPHttpFileExtensionThrottleClassifier

Anforderungen für Ressourcen mit einer angegebenen Dateinamenerweiterung

FirstStage

SPHttpHeaderThrottleClassifier

Anforderungen mit einem angegebenen Header

FirstStage

SPHttpUserAgentAndMethodClassifier

Anforderungen mit einem angegebenen Benutzer-Agent oder einer angegebenen HTTP-Methode

Never

SPSearchCrawlingRequestClassifier

Anforderungen von Suchcrawlern

FirstStage

HinweisHinweis

Das Standardverhalten des Systems für Anforderungen, die mit keiner Klassifizierung übereinstimmen, ist das Blockieren in der ersten Stufe, sodass Sie ein Klassifizierungsobjekt mit einer Drosselungsebene von Never für Anforderungen erstellen müssen, die von der Drosselung ausgeschlossen sein sollen.

Weitere Informationen zum programmseitigen Registrieren und Aufheben der Registrierung von Anforderungsklassifizierungsobjekten finden Sie unter Gewusst wie: Erstellen und Registrieren oder Aufheben der Registrierung einer Anforderungsklassifizierung. Informationen zum Erstellen einer neuen Kategorie für die Klassifizierung finden Sie unter Vorgehensweise: Erstellen einer neuen Anforderungsklassifizierung.

Berechnungsmodul für die Integritätsbewertung

Mit dem Berechnungsmodul für die Integritätsbewertung wird ein Rohwert eines Leistungsindikators (oder das Ergebnis einer auf mehrere Rohwerte angewendeten Funktion) in eine Integritätsbewertung von 0 bis 10 umgewandelt, wobei 0 den Status mit der höchsten Integrität des Indikators und 10 die niedrigste Integrität angibt. Ein Berechnungsmodul ist ein Objekt einer von SPHealthScoreCalculator abgeleiteten Klasse. Eine solche Klasse ist bereits im Objektmodell vorhanden: SPBucketHealthScoreCalculator. Ein Objekt dieser Klasse teilt den Bereich der möglichen Werte eines Indikators in Unterbereiche, so genannte "Buckets". Das Objekt besitzt eine CalculateScore(Double)-Methode, die einem Wert eine Integritätsbewertung basierend auf dem Bucket zuweist, in den der Wert fällt. Nur Werte im Bucket mit der niedrigsten Integrität erhalten die Bewertung für die niedrigste Integrität 10.

Die Buckets – d. h., die Grenzen der Unterbereiche – werden beim Erstellen des SPBucketHealthScoreCalculator-Objekts definiert und können mit der SetScoreBuckets([])-Methode geändert werden.

Wichtiger HinweisWichtig

Beim Definieren der Buckets, die an ein SPBucketHealthScoreCalculator-Objekt übergeben werden, sollten Sie Folgendes beachten:

  • In SharePoint Foundation ist es hartcodiert, dass Anforderungen nur dann gedrosselt werden, wenn der gewichtete Durchschnitt von mindestens einem überwachten Indikator die schlechteste Bewertung 10 besitzt.

  • Das SPBucketHealthScoreCalculator-Element ist versiegelt, und sein CalculateScore(Double)-Element wird nur den Bewertungen eine 10 zuweisen, die sich im Bucket mit der niedrigsten Integrität befinden.

Wenn es also wichtig ist, dass die Drosselung aktiviert wird, wenn der gewichtete Durchschnitt eines bestimmten Indikators einen bestimmten Wert erreicht, müssen Sie sicherstellen, dass Sie die Buckets so definieren, dass dieser Wert in den Bucket mit der niedrigsten Integrität fällt.

Wenn Sie ein Berechnungsmodul im Bucketformat verwenden möchten, dessen CalculateScore(Double)-Methode ein anderes Verhalten zeigt, oder wenn Sie ein Berechnungsmodul für die Integritätsbewertung benötigen, das kein Bucketsystem verwendet, leiten Sie eine neue Klasse von SPHealthScoreCalculator ab, und implementieren Sie die CalculateScore(Double)-Methode bei Bedarf.

Ein Objekt des Berechnungsmoduls für die Integritätsbewertung ist in der Konfigurationsdatenbank als eine Eigenschaft eines SPPerformanceMonitorCreationData-Objekts persistent.

Weitere Informationen zum Erstellen von Berechnungsmodulen für die Integritätsbewertung und zum Zuweisen dieser Module zur Überwachung von Erstellungsdatenobjekten finden Sie unter Gewusst wie: Erstellen und Ändern eines Berechnungsmoduls für die Integritätsbewertung im Bucketformat.

Siehe auch

Aufgaben

Gewusst wie: Ändern der Einstellungen für das Anforderungsdrosselungssystem

Gewusst wie: Registrieren und Aufheben der Registrierung eines Leistungsindikators

Gewusst wie: Erstellen und Registrieren oder Aufheben der Registrierung einer Anforderungsklassifizierung

Gewusst wie: Erstellen und Ändern eines Berechnungsmoduls für die Integritätsbewertung im Bucketformat

Konzepte

Vorgehensweise: Erstellen einer neuen Anforderungsklassifizierung

Vorgehensweise: Programmgesteuertes Lesen überwachter Werte