Limitación de solicitudes
Última modificación: jueves, 03 de marzo de 2011
Hace referencia a: SharePoint Foundation 2010
En este artículo
Información general sobre limitación de solicitudes
Inicialización del sistema de control de limitación
Determinar si se bloquea una solicitud
Contadores de rendimiento registrados
Clasificadores de solicitudes
Calculadoras de puntuación de estado
En este tema se describe el sistema de Microsoft SharePoint Foundation para la limitación de las solicitudes HTTP cuando los servidores front-end web se encuentran muy ocupados para atender todas las solicitudes entrantes.
Información general sobre limitación de solicitudes
SharePoint Foundation incluye un sistema para la limitación de diversos contadores de rendimiento de Windows Server 2008 y para la limitación (es decir, el bloqueo) de las solicitudes HTTP, si alguno de dichos contadores indica que un servidor se encuentra muy ocupado para atender todas las solicitudes que recibe. El sistema de limitación y supervisión puede activarse y desactivarse para una aplicación web de SharePoint Foundation específica en la aplicación de Administración central o por medio de un comando de PowerShell en la Consola de administración de SharePoint. El sistema puede modificarse mediante el modelo de objetos de SharePoint Foundation o mediante los cmdlets de la Consola de administración de SharePoint.
Sugerencia |
---|
Para intentar programar en el modelo de objetos de limitación y supervisión de SharePoint Foundation, debe estar familiarizado con el sistema de Windows Server 2008 de contadores de rendimiento y con los conceptos de categoría (que también se conocen como objeto de rendimiento), contador e instancia. Para obtener más información acerca de estos elementos y acerca de la creación de contadores de rendimiento propios, vea los siguientes temas:
|
Inicialización del sistema de control de limitación
El sistema de control de limitación se inicializa durante el evento BeginRequest de la primera solicitud HTTP a un proceso de trabajo específico en un servidor front-end web específico. Las solicitudes subsiguientes al mismo proceso reutilizan las entidades y subprocesos inicializados en esa primera solicitud. Si se reinicia la aplicación web, se reinicializará el sistema con la primera solicitud después del reinicio. Los dos pasos principales para la inicialización se describen en los siguientes subapartados.
Creación de un inspector de rendimiento
Cada proceso de trabajo de cada aplicación web en cada servidor front-end web tiene su propio inspector de rendimiento que se inicializa con información de la propiedad HttpThrottleSettings de la aplicación web. El inspector cuenta con las siguientes partes principales:
Un conjunto de puntuaciones de mantenimiento, una para cada contador de rendimiento que se supervisa. Las puntuaciones son valores de Int32 de 0 a 10, donde 0 es la puntuación con el mejor estado posible y 10 la puntuación con el peor estado.
Una puntuación de estado general para el proceso, que también es un valor de Int32 de 0 a 10.
Para cada contador que se supervisa, un conjunto de valores de rendimiento sin formato que se han leído (muestreado) desde el contador. Se encuentran en orden desde la muestra más antigua hasta la más reciente.
Un subproceso de inspección del estado del servidor usado para tomar muestras de los valores del contador de forma periódica.
Un valor de intervalo de actualización que determina la frecuencia con la que se vuelven a tomar muestras de los contadores. El valor predeterminado es 5 segundos.
Inicio del subproceso de inspección del estado del servidor
El subproceso de inspección del estado del servidor se crea al crear el inspector. Recorre en bucle los siguientes pasos en un intervalo especificado por el intervalo de actualización del inspector.
Obtiene el objeto SPHttpThrottleSettings en la propiedad HttpThrottleSettings de la aplicación web. (Es posible que este objeto haya cambiado desde el último bucle; por ejemplo, el intervalo de actualización puede haber cambiado o puede haberse agregado un contador de rendimiento adicional a la lista de los que se están supervisando).
Comprueba que la limitación de solicitudes no se haya desactivado desde el último bucle.
Establece el intervalo de actualización del inspector con el valor de SPHttpThrottleSettings.RefreshInterval.
Llama al método GenerateMonitors(). Este método crea un objeto SPSystemPerformanceCounterMonitor para cada contador de rendimiento que necesita supervisarse. La información sobre qué contador de rendimiento debe supervisarse se proporciona por medio de un conjunto persistente de objetos SPPerformanceMonitorCreationData. Hay uno para cada contador que debe supervisarse. Cada uno de estos objetos de datos de creación tiene un objeto SPHealthScoreCalculator secundario crítico. Este objeto puede convertir un valor del contador de rendimiento en una puntuación de estado de 0 a 10. (También puede tomar el resultado de una función matemática de varios valores de rendimiento y convertirlo en una puntuación de estado).
Cada monitor toma muestras del valor más reciente del contador que supervisa y almacena dicho valor en el conjunto de valores de rendimiento sin formato del inspector para el contador correspondiente.
Cada monitor actualiza la puntuación de estado del contador que supervisa. Este paso cuenta con los siguientes pasos secundarios:
Los valores de muestras que son demasiado antiguos para ser relevantes se quitan del conjunto de valores de rendimiento sin formato. Solo se conservan los valores n más recientes, donde n es el valor de la propiedad HttpThrottleSettings.NumberOfSamples.
Se aplica una función matemática a los valores restantes para producir una media ponderada de los valores. Cuanto más reciente sea el valor, más alto se ponderará.
El monitor usa esta calculadora de puntuación de estado para calcular una puntuación de estado de 0 a 10 para la media ponderada.
La puntuación de estado general del proceso de trabajo se establece en la puntuación más alta (con el peor estado) de entre las puntuaciones de los monitores individuales.
El nivel de limitación se establece de acuerdo con las siguientes reglas:
Si la puntuación de estado general del proceso es menor que 10, no es necesario limitar las solicitudes, por lo que el nivel de limitación se establece en Normal.
Si la puntuación de estado general es 10 (la puntuación más alta posible y con el peor estado), pero ha sido 10 durante menos de 60 segundos, el nivel de limitación se establece en FirstStage. Esto significa que ciertas categorías de solicitudes HTTP se bloquean y se envía al cliente un error HTTP 503 ("Servicio no disponible"). Esta limitación afecta solo a las solicitudes asignadas al mismo proceso de trabajo. Para obtener información acerca de cómo determina el sistema las categorías de solicitudes que se bloquean y cómo decide a qué categoría pertenece una solicitud determinada, vea Determinar si se bloquea una solicitud más adelante en este tema.
Si la puntuación de estado general es 10 y ha sido 10 durante al menos 60 segundos, el nivel de limitación se establece en SecondStage. Esto significa que se bloquean categorías adicionales de solicitudes.
El subproceso de inspección espera el tiempo que dura el intervalo de actualización y, a continuación, se repite.
Nota
Si el nivel de limitación está establecido en FirstStage o SecondStage, la limitación continúa para el proceso de trabajo hasta que su puntuación de estado general se restablezca en un valor inferior a 10 en algún ciclo del subproceso de inspección.
Determinar si se bloquea una solicitud
Si el sistema de limitación y supervisión se activa para una aplicación web especificada, la decisión de si una solicitud HTTP determinada se bloquea se lleva a cabo durante el evento PostResolveRequestCache de la solicitud. En concreto, se ejecutan los siguientes pasos:
El objeto de respuesta HTTP se inicializa y se le agrega un encabezado que contiene la puntuación de estado general del proceso de trabajo.
Se comprueba el nivel de limitación del proceso para determinar si se encuentra en FirstStage o SecondStage. Si no se encuentra en ninguno de los dos niveles, el proceso no se encuentra en modo de limitación y se omiten los pasos restantes.
Si el proceso se encuentra en modo de limitación, la solicitud se prueba mediante cada uno de los clasificadores de limitación de la aplicación web. Los clasificadores de limitación son objetos persistentes almacenados en la propiedad HttpThrottleSettings.ThrottleClassifiers. Efectivamente, cada clasificador de limitación es una definición de una categoría de solicitud HTTP. Puede usar cualquier combinación de características de solicitudes HTTP para definir una categoría, incluida la extensión de nombre de archivo del recurso solicitado, los valores de ciertos encabezados, el agente de usuario y el método HTTP (por ejemplo, "GET" o "POST"). El clasificador tiene una propiedad ThrottleLevel que especifica si las solicitudes que pertenecen a la categoría se limitan en FirstStage, SecondStage, o no se limitan en absoluto. Se bloquea la solicitud, o no, de acuerdo con las siguientes reglas:
Si el proceso de trabajo tiene el nivel de limitación FirstStage, se bloquearán todas las solicitudes de las categorías con el nivel de limitación FirstStage y las solicitudes que no pertenezcan a ninguna de las categorías definidas.
Si el proceso de trabajo tiene el nivel de limitación SecondStage, también se bloquean las solicitudes de las categorías con el nivel de limitación SecondStage además de aquellas que se bloquean cuando el proceso de trabajo tiene un nivel de limitación de FirstStage.
Nota
Debido a que las solicitudes que no coinciden con ningún clasificador se bloquean en el modo de limitación FirstStage, debe crear mediante programación un objeto clasificador para cada tipo de solicitud que no desee bloquear hasta la segunda fase y construir el objeto con un ThrottleLevel de SecondStage. De forma similar, si un tipo de solicitud nunca debe bloquearse, debe construir un objeto clasificador con un ThrottleLevel de Never. Para obtener más información acerca de los objetos clasificadores, vea Clasificadores de solicitudes más adelante en este tema.
Se envía un error HTTP 503 al cliente de las solicitudes bloqueadas.
Nota
Si una solicitud pertenece a más de una categoría, y no todas las categorías tienen el mismo nivel de limitación, se limita de acuerdo con la categoría limitada más estrictamente. Por ejemplo, si una solicitud pertenece a una categoría limitada en el nivel de FirstStage, pero también a una categoría limitada únicamente si se alcanza SecondStage, entonces se limitará en la primera etapa.
Contadores de rendimiento registrados
Al instalar SharePoint Foundation por primera vez, puede que algunos contadores de rendimiento se registren automáticamente con la aplicación web "SharePoint – 80" inicial para el seguimiento por medio del sistema de limitación y supervisión. Pueden agregarse o quitarse contadores en el sistema mediante programación o con un cmdlet de Consola de administración de SharePoint. Para obtener una lista de los contadores registrados para cualquier aplicación web determinada, use el siguiente cmdlet de la Consola de administración de SharePoint.
Get-SPWebApplicationHttpThrottlingMonitor –identity http://<Web application URL>
En la tabla siguiente se enumeran los contadores típicos que un administrador de SharePoint Foundation puede desear supervisar para una aplicación web.
Categoría de rendimiento |
Contador |
Nombre de instancia, si hay más de una |
---|---|---|
Memoria |
Mbytes disponibles |
Este contador tiene solamente una instancia. |
ASP.NET |
Solicitudes en cola |
Este contador tiene solamente una instancia. |
ASP.NET |
Tiempo de espera de la solicitud |
Este contador tiene solamente una instancia. |
Procesador |
Interrupciones por segundo |
_Total |
Para obtener información acerca de cómo registrar o anular el registro de un contador de rendimiento para una aplicación web mediante programación, vea Procedimiento para registrar o eliminar del Registro un contador de rendimiento.
Clasificadores de solicitudes
Un clasificador de solicitud HTTP es un objeto de una clase derivada de SPRequestThrottleClassifier. Estos objetos están guardados en la base de datos de configuración como el valor de la propiedad HttpThrottleSettings.ThrottleClassifiers. Hay algunas clases derivadas de SPRequestThrottleClassifier en el modelo de objetos. Las propiedades de estas clases son de solo lectura, por lo que no es posible cambiar un objeto clasificador de solicitudes existente, pero pueden agregarse al almacén objetos clasificadores nuevos con distintos valores de propiedad y quitarse los antiguos. Las clases están selladas, pero puede crear objetos nuevos de cada una de estas clases y derivar clases de clasificadores propias desde SPRequestThrottleClassifier. En la siguiente tabla se muestran las clases y el tipo de categoría de solicitud que puede definir cada una de ellas. También se muestra el nivel de limitación predeterminado en el que las solicitudes coincidentes se limitan a menos que se especifique un nivel diferente al crear el objeto clasificador.
Tipo |
Categoría |
Nivel de limitación predeterminado |
---|---|---|
Solicitudes de recursos con una extensión de nombre de archivo especificada |
||
Solicitudes que contienen un encabezado especificado |
||
Solicitudes que tienen un agente de usuario especificado o que usan un método HTTP especificado |
||
Solicitudes que provienen de rastreadores de búsqueda |
Nota
El comportamiento predeterminado del sistema para las solicitudes que no coinciden con ningún clasificador consiste en bloquearlas en la primera etapa, por lo que debe crearse específicamente un objeto clasificador con un nivel de limitación de Never para las solicitudes que deben excluirse de la limitación.
Para obtener más información acerca de cómo registrar y anular el registro de objetos clasificadores de solicitudes mediante programación, vea Procedimiento para crear y registrar o cancelar el registro de un clasificador de solicitudes. Para obtener información acerca de la creación de una nueva categoría de clasificador, vea Procedimiento para crear un nuevo clasificador de solicitudes.
Calculadoras de puntuación de estado
Una calculadora de puntuación de estado convierte un valor sin formato de un contador de rendimiento (o el resultado de alguna función aplicada a varios valores sin formato) en una puntuación de estado de 0 a 10, donde 0 representa la puntuación con el mejor estado posible del contador y 10 representa la puntuación con el peor estado. Una calculadora es un objeto de una clase derivada de SPHealthScoreCalculator. Ya existe una clase como esta en el modelo de objetos: SPBucketHealthScoreCalculator. Un objeto de esta clase divide el conjunto de valores posibles de un contador en subconjuntos, denominados "cubos". El objeto tiene un método CalculateScore(Double) que asigna una puntuación de estado a un valor en función del cubo en el que entra el valor. Solo a los valores del cubo con el peor estado se les asigna la puntuación con el peor estado de 10.
Los cubos, es decir los límites del subconjunto, se definen al construir el objeto SPBucketHealthScoreCalculator y pueden cambiarse con el método SetScoreBuckets([]).
Importante |
---|
Cuando defina los cubos para pasarlos a un objeto SPBucketHealthScoreCalculator, tenga en cuenta lo siguiente:
Por lo tanto, si es esencial que se active la limitación cuando la media ponderada de un contador determinado alcanza un cierto valor, asegúrese de definir los cubos de modo que el valor entre en el cubo con peor estado. |
Si desea una calculadora de tipo cubo cuyo método CalculateScore(Double) se comporte de manera diferente o si necesita una calculadora de puntuación de estado que no use un sistema de cubos en absoluto, derive una nueva clase desde SPHealthScoreCalculator e implemente el método CalculateScore(Double) según sea necesario.
Un objeto de calculadora de puntuación de estado se guarda en la base de datos de configuración como una propiedad de un objeto SPPerformanceMonitorCreationData.
Para obtener más información acerca de la creación de calculadoras de puntuación de estado y de su asignación para la supervisión de objetos de datos de creación, vea Procedimiento para crear, modificar y cambiar una calculadora de puntuación de mantenimiento de estilo cubo.
Vea también
Tareas
Procedimiento para cambiar la configuración del sistema de limitación de solicitudes
Procedimiento para registrar o eliminar del Registro un contador de rendimiento
Procedimiento para crear y registrar o cancelar el registro de un clasificador de solicitudes
Conceptos
Procedimiento para crear un nuevo clasificador de solicitudes
Procedimiento para leer mediante programación valores supervisados