Volver a Últimas PublicacionesBlog

Construyendo Aplicaciones Escalables con Next.js y AWS

Por Carlos Diaz · 8 de diciembre de 2024 · 3 min de lectura

La pregunta que mas me hacen sobre escalar aplicaciones Next.js no es realmente sobre Next.js, sino sobre que servicios de AWS deberian ir detras y cuando introducir cada uno. En esta publicacion quiero recorrer la secuencia real de decisiones en lugar del menu teorico de opciones.

Para la mayoria de las aplicaciones, el punto de partida correcto es Lambda detras de API Gateway, respaldado por una base de datos administrada como DynamoDB o Aurora Serverless, con CloudFront cacheando assets estaticos y respuestas de API donde sea posible. Esto te lleva a produccion rapido, escala sin planificacion de capacidad, y mantiene los costos proporcionales al uso real en lugar de capacidad aprovisionada que queda ociosa. El error que veo mas seguido es que los equipos recurren a Kubernetes desde el primer dia porque es la forma 'correcta' de correr software en produccion, cuando un enfoque serverless-first los hubiera llevado a sus primeros mil usuarios con una fraccion de la sobrecarga operativa.

El cache es donde la arquitectura realmente gana su escalabilidad. CloudFront frente a assets estaticos y rutas de API cacheables elimina la mayoria del trafico de lectura de tu origen antes de que llegue a una funcion Lambda. ElastiCache (Redis) maneja el caso mas dificil: datos que cambian con la frecuencia suficiente para que un TTL de CDN no funcione, pero que son lo bastante costosos de calcular o consultar como para que recalcularlos por cada peticion cree carga innecesaria en la base de datos. Acertar con la estrategia de invalidacion - llaves de cache versionadas, invalidacion dirigida en lugar de limpiezas generales - importa mas que la capa de cache en si.

El punto para migrar de serverless a contenedores no es un umbral fijo, es un sintoma: cold starts que se vuelven un problema real de latencia para una ruta especifica, una carga de trabajo cuyas caracteristicas de costo ya no tienen sentido en volumenes altos y sostenidos, o una dependencia que genuinamente necesita un proceso de larga duracion. Cuando eso pasa, muevo solo ese servicio especifico a un contenedor corriendo en ECS Fargate, en lugar de migrar toda la plataforma, manteniendo los beneficios de costo y operacion de serverless en todo lo demas.

La observabilidad tiene que ser parte de la arquitectura desde el inicio, no algo que se agrega despues. Las metricas de CloudWatch y los logs estructurados, junto con trazabilidad distribuida en cuanto tienes mas de un par de servicios hablando entre si, son lo que te permite tomar estas decisiones de migracion basandote en datos reales en lugar de suposiciones sobre donde esta el cuello de botella.

Puntos Clave

  • Comienza serverless-first con Lambda, API Gateway y una base de datos administrada para la mayoria de los endpoints.
  • El cache con CloudFront y ElastiCache reduce la latencia y el costo antes de que las peticiones lleguen a tu origen.
  • Migra a contenedores solo las rutas criticas que realmente lo necesiten, no toda la plataforma.
  • Acertar con la invalidacion de cache importa mas que la capa de cache en si.
  • La observabilidad tiene que disenarse desde el inicio para tomar decisiones de migracion basadas en datos, no suposiciones.