Tema 1: Introducción a los servidores de aplicaciones
En este tema veremos una pequeña introducción a los servidores
de aplicaciones. Comentaremos los términos más utilizados y los
conceptos que usaremos más adelante.
1.1. Aplicaciones de empresa
El concepto de servidor de aplicaciones está relacionado con el concepto
de sistema distribuido. Un sistema distribuido, en oposición a un sistema
monolítico, permite mejorar tres aspectos fundamentales en una aplicación:
la alta disponibilidad, la escalabilidad y el mantenimiento. En un sistema monolítico
un cambio en las necesidades del sistema (aumento considerable del número
de visitas, aumento del número de aplicaciones, etc.) provoca un colapso
y la adaptación a dicho cambio puede resultar catastrófica. Vamos
a ver estas características con ejemplos.
- La alta disponibilidad hace referencia a que un sistema debe estar
funcionando las 24 horas de día los 365 días al año.
Para poder alcanzar esta característica es necesario el uso de técnicas
de balanceo de carga y de recuperación ante fallos (failover).
- La escalabilidad es la capacidad de hacer crecer un sistema cuando
se incrementa la carga de trabajo (el número de peticiones). Cada máquina
tiene una capacidad finita de recursos y por lo tanto sólo puede servir
un número limitado de peticiones. Si, por ejemplo, tenemos una tienda
que incrementa la demanda de servicio, debemos ser capaces de incorporar nuevas
máquinas para dar servicio.
- El mantenimiento tiene que ver con la versatilidad a la hora de actualizar,
depurar fallos y mantener un sistema. La solución al mantenimiento
es la construcción de la lógica de negocio en unidades reusables
y modulares.
1.2. ¿Qué es un servidor de aplicaciones?
El estándar J2EE permite el desarrollo de aplicaciones de empresa de
una manera sencilla y eficiente. Una aplicación desarrollada con las
tecnologías J2EE permite ser desplegada en cualquier servidor de aplicaciones
o servidor web que cumpla con el estándar. Un servidor de aplicaciones
es una implementación de la especificación J2EE. La arquitectura
J2EE es la siguiente:
Figura 1. Arquitectura J2EE.
Definimos a continuación algunos de los conceptos que aparecen en la
figura 1:
- Cliente web: Es usualmente un navegador e interactúa con el
contenedor web haciendo uso de HTTP. Recibe páginas HTML o XML y puede
ejecutar applets y código JavaScript.
- Aplicación cliente: Son clientes que no se ejecutan dentro
de un navegador y pueden utilizar cualquier tecnología para comunicarse
con el contenedor web o directamente con la base de datos.
- Contenedor web: Es lo que comúnmente denominamos servidor
web. Es la parte visible del servidor de aplicaciones. Utiliza los
protocolos HTTP y SSL (seguro) para comunicarse.
- Servidor de aplicaciones: Proporciona servicios que soportan la ejecución
y disponibilidad de las aplicaciones desplegadas. Es el corazón de
un gran sistema distribuido.
Frente a la tradicional estructura en dos capas de un servidor web (ver Figura
2) un servidor de aplicaciones proporciona una estructura en tres capas que
permite estructurar nuestro sistema de forma más eficiente. Un concepto
que debe quedar claro desde el principio es que no todas las aplicaciones de
empresa necesitan un servidor de aplicaciones para funcionar. Una pequeña
aplicación que acceda a una base de datos no muy compleja y que no sea
distribuida probablemente no necesitará un servidor de aplicaciones,
tan solo con un servidor web (usando servlets y jsp) sea suficiente.
Figura 2. Arquitectura en dos capas frente a tres capas utilizando el servidor de aplicaciones.
Como hemos comentado, un servidor de aplicaciones es una implementación
de la especificación J2EE. Existen diversas implementaciones, cada una
con sus propias características que la pueden hacer más atractiva
en el desarrollo de un determinado sistema. Algunas de las implementaciones
más utilizadas son las siguientes:
- BEA WebLogic
- IBM WebSphere
- Sun-Netscape IPlanet
- Oracle IAS
- Borland AppServer
- HP Bluestone
Los dos primeros son los más utilizados en el mercado. Nosotros vamos
a utilizar el servidor BEA WebLogic. La principal ventaja de WebLogic es que
podemos crear un sistema con varias máquinas con distintos sistemas operativos:
Linux, Unix, Windows NT, etc. El sistema funciona sin importarle en qué
máquina está corriendo el servidor. En la versión 7.1 WebLogic
presenta las siguientes compatibilidades:
Estándar |
Versión |
HTTP |
1.1 |
Arquitectura de conector J2EE |
1.0 |
EJB |
2.0 |
JDBC |
2.0 |
JNDI |
1.2 |
JSP |
1.2 |
JTA |
1.0.1a |
JMS |
1.0.2b |
RMI |
1.0 |
RMI/IIOP |
1.0 |
Servlet |
2.3 |
LDAP |
2 |
SSL |
3 |
X.509 |
3 |
Otros conceptos que aparecerán a lo largo de este módulo:
- Servidor proxy: Centraliza peticiones de los clientes y las reenvía
hacia otras máquinas. Puede servir como nivel de indirección
y seguridad. También puede ser usado para realizar balanceo de carga.
- Cortafuegos (firewall): Proporciona servicios de filtrado,
autorización y autentificación. Puede actuar como proxy y ayuda
a manejar los ataques de los hackers.
- Máquina: Representa una unidad física donde reside
un servidor. Una máquina se define como tipo Unix o no Unix (Windows
NT, etc.).
- Servidor: Un servidor es una instancia de la clase weblogic.Server
ejecutándose dentro de una máquina virtual de Java. Un servidor
está alojado en una máquina, pero una máquina puede contener
varios servidores. Si un servidor no lo declaramos en ninguna máquina
WLS asume que está en una creada por defecto.
- Dominio: Un dominio es una unidad administrativa. Sirve para declarar
varios servidores, aplicaciones, etc. y que todos ellos estén asociados
mediante el nombre del dominio.
- Clustering (asociación): Los clusters
permiten asociar maquinas y servidores para que actúen de forma conjunta
como una única instancia. La creación de un cluster va a permitir
el balanceo de carga y la recuperación frente a fallos.
- Balanceo de carga: Es una técnica utilizada para distribuir
las peticiones entre varios servidores de tal forma que todos los servidores
respondan al mismo número de peticiones.
- Recuperación ante fallos (failover): Permite
evitar la caída de un sistema cuando una máquina deja de funcionar
o funciona incorrectamente.
- Puerto de escucha: Un servidor tiene varios puertos por los que puede
"escuchar" las peticiones. Existen puertos ya asignados a aplicaciones
concretas, como por ejemplo el puerto de http que suele ser el 80. Los puertos
permiten que varias aplicaciones puedan atender distintas peticiones en la
misma máquina. Un puerto en una dirección se especifica de la
siguiente manera: http://localhost:7001/direc . Con :7001 indicamos
el puerto que estamos atacando. Los puertos del 0 al 1023 son reservados
por el sistema. Podemos disponer de los puertos del 1024 al 65536. Hay que
tener en cuenta que dos servicios no pueden estar escuchando en el mismo puerto.
- Modo producción y modo desarrollo. Hablaremos muy a menudo
de modo desarrollo y modo producción. El modo desarrollo es cuando
nos encontramos desarrollando nuestra aplicación y no está disponible
exteriormente. El modo producción es cuando está funcionando
a pleno rendimiento y tenemos clientes que se encuentran utilizándola.
Por defecto, un dominio se arranca en modo desarrollo.