Arquitectura Cliente Servidor - bleums/Redes-Comunicaciones GitHub Wiki
ARQUITECTURA CLIENTE/SERVIDOR
Cliente/Servidor es una arquitectura. Cliente/Servidor divide el procesamiento entre:
- Un cliente, generalmente con GUI.
- Un servidor, con la base de datos o aplicaciones.
- El canal de comunicación.
Proceso Cliente
Actúa como front-end, solicitando desde el usuario, algún servicio al servidor. Sus responsabilidades son:
- Manejo de la GUI
- Validación de datos
- Despacho de solicitudes a los servidores
- Interfaz entre el usuario y la aplicación
- Manejo de recursos locales en la estación de usuario
Proceso Servidor
Solo se ejecuta como respuesta a una solicitud de un cliente. Actúa como proceso back-end, sin necesidad de una GUI. Sus responsabilidades son:
- Recepción de solicitudes
- Ejecución de solicitudes
- Despacho de solicitudes
- Manejo de la lógica del negocio común
- Back-end para tareas que resultan comunes para aplicaciones similares
Algunos tipos de sistemas Cliente/Servidor son:
- Servidores de impresión
- Servidores de archivo, los usuarios comparten disco duro
- Servidores de Bases de Datos
- Servidores de groupware
- Servidores web
Tipos de arquitecturas Cliente/Servidor
Arquitectura de dos niveles
Existe comunicación directa entre el cliente y el servidor.
Una aplicación contiene 3 componentes básicos:
- Presentación
- Procesamiento
- Datos Estos componentes suelen dividirse en dos entidades software o niveles: Código Cliente de la Aplicación y Servidor de Bases de Datos.
Arquitectura en tres niveles
La comunicación ocurre entre: Cliente, Agente y Servidor. Se divide en tres capas:
- Presentación
- Funcionalidad
- Lógica de Datos
Las funciones del Agente son:
- Actúa como Monitor de Transacciones limitando el número de solicitudes a un servidor.
- Traslada solicitudes a los servidores
- Recolecta resultados
- Retorna la respuesta al cliente
Ventajas del Agente:
- El cliente no requiere entender el "idioma" del servidor.
- Los cambios en la estructura del back-end de datos no afectan la presentación de los clientes. Desventajas del Agente:
- Es necesario realizar administrador sobre el tráfico de red, balanceo de carga del servidor y tolerancia a fallas.
Arquitectura de N-Niveles
La comunicación ocurre entre diferentes usuarios y servidores dispersos geográficamente. Aunque el usuario solo se comunica con un servidor.
Ventajas y desventajas de Cliente/Servidor
Ventajas
- Sistema abierto
- Heterogeneidad
- Interoperabilidad
- Escalabilidad
- Adaptabilidad
Desventajas
- Puede no ser la solución correcta para todo tipo de aplicaciones.
- Costos inesperados.
Mecanismos involucrados en la interacción Cliente/Servidor
- Debe conocerse la dirección del Cliente y del Servidor.
- Se debe poder identificar al equipo receptor a través de uno de los dos procesos.
- Definir nivel de confianza para la comunicación.
- Si se va a utilizar un protocolo que requiera una comunicación continua y confiable entre emisor y receptor, se debe establecer el canal de comunicaciones que permita el flujo de datos entre ellos.
- Utilización o no de multihilos en la programación del servidor.
Puertos
Un puerto es un número, entre 0 y 65.536, que permite identificar a un proceso en un computador. Existen dos esquemas de asignación de puertos:
- Asignación universal
- Asignación dinámica
Sockets
Un socket es un "control de red". Se asocia con un número de puerto, para que el protocolo de transporte pueda identificar la aplicación a la cual se están enviando los datos. Una aplicación crea un socket al especificar tres elementos:
- La dirección IP del equipo
- El puerto que la aplicación esté utilizando
- El tipo de servicio utilizado por la aplicación. Luego, la aplicación puede utilizar el socket para enviar datos a aplicaciones remotas utilizando un esquema orientado a conexión, para enviar datos de forma confiable.
Normalmente, en aplicaciones cliente/servidor se utilizan sockets a ambos lados de la comunicación.
Aplicaciones Cliente/Servidor con Java
Sockets en Java
Un objeto Socket es la representación Java de una conexión de red TCP. Para cliente se usa un objeto de la clase Socket, y para servidor se usa la clase ServerSocket.