Tabla de Contenidos

Filtros para Garantizar el QoS

En FundeWeb 2.0 y en FundeWeb 1.2.x tenemos disponibles varios filtros para garantizar el QoS de las aplicaciones, que permiten controlar el número total de peticiones que puede atender la aplicación en un instante de tiempo, comprobación de solicitudes duplicadas y control de peticiones concurrentes de una IP o sesión.

Los filtros son los siguientes:

  1. ConcurrentRequestControlFilter: Controlamos que una sesión o IP, no pueda ejecutar al mismo tiempo mas de un determinado numero de peticiones, pasando esta a una lista FIFO.
  2. DuplicateRequestControlFilter: Controla el que no haya peticiones duplicadas en cierto intervalo de tiempo, descartando la petición duplicada.
  3. TrafficControlFilter: Controla que el servidor no procesa mas de un número determinado de peticiones, descartando el resto de peticiones.

ConcurrentRequestControlFilter

Este filtro permite controlar el número máximo de peticiones concurrentes que puede ejecutar la aplicación para una misma sesión o dirección IP. Una vez alcanzado dicho número, las peticiones se encolan en una lista FIFO para ir sirviéndose, cuando el número de peticiones concurrentes sea menor que el limite establecido.

1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz del fichero _<components>_ (donde están definidos el resto de espacio de nombres):

Para FundeWeb 1.2.x: xmlns:fdw-control=“http://www.umu.org/atica/seam/web/control
Para FundeWeb 2.0.x: xmlns:fdw-control=“http://www.um.es/atica/seam/web/control

2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente:

Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd
Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd

3.- Añadir la configuración del filtro. Ejemplo para FundeWeb 2.0.x:

<components
    ...
    xmlns:fdw-control="http://www.um.es/atica/seam/web/control"
    xsi:schemaLocation="
        ...
        http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd">
 
	<!-- Concurrent Request Control Filter -->
	<fdw-control:concurrent-request-control-filter
		disabled="false"
		url-pattern="*.seam"
		max-concurrent-request="2"
		wait-timeout="250"
		filter-session="true"/>
   ...
</components>

Las propiedades importantes son las siguientes:

  1. disabled: indica si el filtro esta desactivado (con valor true) o activado (con valor false). Por defecto el filtro esta desactivado.
  2. url-pattern: peticiones sobre las que actúa el filtro, por defecto *.seam.
  3. max-concurrent-request: número máximo de peticiones concurrentes que puede ejecutar la aplicación para una sesión o dirección IP. El valor por defecto es de 2 peticiones. El valor mínimo aceptado es de 1 petición.
  4. wait-timeout: intervalo de tiempo durante el que la petición estará pausada. El valor por defecto y mínimo es de 250 milisegundos.
  5. filter-session: indica si el filtrado se hace por sesión (con valor true) o por dirección IP (con valor false). El valor por defecto es 'true'.

DuplicateRequestControlFilter

Este filtro permite controlar peticiones duplicadas que se producen en cierto intervalo de tiempo, descartando la segunda petición. Para poder utilizar el filtro, tendremos que realizar los siguientes pasos:

1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz del fichero _<components>_ (donde están definidos el resto de espacio de nombres):

Para FundeWeb 1.2.x: xmlns:fdw-control=“http://www.umu.org/atica/seam/web/control
Para FundeWeb 2.0.x: xmlns:fdw-control=“http://www.um.es/atica/seam/web/control

2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente:

Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd
Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd

3.- Añadir la configuración del filtro. Ejemplo para FundeWeb 2.0.x:

<components
    ...
    xmlns:fdw-control="http://www.um.es/atica/seam/web/control"
    xsi:schemaLocation="
        ...
        http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd">
 
	<!-- Duplicate Request Control Filter -->
	<fdw-control:duplicate-request-control-filter
		disabled="false"
		url-pattern="*.seam"
		time-interval="10000"/>
   ...
</components>

Las propiedades importantes son las siguientes:

TrafficControlFilter

Este filtro permite controlar el número de peticiones máximo que pueden estar ejecutándose en la aplicación al mismo tiempo. Una vez alcanzado dicho número, las nuevas peticiones entrantes se pausan un determinado periodo de tiempo antes de volver a intentar su reanudación. Una petición pausada tiene un número de reintentos de reanudación antes de ser descartada. Cuando una petición es descartada se lanza la excepción es.um.atica.seam.web.exceptions.TooManyRequestException.

Para poder utilizar el filtro, tendremos que realizar los siguientes pasos:

1.- Hay que añadir el siguiente espacio de nombres en el elemento raíz del fichero _<components>_ (donde están definidos el resto de espacio de nombres):

Para FundeWeb 1.2.x: xmlns:fdw-control=“http://www.umu.org/atica/seam/web/control
Para FundeWeb 2.0.x: xmlns:fdw-control=“http://www.um.es/atica/seam/web/control

2.- En la propiedad _xsi:schemaLocation_ añadimos lo siguiente:

Para FundeWeb 1.2.x: http://www.umu.org/atica/seam/web/control http://www.umu.org/atica/seam/web/control-1.5.0.xsd
Para FundeWeb 2.0.x: http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd

3.- Añadir la configuración del filtro. Ejemplo para FundeWeb 2.0.x:

<components
    ...
    xmlns:fdw-control="http://www.um.es/atica/seam/web/control"
    xsi:schemaLocation="
        ...
        http://www.um.es/atica/seam/web/control http://www.um.es/atica/seam/web/control-2.0.0.xsd">
 
	<!-- Traffic Filter -->
	<fdw-control:traffic-control-filter
		disabled="false"
		url-pattern="*.seam"
		max-request="150"
		wait-timeout="1000"
		retries="5"/>
   ...
</components>

Las propiedades importantes son las siguientes:

  1. disabled: indica si el filtro esta desactivado (con valor true) o activado (con valor false). Por defecto el filtro esta desactivado.
  2. url-pattern: peticiones sobre las que actúa el filtro, por defecto *.seam.
  3. max-request: número máximo de peticiones que puede ejecutar la aplicación simultáneamente. El valor por defecto es de 0 peticiones. El valor mínimo aceptado es de 0 peticiones, que significa infinitas peticiones.
  4. wait-timeout: intervalo de tiempo durante el que la petición estará pausada. El valor por defecto es de 1000 milisegundos. El valor mínimo aceptado es de 500 milisegundos.
  5. retries: número de reintentos de reanudación para una petición pausada.

Para poder controlar el mensaje que se quiere mostrar, cuando se descarta una petición y se lanza la excepción org.umu.atica.seam.web.exceptions.TooManyRequestException en FundeWeb 1.2.x y es.um.atica.seam.web.exceptions.TooManyRequestException para FundeWeb 2.0.x, tenemos que realizar los siguientes cambios:

1. Añadir al fichero messages_es.properties el siguiente mensaje:

Para FundeWeb 1.2.x: org.umu.atica.seam.web.TooManyRequestException=Demasiadas solicitudes para ser servidas por la aplicación
Para FundeWeb 2.0.x: es.um.atica.seam.web.TooManyRequestException=Demasiadas solicitudes para ser servidas por la aplicación

2. Añadir al fichero messages_en.properties el siguiente mensaje:

Para FundeWeb 1.2.x: org.umu.atica.seam.web.TooManyRequestException=Too many requests to be dispatched by the application
Para FundeWeb 2.0.x: es.um.atica.seam.web.TooManyRequestException=Too many requests to be dispatched by the application

Modificar el fichero pages.xml añadiendo la siguiente captura de excepción. Ejemplo para FundWeb 2.0.x:

    <!-- Ejemplo para Fundeweb 2.0.x -->
    <exception class="es.um.atica.seam.web.exceptions.TooManyRequestException">
        <redirect view-id="/error.xhtml">
            <message severity="error">#{messages['es.um.atica.seam.web.TooManyRequestException']}</message>
        </redirect>
    </exception>

JUAN MIGUEL BERNAL GONZALEZ 2015/09/03 10:46