Cuando empecé a desarrollar, me daba igual la arquitectura: abría un editor, escribía código y lo subía al servidor. Pero cuando el proyecto crece — cuando tienes múltiples usuarios, cuando necesitas desplegar sin parar la app, cuando un error en una función tumba toda la web — te das cuenta de que cómo organizas tu código importa tanto como el código en sí. Elegir mal la arquitectura te condena a reescribir todo desde cero en seis meses.
Este post no es un tutorial de una tecnología concreta. Es un mapa del territorio: las principales arquitecturas web, cuándo usar cada una, qué tecnologías las acompañan, y qué patrones de diseño te ayudarán a tomar mejores decisiones. Lo escribí originalmente en 2017 cuando estaba aprendiendo estas cosas, y lo he ido actualizando con la perspectiva que me ha dado el tiempo y la experiencia. Si estás empezando o quieres afianzar conceptos, esto te dará la base para entender por qué los proyectos se estructuran como se estructuran.
Modelos de arquitectura
Monolítica
La arquitectura monolítica concentra toda la aplicación — frontend, backend y base de datos — en un único despliegue. Es el modelo más tradicional y aún muy utilizado.
| Aspecto | Detalle |
|---|---|
| Estructura | Todo en un solo proyecto (controladores, modelos, vistas, lógica de negocio) |
| Despliegue | Un único paquete (WAR, JAR, carpeta PHP, etc.) |
| Ventajas | Desarrollo rápido, depuración sencilla, bajo coste inicial |
| Desventajas | Difícil de escalar por partes, un bug puede tumbar toda la aplicación, despliegues pesados |
Tecnologías típicas en 2017: Laravel (PHP), Django (Python), Ruby on Rails, Spring MVC (Java), ASP.NET MVC.
El monolito funciona bien hasta que no funciona. Cuando tu equipo crece, cuando necesitas desplegar solo un cambio pequeño sin arriesgarte a romper todo, cuando quieres que un servicio caído no tumbe la web entera… ahí es donde necesitas otra cosa. La siguiente evolución natural es separar la aplicación en servicios independientes.
Microservicios
La arquitectura de microservicios divide la aplicación en servicios pequeños e independientes, cada uno con su propia base de datos y lógica de negocio. Se comunican entre sí mediante APIs REST o mensajería asíncrona.
| Aspecto | Detalle |
|---|---|
| Estructura | Múltiples servicios independientes, cada unoresponsable de una función |
| Comunicación | APIs REST, HTTP, message queues (RabbitMQ, Kafka) |
| Ventajas | Escalado independiente por servicio, despliegues parciales, fallos aislados |
| Desventajas | Complejidad operativa, latencia en comunicaciones entre servicios, debugging distribuido |
Tecnologías clave: Docker (contenedores), Kubernetes (orquestación), Docker Compose, Netflix OSS (Eureka, Zuul).
Pero los microservicios resuelven el backend. ¿Y el frontend? Si tu usuario tiene que esperar a que el servidor genere el HTML completo en cada clic, la experiencia se siente lenta comparada con lo que están acostumbrados en apps nativas. Aquí es donde entran las SPA.
SPA (Single Page Application)
El frontend se carga una única vez y toda la interacción se gestiona desde JavaScript sin recargar la página. El servidor solo sirve archivos estáticos y la lógica vive completamente en el navegador.
| Aspecto | Detalle |
|---|---|
| Estructura | Un HTML, CSS y JS que se cargan al inicio; el routing es cliente |
| Frameworks | Angular (4.x), React (16), Vue.js (2.x) |
| Ventajas | Experiencia de usuario fluida, menor carga al servidor, mejor rendimiento percibido |
| Desventajas | SEO más complejo, primer cargado más lento, JS pesado en el cliente |
Ejemplo típico: Una aplicación construida con Angular 4 + TypeScript que consume una API REST de Laravel o Node.js.
Las SPA resuelven la experiencia de usuario, pero crean un nuevo problema: el SEO. Google indexa el HTML que recibe, y si tu app solo devuelve un <div id="app"></div> vacío con un montón de JavaScript, los buscadores no ven nada. Para contenido que necesita aparecer en Google — blogs, tiendas, portafolios — necesitas que el HTML venga renderizado desde el servidor. Eso es SSR.
Server-Side Rendering (SSR)
Modelo donde el HTML se genera en el servidor para cada petición. Es el enfoque clásico que siguen PHP, Python/Django, Ruby on Rails y Java/Spring.
| Aspecto | Detalle |
|---|---|
| Estructura | El servidor genera el HTML completo y lo envía al navegador |
| Ventajas | SEO nativo, primer cargado rápido, mejor para contenido estático |
| Desventajas | Recarga completa en cada navegación, menos interactivo, más carga al servidor |
Tendencia en 2017: Next.js (React SSR, lanzado en 2016) está ganando tracción para combinar lo mejor de SPA y SSR.
El problema es que ni SSR ni SPA son perfectos por separado. SSR te da SEO pero pierdes la experiencia fluida de navegar sin recargas. SPA te da la experiencia pero pierdes el SEO. La solución que ha ganado terreno es combinar ambos: SSR para las primeras páginas que necesita Google, y SPA para la navegación posterior. Next.js popularizó este enfoque y hoy es el estándar.
Arquitectura híbrida (SSR + SPA)
Muchas aplicaciones modernas combinan ambos enfoques: SSR para las primeras páginas (SEO y rendimiento) y SPA para la navegación posterior (experiencia de usuario).
| Aspecto | Detalle |
|---|---|
| Herramienta estrella | Next.js (React), Nuxt.js (Vue.js, en desarrollo activo) |
| Ventajas | SEO + experiencia de usuario, primer cargado rápido, navegación fluida |
| Desventajas | Complejidad de configuración, requiere conocimiento tanto de backend como de frontend |
Ahora que entiendes los modelos de arquitectura, vamos a ver cómo se organizan las capas en una aplicación real. Porque da igual que elijas monolito o microservicios: siempre tendrás una capa que se comunica con el usuario, una que procesa la lógica, y una que guarda datos.
Capas de una arquitectura web típica en 2017
┌─────────────────────────────────┐
│ CLIENTE │
│ (Navegador / App Móvil) │
│ HTML + CSS + JavaScript │
│ Angular / React / Vue.js │
└──────────────┬──────────────────┘
│ HTTP/HTTPS (JSON)
┌──────────────▼──────────────────┐
│ API / SERVIDOR │
│ Node.js / Laravel / Django │
│ Spring Boot / .NET Core │
│ Lógica de negocio │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ BASE DE DATOS │
│ MySQL / PostgreSQL / MongoDB │
│ Redis (caché) │
│ Elasticsearch (búsqueda) │
└─────────────────────────────────┘
Tecnologías dominantes en 2017
Estas son las herramientas que estaban definiendo el panorama en 2017. Algunas siguen siendo relevantes, otras han sido reemplazadas, pero entender qué había te ayuda a entender por qué las cosas son como son hoy.
Frontend:
| Tecnología | Estado en 2017 |
|---|---|
| Angular 4 | Framework completo de Google, muy usado en empresas |
| React 16 | Librería de Facebook, la más popular del momento |
| Vue.js 2.x | En ascenso, fácil de adoptar, gran comunidad |
| jQuery | Aún en muchos proyectos legados, pero en declive |
| Bootstrap 3/4 | Framework CSS más usado para diseño responsive |
| Webpack | Bundler estándar para gestionar dependencias JS |
| Sass/Less | Preprocesadores CSS casi universales |
Backend:
| Tecnología | Estado en 2017 |
|---|---|
| Node.js + Express | Muy popular para APIs y tiempo real |
| PHP + Laravel 5.x | El framework PHP más maduro y completo |
| Python + Django 1.11 | Robusto para proyectos con lógica compleja |
| Ruby on Rails 5.x | Aunque pierde cuota, sigue siendo productivo |
| Spring Boot (Java) | Estándar en entornos empresariales |
| .NET Core | Microsoft apostando por cross-platform |
Infraestructura y bases de datos:
| Tecnología | Estado en 2017 |
|---|---|
| Docker | Enormemente popular, contenedores casi universales |
| Kubernetes | En crecimiento exponencial para orquestación |
| AWS | Líder del cloud, EC2, S3, RDS, Lambda |
| Nginx | Servidor web y proxy inverso más usado |
| MySQL 5.7 / PostgreSQL 9.6 | Bases de datos relacionales estándar |
| MongoDB 3.x / Redis 3.x | NoSQL documento y caché |
| RabbitMQ / Apache Kafka | Colas de mensajes para comunicación asíncrona |
Patrones de diseño comunes en 2017
MVC, API REST, Repository y CQRS
- MVC (Model-View-Controller): El patrón más extendido. Separa la aplicación en tres componentes: Modelo (datos y lógica de negocio), Vista (interfaz) y Controlador (coordina ambos). Usado por Laravel, Django, Rails, Spring MVC.
- API REST: El estándar de comunicación entre frontend y backend. Recursos como URLs, operaciones con métodos HTTP (GET, POST, PUT, DELETE), datos en JSON.
- Repository Pattern: Abstrae el acceso a datos. La lógica de negocio no accede directamente a la BD sino a través de una interfaz que oculta la implementación.
- CQRS (Command Query Responsibility Segregation): Separa operaciones de lectura (query) de escritura (command). Cada una puede tener su propio modelo optimizado. Gana popularidad para sistemas complejos.
GET /api/users/123 → Obtener usuario
POST /api/users → Crear usuario
PUT /api/users/123 → Actualizar usuario
DELETE /api/users/123 → Eliminar usuario
Estos patrones resuelven problemas de organización del código. Pero hay otra tendencia en 2017 que ataca un problema diferente: acercar las web apps al rendimiento de las apps nativas.
Progressive Web Apps (PWA)
Una de las tendencias más fuertes de 2017. Las PWA combinan lo mejor de las web apps y las apps nativas:
- Service Workers: Permiten funcionar offline y cachear recursos
- Manifest.json: La web se puede “instalar” en el escritorio o móvil
- HTTPS obligatorio: Seguridad como requisito base
- Push Notifications: Notificaciones nativas desde el navegador
Ejemplos reales en 2017: Twitter Lite, Pinterest, Flipboard, OLX.
Las PWA mejoran la experiencia en el navegador, pero el problema de comunicación entre frontend y backend sigue ahí. REST funciona bien, pero cuando tu app necesita datos de 10 fuentes diferentes en una sola pantalla, terminas haciendo 10 peticiones. GraphQL propone una alternativa.
GraphQL vs REST
En 2017, GraphQL (creado por Facebook en 2012 y open-sourceado en 2015) empieza a ganar tracción como alternativa a REST:
| Aspecto | REST | GraphQL |
|---|---|---|
| Endpoints | Múltiples URLs | Un único endpoint |
| Datos | El servidor define qué devuelve | El cliente pide exactamente lo que necesita |
| Over-fetching | Común (devuelve más datos de los necesarios) | Eliminado |
| Under-fetching | Común (necesitas múltiples peticiones) | Eliminado |
| Madurez | Muy maduro, amplio ecosistema | Emergente en 2017, menos herramientas |
Herramientas clave en 2017: Apollo (cliente GraphQL para React), GraphiQL (IDE para probar queries), Prisma (capa de acceso a BD para GraphQL).
Con todas estas opciones — arquitecturas, patrones, tendencias — la pregunta inevitable es: ¿cuál uso? La respuesta corta es “depende”, pero hay buenas prácticas que se aplican casi siempre.
Buenas prácticas en 2017
- Separar frontend y backend mediante APIs REST claras
- Usar contenedores Docker para entornos de desarrollo y producción consistentes
- CI/CD automatizado con Jenkins, GitLab CI o Travis CI
- Caché en Redis para datos que no cambian frecuentemente
- HTTPS en todas partes — Let’s Encrypt ha facilitado enormemente la adopción de certificados gratuitos
- Responsive design — Bootstrap o Flexbox para adaptar a móviles
- Testing automatizado — Jest para JS, PHPUnit para PHP, pytest para Python
Conclusión
Si tuviera que resumir todo esto en una frase, sería: no hay arquitectura perfecta, hay arquitectura adecuada para cada momento. Un proyecto personal no necesita microservicios. Una app con millones de usuarios no puede ser un monolito simple. Y la mayoría de proyectos reales terminan híbridos, usando lo mejor de cada enfoque.
Lo que sí puedo decirte es que entender estas opciones — y saber cuándo usar cada una — es lo que separa a alguien que escribe código de alguien que construye sistemas. Y eso es algo que solo se aprende construyendo, equivocándose, y volviendo a leer sobre arquitectura cuando el proyecto se complica.
🧪 Comprobar que lo has entendido
- Identifica cada modelo: ante una frase como “todo en un solo proyecto” o “servicios independientes con su propia base de datos”, sabes de qué arquitectura habla.
- Relaciona tecnología y arquitectura: asocias Angular/React con SPA, PHP/Django/Rails con SSR, y Docker/Kubernetes con microservicios.
- Justifica la elección: puedes explicar por qué un proyecto pequeño encaja mejor en un monolito y uno grande con equipos separados en microservicios.
🪜 Siguiente nivel
Esta guía te da el mapa conceptual. El siguiente paso es ponerlo en práctica con código:
- JavaScript de 0 a 100 — el lenguaje que mueve el frontend de casi todas estas arquitecturas: Guía de JavaScript: De 0 a 100.
- TypeScript de 0 a 100 — tipado estático para tus apps SPA y APIs: Guía de TypeScript: De 0 a 100.
- Docker de 0 a 100 — la base para desplegar monolito o microservicios de forma reproducible: Guía de Docker: De 0 a 100.
- Servidor propio — lleva tu primera app a Internet: Cómo crear un servidor virtual con Apache.
