Поделиться через


Регулирование запросов

Дата последнего изменения: 9 марта 2015 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Обзор регулирования запросов
Инициализация системы регулирования запросов
Определение необходимости блокировки запроса
Зарегистрированные счетчики производительности.
Классификаторы запросов
Калькуляторы показателей исправности

В этом разделе приводится описание системы Microsoft SharePoint Foundation, выполняющей регулирование HTTP-запросов, когда интерфейсные веб-серверы становятся перегруженными и не могут обрабатывать все входящие запросы.

Обзор регулирования запросов

SharePoint Foundation включает систему для мониторинга различных счетчиков производительности Windows Server 2008 и регулирования (то есть блокировки) HTTP-запросов, если какой-либо из этих счетчиков показывает, что сервер перегружен и не может обрабатывать все принимаемые запросы. Систему мониторинга и регулирования можно включать и выключать для конкретного веб-приложения SharePoint Foundation в приложении центра администрирования или с помощью команды PowerShell в SharePoint. Систему можно изменить с помощью объектной модели SharePoint Foundation или с помощью командлетов в SharePoint.

СоветСовет

Прежде чем приступить к программированию с использованием объектной модели мониторинга и регулирования в SharePoint Foundation, следует ознакомиться с системой счетчиков производительности в Windows Server 2008 и понятиями категория (также называется объект производительности), счетчик и экземпляр. Дополнительные сведения по этим предметам и о создании собственных счетчиков производительности см. в следующих разделах:

Инициализация системы регулирования запросов

Система регулирования инициализируется во время события BeginRequest первого HTTP-запроса к конкретному рабочему процессу на заданном интерфейсном веб-сервере. В последующих запросах к тому же процессу повторно используются объекты и потоки, инициализированные при первом запросе. Если веб-приложение сбрасывается, система инициализируется заново при первом запросе после сброса. Два основных этапа инициализации описываются в следующих подразделах.

Создание инспектора производительности

У каждого рабочего процесса каждого веб-приложения на каждом интерфейсном веб-сервере имеется свой инспектор производительности, который инициализируется данными из свойства HttpThrottleSettings веб-приложения. Инспектор состоит из следующих основных элементов:

  • Набор показателей исправности — по одному для каждого отслеживаемого счетчика производительности. Показатели имеют значения типа Int32 от 0 до 10, где 0 отражает наибольшую исправность, а 10 — наименьшую.

  • Общий показатель исправности процесса, также имеющий тип Int32 со значениями от 0 до 10.

  • Для каждого отслеживаемого счетчика набор исходных значений производительности, которые были считаны из счетчика. Они упорядочены от самого старого до самого нового значения.

  • Поток проверки состояния сервера, который используется для периодического сбора значений счетчика.

  • Параметр интервала обновления, который определяет частоту повторного считывания значений счетчиков. Значение по умолчанию — 5 с.

Запуск потока проверки состояния сервера

Поток проверки состояния сервера создается при создании инспектора. Он циклически повторяет следующие шаги с частотой, указанной в интервале обновления инспектора.

  1. Возвращает объект SPHttpThrottleSettings в свойстве HttpThrottleSettings веб-приложения. (Этот объект мог измениться со времени последнего повтора цикла. Например, мог измениться интервал обновления или в список отслеживаемых счетчиков был добавлен дополнительный счетчик производительности.)

  2. Проверяет, не было ли отключено регулирование запросов с момента последнего повтора цикла.

  3. Задает интервал обновления инспектора, равный значению из SPHttpThrottleSettings.RefreshInterval.

  4. Вызывает метод GenerateMonitors(). Этот метод создает объект SPSystemPerformanceCounterMonitor для каждого счетчика производительности, который нужно отслеживать. Сведения о том, какие счетчики на сервере необходимо отслеживать, предоставляются хранимым набором объектов SPPerformanceMonitorCreationData. Для каждого счетчика, который нужно отслеживать, имеется один такой объект. У каждого такого объекта данных создания есть важный дочерний объект SPHealthScoreCalculator. Он может преобразовывать значение счетчика производительности в показатель исправности со значением от 0 до 10. (Он также может принимать результат математической функции от нескольких значений производительности и преобразовывать его в показатель исправности.)

  5. Каждый монитор считывает последнее значение отслеживаемого счетчика и сохраняет его в наборе исходных значений производительности инспектора для соответствующего счетчика.

  6. Каждый монитор обновляет показатель исправности для отслеживаемого им счетчика. У этого этапа имеются следующие подэтапы.

    1. Образцы значений, слишком старые и поэтому нерелевантные, удаляются из набора исходных значений производительности. Сохраняются только самые недавние n значений, где n — это значение свойства HttpThrottleSettings.NumberOfSamples.

    2. К оставшимся значениям применяется математическая функция, которая выдает средневзвешенное по значениям. Более поздние значения имеют большее средневзвешенное.

    3. Монитор использует свой калькулятор показателя исправности для расчета показателя исправности от 0 до 10 для средневзвешенного значения.

  7. Общий показатель исправности для рабочего процесса получает наивысшее (отражающее самую низкую исправность) значение из всех показателей отдельных мониторов.

  8. Уровень регулирования задается в соответствии со следующими правилами.

    • Если общий показатель исправности для процесса меньше 10, то необходимости в регулировке запросов нет, поэтому устанавливается уровень регулирования Normal.

    • Если общий показатель исправности равен 10 (самое высокое из возможных значений, отражающее наименьшую исправность), но после получения этого значения прошло менее 60 с, то устанавливается уровень регулирования FirstStage. Это значит, что определенные категории HTTP-запросов блокируются, и клиенту отправляется ошибка HTTP 503 ("Служба недоступна"). Регулирование затрагивает только запросы, назначенные одному рабочему процессу. Сведения о том, как система определяет блокируемые категории запросов и как она определяет категорию конкретного запроса, см.в разделе Определение необходимости блокировки запроса ниже в данном разделе.

    • Если общий показатель исправности меньше 10 и после получения этого значения прошло не меньше 60 с, то устанавливается уровень регулирования SecondStage. Это означает, что дополнительные категории запросов блокируются.

  9. Поток проверки ожидает в течение времени, равного интервалу обновления, и повторяется.

    ПримечаниеПримечание

    При уровне регулирования FirstStage или SecondStage регулирование для рабочего процесса продолжается, пока его общий показатель исправности на некотором цикле потока проверки не сбрасывается до значения ниже 10.

Определение необходимости блокировки запроса

Если система мониторинга и регулирования включена для конкретного веб-приложения, то решение о блокировке данного HTTP-запроса принимается во время события PostResolveRequestCache запроса. В частности, выполняются следующие действия.

  1. Инициализируется объект HTTP-ответа, и к нему добавляется заголовок, содержащий общий показатель исправности для рабочего процесса.

  2. Выполняется проверка, имеет ли уровень регулирования для процесса значение FirstStage или SecondStage. Если он не равен ни одному из этих значений, значит процесс не находится в режиме регулирования, и остальные шаги пропускаются.

  3. Если процесс находится в режиме регулирования, запрос проверяется каждым классификатором регулирования в веб-приложении. Классификаторы регулирования являются хранимыми объектами, которые находятся в свойстве HttpThrottleSettings.ThrottleClassifiers. Таким образом, каждый классификатор регулирования является определением категории HTTP-запроса. Для определения категории может использоваться любая комбинация характеристик HTTP-запросов, включая расширение файла запрашиваемого ресурса, значения определенных заголовков, агент обработки и метод HTTP (например, GET или POST). У классификатора имеется свойство ThrottleLevel, которое указывает, задано для для запросов, принадлежащих категории, регулирование уровня FirstStage, SecondStage или регулирование не выполняется. Запрос блокируется или не блокируется в соответствии со следующими правилами.

    • Если для рабочего процесса установлен уровень регулирования FirstStage, все запросы в категориях с уровнем регулирования FirstStageи запросы, не принадлежащие ни одной определенной категории, блокируются.

    • Если для рабочего процесс установлен уровень регулирования SecondStage, то также блокируются запросы в категориях с уровнем регулирования SecondStage в дополнение к запросам, которые блокируются, когда для рабочего процесс задан уровень регулирования FirstStage.

ПримечаниеПримечание

Поскольку запросы, не соответствующие никаким классификаторам, в режиме регулирования FirstStage блокируются, для любого типа запроса, который не нужно блокировать до второго этапа, необходимо программно создавать объект классификатора, свойство ThrottleLevel которого имеет значение SecondStage. Аналогично, если запросы определенного типа никогда не должны блокироваться, нужно создать объект классификатора, свойство ThrottleLevel которого имеет значение Never. Дополнительные сведения об объектах классификаторов см. в разделе Классификаторы запросов далее.

Клиенту каждого заблокированного запроса отправляется ошибка HTTP 503.

ПримечаниеПримечание

Если запрос принадлежит нескольким категориям с разными уровнями регулирования, его регулирование выполняется в соответствии с самым строгим уровнем регулирования из всех этих категорий. Например, если запрос принадлежит категории с уровнем регулирования FirstStage и категории, регулирование для которой включается только при достижении значения SecondStage, то запрос будет регулироваться на первом этапе.

Зарегистрированные счетчики производительности.

При первоначальной установке SharePoint Foundation для исходного веб-приложения "SharePoint – 80" могут автоматически регистрироваться некоторые счетчики производительности для отслеживания системой мониторинга и регулирования. Счетчики можно добавлять и удалять из системы программным способом или с помощью командлета SharePoint. Получить список зарегистрированных счетчиков для конкретного веб-приложения можно с помощью следующего командлета SharePoint:

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

В следующей таблице приведен типовой список счетчиков, которые может потребоваться отслеживать администратору SharePoint Foundation для веб-приложения.

Категория производительности

Счетчик

Имя экземпляра, если их больше одного

Память

Доступно МБ

У этого счетчика только один экземпляр.

ASP.NET

Запросов в очереди

У этого счетчика только один экземпляр.

ASP.NET

Время ожидания запроса

У этого счетчика только один экземпляр.

Процессор

Прерываний/с

_Всего

Сведения о программной регистрации и отмене регистрации счетчика производительности для веб-приложения см. в статье Практическое руководство. Регистрация и отмена регистрации счетчика производительности.

Классификаторы запросов

Классификатор HTTP-запроса — это объект класса, производного от SPRequestThrottleClassifier. Эти объекты хранятся в базе данных конфигураций в качестве значения свойства HttpThrottleSettings.ThrottleClassifiers. В объектное модели имеются некоторые классы, производные от SPRequestThrottleClassifier. Свойства этих классов доступны только для чтения, поэтому изменять существующий объект классификатора запроса нельзя, однако в хранилище можно добавлять новые объекты классификаторов с другими значениями свойств, а затем удалять из него старые объекты классификаторов. Классы являются запечатанными, однако можно создавать новые объекты любого из классов и наследовать собственные классы классификаторов от SPRequestThrottleClassifier. В следующей таблице показаны классы и категории запросов, для определения которых можно использовать каждый из этих классов. В ней также приведены уровни регулирования по умолчанию для соответствующих запросов, которые используются, если только при создании объекта классификатора не указывается другой уровень.

Тип

Категория

Уровень регулирования по умолчанию

SPHttpFileExtensionThrottleClassifier

Запросы ресурсов с заданным расширением имени файла

FirstStage

SPHttpHeaderThrottleClassifier

Запросы с указанным заголовком

FirstStage

SPHttpUserAgentAndMethodClassifier

Запросы, имеющие заданный агент пользователя или использующие указанный HTTP-метод

Never

SPSearchCrawlingRequestClassifier

Запросы от программ-обходчиков

FirstStage

ПримечаниеПримечание

В системе запросы, не соответствующие ни одному классификатору, по умолчанию блокируются на первом этапе, поэтому для запросов, которые не должны регулироваться, необходимо специально создавать объект классификатора с уровнем регулирования Never.

Дополнительные сведения о программной регистрации и отмене регистрации объектов классификаторов запросов см. в статье Практическое руководство. Создание и регистрация или отмена регистрации классификатора запросов. Сведения о создании новой категории классификаторов см. в статье Практическое руководство. Создание нового классификатора запросов.

Калькуляторы показателей исправности

Калькулятор показателя исправности преобразует исходное значение счетчика производительности (или результат некоторой функции от нескольких исходных значений) в показатель исправности от 0 до 10, где 0 отражает самую высокую возможную степень исправности, а 10 — самую низкую. Калькулятор является объектом класса, производного от SPHealthScoreCalculator. В объектной модели уже имеется такой класс: SPBucketHealthScoreCalculator. Объект этого класса разделяет весь спектр возможных значений счетчика на диапазоны, которые называются "контейнерами". У объекта есть метод CalculateScore(Double), который присваивает показатель исправности значению на основании контейнера, которому принадлежит значение. Самый низкий показатель исправности, 10, получают только значения в наименее работоспособном контейнере.

Контейнеры, то есть диапазоны границ, определяются при создании объекта SPBucketHealthScoreCalculator и могут изменяться с помощью метода SetScoreBuckets([]).

Важное примечаниеВажно!

При определении контейнеров, передаваемых объекту SPBucketHealthScoreCalculator, примите во внимание следующее:

  • В SharePoint Foundation жестко задано, что регулирование запросов происходит только тогда, когда средневзвешенное значение по крайней мере одного из отслеживаемых счетчиков, оказывается равным худшему возможному значению, 10.

  • Класс SPBucketHealthScoreCalculator является запечатанным, и его метод CalculateScore(Double) назначает значение 10 только показателям в наименее работоспособном контейнере.

Поэтому важно, чтобы регулирование было включено, когда средневзвешенное значение конкретного счетчика достигает определенного значения. Обязательно определите контейнеры, чтобы значение могло попасть в контейнер наименьшей исправности.

Если требуется калькулятор в виде контейнера, метод CalculateScore(Double) которого действует по-другому, или калькулятор показателя исправности, который никак не связан с контейнерами, создайте новый класс, производный от SPHealthScoreCalculator, и реализуйте нужный метод CalculateScore(Double).

Калькулятор показателя исправности сохраняется в базе данных конфигураций в виде свойства объекта SPPerformanceMonitorCreationData.

Дополнительные сведения о создании калькуляторов показателей исправности и их назначении объектам данных создания мониторов см. в разделе Создание, замена и изменение калькуляторов показателей работоспособности в виде контейнеров.

См. также

Задачи

Инструкции. Изменение параметров системы регулирования запросов

Практическое руководство. Регистрация и отмена регистрации счетчика производительности

Практическое руководство. Создание и регистрация или отмена регистрации классификатора запросов

Создание, замена и изменение калькуляторов показателей работоспособности в виде контейнеров

Концепции

Практическое руководство. Создание нового классификатора запросов

Практическое руководство. Программное чтение отслеживаемых значений