Arquitectura de aplicaciones web

Índice
Introducción
Objetivos
-
Conocer las características de la demanda que tiene que satisfacer un servidor web.
-
Conocer las diversas maneras de organizar una aplicación web y los modelos que existen, según varios criterios.
-
Conocer las características y el funcionamiento de cada modelo.
-
Poder elegir la mejor opción en cada situación y valorar las implicaciones del montaje que hay que hacer.
1.Características de la demanda de páginas web



b. Crecimiento del número de lugares web durante los últimos años en escala logarítmica. Podemos ver la tendencia asintótica.
Hobbes’ Internet Timeline Copyright © 2010 Robert H. Zakon

Hobbes’ Internet Timeline Copyright © 2010 Robert H. Zakon

b. Crecimiento del número de usuarios de la red social Facebook.




-
El tamaño medio de un objeto es de 10-15 kbytes, y la media de 2-4 kbytes. La distribución se decanta claramente hacia objetos pequeños, aunque se encuentra una cantidad nada despreciable de objetos grandes (del orden de Mbytes).
-
La mayoría de los accesos a la web son por objetos gráficos, seguidos de los documentos HTML. El 1-10% son por objetos dinámicos.
-
Una página HTML incluye de media diez imágenes y múltiples enlaces a otras páginas.
-
Un 40% de todos los accesos son para objetos que se considera que no se pueden inspeccionar.
-
La popularidad de objetos web es muy diferente: una pequeña fracción de objetos es la responsable de la mayoría de los accesos, siguiendo la ley de Zipf.
-
El ritmo de acceso para objetos estáticos es muy superior al ritmo de modificación.
-
En una escala de tiempo inferior al minuto el tráfico web es a ráfagas, por lo cual valores medidos con medias durante algunas decenas de segundo son muy poco fiables.
-
Un 5-10% de accesos a la web se cancelan antes de finalizar.
-
Prácticamente todos los servidores utilizan el puerto 80.
-
Microsoft Web Application Stress (WAS) es una herramienta de simulación para Windows diseñada para medir el rendimiento de un sitio web. Tiene en cuenta las páginas generadas dinámicamente (ASP) en un servidor web de Microsoft.
-
Apache JMeter, una aplicación Java para medir el rendimiento de documentos y recursos estáticos y dinámicos (archivos, servlets, scripts Perl, objetos Java, consultas de bases de datos, servidores FTP, etc.), que simula distintos tipos de carga extrema de la Red, del servidor o de un objeto concreto.
-
Surge de la Universidad de Boston: una aplicación Java que genera peticiones web con características estadísticas que simulan con mucha precisión la demanda típica de un servidor web.

-
Máquina: el nombre DNS completo o su dirección IP si el nombre no está disponible.
-
Ident: si está activado, la identidad del cliente tal y como lo indica el protocolo identd. Puede no ser fiable.
-
UsuarioAutorizado: si se pidió un documento protegido por contraseña, corresponde al nombre del usuario utilizado en la petición.
-
Fecha: la fecha y hora de la petición en el formato siguiente:
día = 2*digit
mes = 3*letter
año = 4*digit
hora = 2*digit
minuto = 2*digit
segundo = 2*digit
zona = ('+' | '-') 4*digit -
Petición: el URL solicitado por el cliente, delimitado por comillas (").
-
Estado: el código de resultado de tres dígitos devuelto al cliente.
-
Bytes: el número de bytes del objeto servido, sin incluir cabeceras.
Nombre |
Descripción de la variable |
---|---|
%a |
Dirección IP remota. |
%A |
Dirección IP local. |
%B |
Bytes enviados, excluyendo las cabeceras HTTP. |
%b |
Bytes enviados, excluyendo las cabeceras HTTP. En formato CLF: un '-' en lugar de un 0 cuando no se ha enviado ningún byte. |
%c |
Estado de la conexión cuando la respuesta se acaba: 'X' = conexión abortada antes de acabar la respuesta. '+' = conexión que puede quedar activa después de haber enviado la respuesta. '-' = conexión que se cerrará después de haber enviado la respuesta. |
%{NOMBRE}e |
El contenido de la variable de entorno NOMBRE. |
%f |
Nombre del fichero. |
%h |
Nombre de la máquina remota. |
%H |
El protocolo de la petición. |
%{Nombre}i |
El contenido del encabezado o encabezados “Nombre:” de la petición enviada al servidor. |
%l |
Usuario remoto (de identd, si lo proporciona). |
%m |
El método de la petición. |
%{Nombre}n |
El contenido de la “nota” “Nombre” desde otro módulo. |
%{Nombre}o |
El contenido de la cabecera o cabeceras “Nombre:” de la respuesta. |
%p |
El puerto del servidor sirviendo la petición. |
%P |
El identificador del proceso hijo que sirvió la petición. |
%q |
El texto de una consulta o query string (precedido de ? si la consulta existe, si no, un texto vacío). |
%r |
Primera línea de la petición. |
%s |
Estado de peticiones que fueron redireccionadas internamente, el estado de la petición original - %>s para el de la última. |
%t |
Tiempo (fecha) en formato de LOG (formato estándar inglés). |
%{formato}t |
El tiempo (hora), en el formato especificado, que debe expresarse en formato strftime (posiblemente localizado). |
%T |
El tiempo de servicio de la petición, en segundos. |
%u |
Usuario remoto (de autentificación; puede ser incorrecto si el estado de la respuesta %s es 401). |
%U |
La parte de camino (path) del URL, sin incluir el texto de la consulta (query string). |
%v |
El nombre original o canónico del servidor dependiente de la petición. |
%V |
El nombre del servidor según el valor del orden UseCanonicalName. |
-
El formato NCSA extendido/combinado sería:
2.Organización de las aplicaciones en servidores web
2.1.El servidor web
2.2.Organización del servidor web
-
Proceso: la unidad más “pesada” de la planificación de tareas que ofrece el sistema operativo. No comparte espacios de direcciones ni recursos relacionados con ficheros, excepto de manera explícita (heredando referencias a ficheros o segmentos de memoria compartida), y el cambio de tarea lo fuerza el núcleo del sistema operativo (preemptivo).
-
Flujo o thread: la unidad más “ligera” de planificación de tareas que ofrece el sistema operativo. Como mínimo, hay un flujo por proceso. Si distintos flujos coexisten en un proceso, todos comparten la misma memoria y recursos de archivos. El cambio de tarea en los flujos lo fuerza el núcleo del sistema operativo (preemptivo).
-
Fibra: flujos gestionados por el usuario de manera cooperativa (no preemptivo), con cambios de contexto en operaciones de entrada/salida u otros puntos explícitos: al llamar a ciertas funciones. La acostumbran a implementar librerías fuera del núcleo, y la ofrecen distintos sistemas operativos. Para ver qué modelos de proceso interesan en cada situación, hay que considerar las combinaciones del número de procesos, flujo por proceso y fibras por flujo. En todo caso, cada petición la sirve un flujo que resulta la unidad de ejecución en el servidor.
Proceso |
Flujo |
Fibra |
Descripción |
---|---|---|---|
U |
U |
U |
Es el caso de los procesos gestionados por inetd. Cada petición genera un proceso hijo que sirve la petición. |
M |
U |
U |
El modelo del servidor Apache 1.3 para Unix: distintos procesos preparados que se van encargando de las peticiones que llegan. Lo implementa el módulo Apache: mpm_prefork. |
M |
U |
M |
En cada proceso, una librería de fibras cambia de contexto teniendo en cuenta la finalización de operaciones de entrada/salida. En Unix se denomina select-event threading y lo usan los servidores Zeus y Squid. Ofrece un rendimiento mejor en Unix que en MUU. Lo implementa el módulo Apache state-threaded multi processing. |
M |
M |
U |
El modelo MMU cambia fibras por flujos. Lo implementan los módulos Apache: perchild y mpm_worker_module. El número de peticiones simultáneas que puede atender es ThreadsPerChild x MaxClients. |
U |
M |
U |
El modelo más sencillo con diferentes flujos. Se puede montar en Win32, OS2, y con flujos POSIX. Lo implementa el módulo Apache: mpm_netware. |
U |
M |
M |
Probablemente el que proporciona un rendimiento más alto. En Win32 se puede conseguir con los denominados completion ports. Se usan los flujos necesarios para aprovechar el paralelismo del hardware (número de procesadores, tarjetas de red), y cada flujo ejecuta las fibras que han completado su operación de entrada/salida. Es el modelo con un rendimiento más alto en Windows NT. Lo implementa el módulo Apache: mpm_winnt_module. Muchos servidores como Internet Information Server o IIS 5.0 utilizan este modelo con Windows NT. El servidor web interno al núcleo de Linux Tux también utiliza este modelo. |
M |
M |
M |
Puede ser una generalización de UMM o MUM, y en general la presencia de distintos procesos hace que el servidor se pueda proteger de fallos como consecuencia de que un proceso tenga que morir por fallos internos, como por ejemplo el acceso a memoria fuera del espacio del proceso. |
2.3.Organización de las aplicaciones web
-
CGI: es el modelo más antiguo y simple. Para cada petición HTTP se invoca un programa que recibe datos por las variables del entorno y/o de entrada estándar, y devuelve un resultado por la salida estándar. Consumir un proceso por cada petición genera problemas importantes de rendimiento, que el modelo FastCGI intenta mejorar.
-
Servlets: es un modelo diseñado para Java, más eficiente y estructurado, que permite elegir distintos modelos de gestión de flujos o threads, duración de procesos del servidor, etc. Partiendo de este modelo, se han construido servidores de aplicaciones con múltiples funciones adicionales que facilitan el desarrollo de aplicaciones web complejas.
-
Lenguajes de script: existen también lenguajes, como por ejemplo PHP, que permiten incluir trozos de código (scripts) en el código HTML y que al llegar al servidor son ejecutados como si fueran un CGI, devolviendo así la respuesta al cliente. Las Java Server Pages (JSP) son scripts en código Java que al llegar al servidor son ejecutadas como si fueran servlets.
3.Servidores proxy-cache web


User-agent: Mozilla/4.0
Accept: text/html, image/jpeg
User-agent: Mozilla/4.0
Accept: text/html, image/gif, image/jpeg
Forwarded: by http://proxy.ac.upc.es:8080
Cache-control (petición) |
|
---|---|
No-cache |
Cliente ↔ origen (las memorias caché se inhiben). |
No-store |
El proxy no debe almacenar permanentemente petición/respuesta. |
Max-age = sgs |
La máxima "edad" aceptable de los objetos en la caché. |
Max-stale |
Se aceptan objetos viejos. |
Max-stale = sgs |
Se aceptan objetos sgs segundos viejos. |
Min-fresh = sgs |
Al objeto deben quedarle sgs de vida. |
Only-If-Cached |
Petición si sólo está en el servidor proxy-cache. |
Cache-control (respuesta) |
|
---|---|
Public |
Se puede cachear por proxies y cliente. |
Private |
Sólo se puede guardar en la memoria caché del cliente. |
Private="cabc" |
Todos pueden mediar el objeto, excepto la cabecera cabc: sólo en la memoria caché del cliente. |
No-cache |
No se puede mediar ni en servidores intermediarios ni en el cliente. |
No-cache="cabc" |
Combinación de los dos anteriores. |
No-store |
Nadie puede almacenar permanentemente (sólo en la memoria del navegador). |
No-transform |
Los servidores intermediarios no pueden transformar el contenido. |
Must-revalidate |
Revalidar (con origen) si es necesario. |
Max-age |
Margen de edad en segundos. |
Host: www.servidor.edu
If-modified-since: Wed, 18 Feb 2009 21:11:55 GMT
Date: Tue, 24 Mar 2009 18:23:40 GMT
(sense cos)
4.Contenidos distribuidos

-
Mirrors con un programa que redirige la petición HTTP a la mejor réplica (podéis ver el ejemplo siguiente de Apache).
-
Hacer que el servicio de nombres DNS devuelva diferentes direcciones IP (el método round robin). De esta manera, los clientes pueden hacer peticiones HTTP cada vez a una dirección IP distinta.
-
Redirección en el nivel de transporte (conmutador de nivel 4, L4 switch): un encaminador mira los paquetes IP de conexiones TCP hacia un servidor web (puerto80) y las redirige a la máquina interna menos cargada.
-
Redirección en el nivel de aplicación (conmutador de nivel 7, L7 switch): un encaminador que mira las conexiones HTTP y puede decidir a qué réplica contactar en función del URL solicitado. Muy complejo.
-
Mandar todas las peticiones a un proxy inverso que responda o con contenido guardado en la memoria o que pase la petición a uno o varios servidores internos.
4.1.Redes de distribución de contenidos


-
El DNS: cuando se resuelve un nombre, el servidor DNS responde según la ubicación de la dirección IP del cliente.
-
El servidor web: cuando se pide una página web, se reescriben los URL internos según la ubicación de la dirección IP del cliente.
-
Cuando se pide un objeto a la dirección IP de un servidor de la CDN, el conmutador (2) de acceso a un conjunto de distintos servidores proxycache, o réplicas, puede redirigir la conexión al servidor menos cargado del grupo (todo el conjunto responde bajo una misma dirección IP).

5.Computación orientada a servicios
5.1.SOA en detalle
-
Distribución. Las funcionalidades de la arquitectura se ofrecen como servicios que pueden estar ubicados en diferentes lugares, incluso un mismo servicio puede ser ofrecido de forma distribuida.
-
Heterogeneidad. Los servicios son independientes de la tecnología subyacente; por lo tanto, esta tecnología se puede ejecutar en máquinas diferentes, sobre sistemas operativos diferentes y puede estar implementada con lenguajes diferentes. A la vez, los servicios también pueden ser heterogéneos, se pueden ofrecer diferentes servicios o un mismo servicio implementado de diferentes maneras.
-
Interoperabilidad. La especificación de los servicios sigue estándares como los de OASIS o los contratos definidos con WSDL. Esto hace que servicios implementados con tecnologías diferentes puedan interoperar porque la interfaz es común.
-
Desacoplamiento. Los servicios exponen funcionalidades que se pueden ofrecer de forma remota y distribuida. Esto permite desacoplar el servicio de la máquina en cuanto que un servicio puede estar replicado o distribuido, o puede migrar a otras máquinas.
-
Flexibilidad. Un servicio puede apoyar o ser usado por diferentes aplicaciones para permitir un aprovechamiento de funcionalidades y más flexibilidad en el desarrollo de nuevas aplicaciones. El hecho de que los servicios se expongan con interfaces estándar permite un desarrollo más heterogéneo de las aplicaciones y una elección más adecuada de las tecnologías según cada situación.
-
Escalabilidad. Los servicios se pueden replicar y distribuir de forma transparente al usuario, que los ve como una única fachada. Esta característica de las arquitecturas orientadas a servicios favorece la implementación de aplicaciones que pueden soportar grandes cantidades de usuarios.
-
Tolerante a fallos. Gracias al desacoplamiento de la especificación del servicio y de la máquina que lo ejecuta, se pueden desarrollar técnicas para que un fallo de un servicio pueda ser atendido por una réplica de forma transparente al usuario.

5.2.Grid computing
Definiciones[Sobre la tecnologia grid] “la tecnología que posibilita la virtualización de recursos, el aprovisionamiento bajo demanda y la compartición de servicios (recursos) entre organizaciones.”
Plaszczak/Wellner
[Sobre el grid computing] “la posiblidad, usando un conjunto de protocolos y estándares abiertos, de ganar acceso a aplicaciones y datos, potencia de procesado, capacidad de almacenamiento y un amplio abanico de otros recursos de computación por Internet. Una parrilla es un tipo de sistema paralelo y distribuido que permite la compartición, la selección y la agregación de recursos distribuidos a través de dominios administrativos «múltiples», basados en su disponibilidad (de recursos), capacidad, potencia de ejecución, coste y requisitos de calidad de servicio de los usuarios.”
IBM, “IBM Solutions Grid for Business Partners: Helping IBM Business Partners to Grid-enable applications for the next phase of e-business on demand”
[Sobre el grid] “un tipo de sistema paralelo y distribuido que permite la compartición, la selección y la agregación de recursos autónomos geográficamente dispersos de manera dinámica y en tiempo de ejecución según su disponibilidad, capacidad, potencia de ejecución, coste y requisitos de calidad de servicio de los usuarios.”
Rajkumar Buyya, Srikumar Venugopal, “A Gentle Introduction to Grid Computing and Technologies” (2005)
5.3.Cloud computing
-
SaaS (7) . Se ofrece el software como servicio, es decir, el proveedor de computación en nube ofrece como un servicio software alojado en sus máquinas a otros que obtienen el acceso a aquel software. Los clientes no se tienen que preocupar del mantenimiento, las actualizaciones ni las licencias del software, y además, pueden acceder a él desde donde quieran.
-
PaaS (8) . Los proveedores de computación en nube ofrecen servicios de acceso y uso de plataformas de software específicas, como servidores de aplicaciones, sistemas operativos, entornos de trabajo específicos y todo en forma de servicio sin que el cliente se tenga que preocupar de la infraestructura necesaria para mantener las plataformas.
-
IaaS (9) . Este nivel de computación en nube es lo más parecido al sistema de parrilla de cálculo. La infraestructura como servicio es el ofrecimiento de hardware, la capacidad de comunicación, etc., no limitado y ampliable transparentemente, que evita la complejidad de mantenimiento y agregación de hardware a los clientes.
