Arquitectura de Software - Cliente-Servidor

El modelo cliente-servidor es una arquitectura clásica de sistemas distribuidos. Se basa en dividir responsabilidades entre un cliente (que solicita servicios) y un servidor (que responde a esas solicitudes). Este patrón está presente en casi toda la web moderna y en múltiples tipos de aplicaciones.

Historia y evolución

En los 60s y 70s dominaban los mainframes: computadoras centrales con terminales tontas. A medida que surgieron las PC, se hizo viable dividir el procesamiento: los clientes podían interactuar con servidores centralizados. Con la llegada de Internet, este modelo explotó en popularidad y se convirtió en la base de la arquitectura web.

Funcionamiento general

  • El cliente inicia una petición a través de una red.
  • El servidor la recibe, procesa y responde.
  • Todo ocurre bajo protocolos como HTTP, TCP/IP, etc.
Modelo Cliente Servidor

Analogía cotidiana

Imaginá un restaurante. Vos (cliente) pedís un plato. El mozo (servidor) toma la orden, la lleva a cocina, y luego vuelve con el plato. El cliente nunca se mete con cómo se cocina: sólo hace pedidos y recibe respuestas.

Ventajas

  • Fácil de entender e implementar.
  • Permite separar interfaz (cliente) y lógica de negocio (servidor).
  • Permite múltiples clientes para un mismo servidor (escalado horizontal).

Desventajas

  • Alto acoplamiento con el servidor.
  • Punto único de fallo: si el servidor cae, se pierde todo.
  • Problemas de latencia y rendimiento con muchos clientes.

Ejemplo técnico (Node.js)

// Servidor con Express
const express = require('express');
const app = express();

app.get('/api/hora', (req, res) => {
  res.send(new Date().toLocaleTimeString());
});

app.listen(3000, () => console.log('Servidor escuchando en puerto 3000'));
<!-- Cliente (HTML + JS) -->
<button onclick="pedirHora()">¿Qué hora es?</button>
<script>
function pedirHora() {
  fetch('http://localhost:3000/api/hora')
    .then(response => response.text())
    .then(alert);
}
</script>

Conclusión

El modelo cliente-servidor no ha desaparecido: sigue vivo dentro de muchas otras arquitecturas modernas como REST, GraphQL, microservicios, y serverless. Aprender este modelo es esencial para entender cómo fluye la información entre capas de una aplicación, cómo diseñar APIs y cómo construir sistemas robustos.