1.1. Arquitectura cliente/servidor
La arquitectura cliente/servidor persigue el objetivo de procesar la información de un modo distribuido. De esta forma, los usuarios finales pueden estar dispersos en un área geográfica más o menos extensa (un edificio, una localidad, un país, …) y acceder a un conjunto común de recursos compartidos.
Además, el acceso debe ser transparente (el cliente puede desconocer la ubicación física del recurso que pretende utilizar) y, preferiblemente, multiplataforma, es decir, independiente del sistema operativo, del software de aplicación e incluso del hardware.
En definitiva, cuando hablamos de la implantación de una arquitectura cliente/servidor, nos referimos a un sistema de información distribuido.
Además de la transparencia y la independencia del hardware y del software, una implantación cliente/servidor debe tener las siguientes características:
Las características de una implantación cliente/servidor deben ser:
Transparencia.
Independencia.
Protocolos asimétricos.
Recursos compartidos.
Servicio.
Encapsulamiento.
Integridad.
Acoplamiento débil.
Escalabilidad.
- Debe utilizar protocolos asimétricos, donde el servidor se limita a escuchar, en espera de que un cliente inicie una solicitud.
- El servidor ofrecerá recursos, tanto lógicos como físicos a una cantidad variable y diversa de clientes (por ejemplo, espacio de almacenamiento, bases de datos, impresoras, etc.)
- El servidor ofrecerá también una serie de servicios, que serán usados por los clientes. Estos servicios estarán encapsulados, para ocultar a los clientes los detalles de su implementación (por ejemplo, aceptar el requerimiento de un cliente sobre una base de datos o formatear los datos obtenidos antes de transmitirlos al cliente).
- Se facilitará la integridad y el mantenimiento tanto de los datos como de los programas debido a que se encuentran centralizados en el servidor o servidores.
- Los sistemas estarán débilmente acoplados, ya que interactúan mediante el envío de mensajes.
- Se facilitará la escalabilidad, de manera que sea fácil añadir nuevos clientes a la infraestructura (escalabilidad horizontal) o aumentar la potencia del servidor o servidores, aumentando su número o su capacidad de cálculo (escalabilidad vertical)
Elementos de la arquitectura cliente/servidor.
De lo dicho hasta ahora, podemos deducir que los principales elementos que conforman la arquitectura cliente/servidor son los siguientes:
El servidor
Cuando hablamos de una forma genérica, si mencionamos a un servidor, nos referimos a un ordenador, normalmente con prestaciones elevadas, que ejecuta servicios para atender las demandas de diferentes clientes.
Sin embargo, bajo el punto de vista de la arquitectura cliente/servidor, un servidor es un proceso que ofrece el recurso (o recursos) que administra a los clientes que lo solicitan (consultar la definición de cliente más abajo).
En ocasiones, los servicios también reciben el nombre de demonios (daemons en inglés).
Se trata de una terminología que proviene del mundo Unix/Linux.
Es muy frecuente que, para referirse a un proceso servidor, se utilice el término back-end.
Según el tipo de servidor implantado, tendremos un tipo de arquitectura cliente/servidor diferente.
Por último, mencionar que en algunas ocasiones, un servidor puede actuar, a su vez, como cliente de otro servidor.
El cliente
Igual que antes, al hablar de forma genérica sobre un cliente, nos referimos a un ordenador, normalmente con prestaciones ajustadas, que requiere los servicios de un equipo servidor.
Sin embargo, bajo el punto de vista de la arquitectura cliente/servidor, un cliente es un proceso que solicita los servicios de otro, normalmente a petición de un usuario.
En entornos cliente/servidor, suele utilizarse el término front-end para referirse a un proceso cliente.
Los mensajes quedan almacenados, permitiendo que el emisor o el receptor estén inactivos por un tiempo. Así, las comunicaciones pueden ser persistentes y asíncronas.
Este mecanismo se denomina Message-Oriented Middleware (MOM)
Normalmente, un proceso cliente se encarga de interactuar con el usuario, por lo que estará construido con alguna herramienta que permita implementar interfaces gráficas (GUI). Además, se encargará de formular las solicitudes al servidor y recibir su respuesta, por lo que deberá encargarse de una parte de la lógica de la aplicación y de realizar algunas validaciones de forma local.
El Middleware
Es la parte del software del sistema que se encarga del transporte de los mensajes entre el cliente y el servidor, por lo que se ejecuta en ambos lados de la estructura.
El middleware permite independizar a los clientes y a los servidores, sobre todo, gracias a los sistemas abiertos, que eliminan la necesidad de supeditarse a tecnologías propietarias.
Por lo tanto, el middleware facilita el desarrollo de aplicaciones, porque resuelve la parte del transporte de mensajes y facilita la interconexión de sistemas heterogéneos sin utilizar tecnologías propietarias.
Además, ofrece más control sobre el negocio, debido a que permite obtener información desde diferentes orígenes (uniendo tecnologías y arquitecturas distintas) y ofrecerla de manera conjunta.
Podemos estructurar el middleware en tres niveles:
- El protocolo de transporte, que será común para otras aplicaciones del sistema.
- El sistema operativo de red
- El protocolo del servicio, que será específico del tipo de sistema cliente/servidor que estemos considerando.
El funcionamiento básico
Aunque es probable que a estas alturas ya te hagas una idea sobre el funcionamiento general del modelo cliente/servidor, vamos a concretarlo a continuación:
- Lo primero que debe ocurrir es que se inicie el servidor. Esto ocurrirá durante el arranque del sistema operativo o con la intervención posterior del administrador del sistema. Cuando termine de iniciarse, esperará de forma pasiva las solicitudes de los clientes.
- En algún momento, uno de los clientes conectados al sistema realizará una solicitud al servidor.
- El servidor recibe la solicitud del cliente, realiza cualquier verificación necesaria y, si todo es correcto, la procesa.
- Cuando el servidor disponga del resultado solicitado, lo envía al cliente.
- Finalmente, el cliente recibe el resultado que solicitó. A continuación realiza las comprobaciones oportunas (si son necesarias) y, si era ese el objetivo final, se lo muestra al usuario.
Si descomponemos este modo de funcionamiento en elementos estructurales, será más fácil comprender los conceptos implicados. De esta forma, podemos obtener una definición de la arquitectura por niveles, estructurada como sigue:
- Un nivel de presentación, que aglutina los elementos relativos al cliente.
- Un nivel de aplicación, compuesto por elementos relacionados con el servidor.
- Un nivel de comunicación, que está formado por los elementos que hacen posible la comunicación entre el cliente y el servidor.
- Un nivel de base de datos, formado por los elementos relacionados con el acceso a los datos.