====== 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: - **//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//. - **//DuplicateRequestControlFilter//**: Controla el que no haya peticiones duplicadas en cierto intervalo de tiempo, descartando la petición duplicada. - **//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 __ (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: ... Las propiedades importantes son las siguientes: - **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. - **//url-pattern//**: peticiones sobre las que actúa el filtro, por defecto //*.seam//. - **//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. - **//wait-timeout//**: intervalo de tiempo durante el que la petición estará pausada. El valor por defecto y mínimo es de 250 milisegundos. - **//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 __ (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: ... Las propiedades importantes son las siguientes: * **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. * **//url-pattern//**: peticiones sobre las que actúa el filtro, por defecto //*.seam//. * **//time-interval//**: intervalo de tiempo en el que una petición se puede considerar duplicada. El valor por defecto es de 1000 milisegundos. El valor mínimo aceptado es de 100 milisegundos. ===== 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 __ (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: ... Las propiedades importantes son las siguientes: - **//disabled//**: indica si el filtro esta desactivado (con valor //true//) o activado (con valor //false//). Por defecto el filtro esta desactivado. - **//url-pattern//**: peticiones sobre las que actúa el filtro, por defecto //*.seam//. - **//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. - **//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. - **//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: #{messages['es.um.atica.seam.web.TooManyRequestException']} ---- --- //[[juanmiguelbg@um.es|JUAN MIGUEL BERNAL GONZALEZ]] 2015/09/03 10:46//