En informática, cliente-servidor es un modelo de arquitectura de software que consta de dos partes, sistemas cliente y sistemas servidor, ambos comunicados a través de una red informática o en el mismo ordenador. Una aplicación cliente-servidor es un sistema distribuido compuesto por software cliente y servidor. La aplicación cliente-servidor proporciona una mejor manera de compartir la carga de trabajo. El proceso cliente siempre inicia una conexión con el servidor, mientras que el proceso servidor siempre espera las peticiones de cualquier cliente.
Cuando el proceso cliente y el proceso servidor se ejecutan en el mismo ordenador, se denomina configuración de asiento único. En esta configuración ambos componentes comparten recursos físicos (CPU, memoria, disco) y la comunicación suele realizarse mediante llamadas locales o sockets que no atraviesan la red.
Cómo funciona el modelo cliente‑servidor
La relación cliente-servidor describe la relación entre el cliente y cómo realiza una solicitud de servicio al servidor, y cómo el servidor puede aceptar estas solicitudes, procesarlas y devolver la información solicitada al cliente. La interacción entre el cliente y el servidor suele describirse mediante diagramas de secuencia. Los diagramas de secuencia están estandarizados en el Lenguaje Unificado de Modelado.
- El cliente inicia la comunicación enviando una petición (por ejemplo, una solicitud HTTP, una consulta SQL o una solicitud de autenticación).
- El servidor recibe la petición, la procesa (puede consultar una base de datos, ejecutar lógica de negocio o acceder a recursos), y prepara una respuesta.
- El servidor envía la respuesta al cliente; el cliente la recibe y la presenta al usuario o la procesa adicionalmente.
La comunicación se realiza típicamente sobre protocolos de red (por ejemplo, TCP/IP) y puertos específicos. En aplicaciones web modernas se usan protocolos y estilos de comunicación como HTTP/HTTPS y APIs REST o SOAP.
Tipos y capas de la arquitectura
El tipo básico de arquitectura de software cliente-servidor emplea sólo dos tipos de hosts: clientes y servidores. Este tipo de arquitectura se denomina a veces de dos niveles. La arquitectura de dos niveles significa que el cliente actúa como un nivel y el proceso del servidor actúa como el otro nivel.
Además de la arquitectura de dos niveles existen arquitecturas de tres niveles (o multicapa):
- Presentación (cliente): interfaz de usuario o cliente web.
- Lógica de negocio (servidor de aplicaciones / middleware): procesa reglas e interacciones.
- Persistencia (servidor de datos / base de datos): almacena y recupera información.
Las arquitecturas multicapa facilitan el mantenimiento, la reutilización y la escalabilidad al separar responsabilidades.
Cliente‑servidor vs peer‑to‑peer
Otro tipo de arquitectura de software relacionada se conoce como peer-to-peer, porque cada instancia de host o aplicación puede actuar simultáneamente como cliente y servidor (a diferencia de los servidores centralizados del modelo cliente-servidor) y porque cada uno tiene responsabilidades y estatus equivalentes. Las arquitecturas peer-to-peer se suelen abreviar con el acrónimo P2P.
Mientras que en el modelo cliente-servidor hay una clara distinción de roles y, a menudo, servidores centralizados que gestionan recursos, en P2P cada nodo comparte recursos y puede comunicarse directamente con otros nodos sin necesidad de un servidor central.
Ejemplos prácticos
La arquitectura de software cliente-servidor se ha convertido en uno de los modelos básicos de la informática en red. Muchos tipos de aplicaciones se han escrito utilizando el modelo cliente-servidor. Las funciones estándar de la red, como el intercambio de correo electrónico, el acceso a la web y el acceso a las bases de datos, se basan en el modelo cliente-servidor. Por ejemplo, un navegador web es un programa cliente en el ordenador del usuario que puede acceder a la información en cualquier servidor web del mundo.
Otros ejemplos comunes:
- Correo electrónico: clientes (Outlook, Thunderbird) y servidores SMTP/IMAP/POP3.
- Servicios web y APIs REST: aplicaciones móviles o navegadores como clientes y servidores que exponen endpoints.
- Bases de datos: aplicaciones cliente que envían consultas SQL a un servidor de base de datos.
- Servicios de archivos y almacenamiento: clientes FTP/SMB y servidores que almacenan y protegen archivos.
- DNS: resolutores (clientes) consultan servidores de nombres para resolver dominios.
Ventajas y desventajas
- Ventajas:
- Centralización de recursos y control (seguridad, backups, políticas).
- Mantenimiento y actualización simplificados en el servidor.
- Escalabilidad mediante balanceo de carga y servidores adicionales.
- Reutilización de servicios por múltiples clientes heterogéneos.
- Desventajas:
- Punto único de fallo si no se implementa redundancia.
- Cuellos de botella en el servidor si no hay escalado adecuado.
- Latencia adicional si clientes y servidores están geográficamente distantes.
- Mayor complejidad en la gestión de sesiones y estado en entornos distribuidos.
Escalabilidad, rendimiento y seguridad
Para mejorar rendimiento y escalabilidad se usan técnicas como:
- Balanceo de carga: repartir peticiones entre varios servidores.
- Caché (cliente, proxy o servidor) para reducir acceso a datos frecuentes.
- Separación de servicios en microservicios o capas independientes.
- Replicación de bases de datos y particionado (sharding).
En cuanto a seguridad, el modelo cliente‑servidor exige medidas como:
- Autenticación y autorización sólidas.
- Comunicación cifrada (por ejemplo, HTTPS/TLS).
- Firewalls, control de acceso por puertos y monitoreo de intrusiones.
- Protección contra ataques comunes (inyección SQL, XSS, DDoS).
Buenas prácticas
- Diseñar servidores sin estado (stateless) cuando sea posible para facilitar el escalado horizontal.
- Documentar APIs y emplear estándares (REST, OpenAPI, GraphQL cuando proceda).
- Implementar mecanismos de tolerancia a fallos (réplicas, conmutación por error y retries).
- Monitorizar métricas de rendimiento y latencia para detectar cuellos de botella.
Resumen
Tanto las arquitecturas cliente-servidor como las P2P son muy utilizadas hoy en día. El modelo cliente‑servidor sigue siendo la base de muchas aplicaciones de red por su claridad en la separación de responsabilidades, facilidad de gestión centralizada y adaptabilidad mediante técnicas de escalado y seguridad. Comprender sus componentes, variaciones y buenas prácticas es esencial para diseñar sistemas distribuidos robustos y eficientes.


