Arquitectura Serverless - Introduccion a FaaS

15 min de lectura | 2025.12.04

Que es Serverless

Serverless es una arquitectura que permite concentrarse solo en la ejecucion del codigo, delegando la gestion del servidor al proveedor de la nube. No significa “sin servidor”, sino “no necesitas preocuparte por el servidor”.

Beneficios: Sin gestion de infraestructura, escalado automatico, pago solo por uso

Tipos de Serverless

FaaS (Function as a Service)

Ejecuta funciones mediante disparadores de eventos.

// Ejemplo de AWS Lambda
export const handler = async (event) => {
  const name = event.queryStringParameters?.name || 'World';
  return {
    statusCode: 200,
    body: JSON.stringify({ message: `Hello, ${name}!` })
  };
};

BaaS (Backend as a Service)

Proporciona funciones de backend como autenticacion, base de datos y almacenamiento como servicio.

Ejemplos de BaaS:
- Firebase Authentication (Autenticacion)
- Firestore (Base de datos)
- AWS S3 (Almacenamiento)
- Algolia (Busqueda)

Como Funciona FaaS

flowchart LR
    subgraph FaaS["Plataforma FaaS"]
        Event["Evento"] --> Container["Inicio de contenedor"] --> Execute["Ejecucion de funcion"] --> Response["Respuesta"] --> Stop["Detencion"]

        subgraph Functions["Ejecucion en paralelo posible"]
            FA["Funcion A"]
            FB["Funcion B"]
            FC["Funcion C"]
        end
    end

    Note["Escalado: 0 → 1 → 100 → 1000 → 0 (automatico)"]

Event Sources

Solicitud HTTP        → API Gateway → Lambda
Carga de archivo      → S3 Event    → Lambda
Programacion          → CloudWatch  → Lambda
Mensaje               → SQS/SNS     → Lambda
Cambio en base datos  → DynamoDB    → Lambda

Principales Plataformas FaaS

ServicioProveedorCaracteristicas
AWS LambdaAmazonLider del mercado, amplia integracion
Cloud FunctionsGoogleIntegracion con GCP, Firebase
Azure FunctionsMicrosoftAfinidad con .NET
Cloudflare WorkersCloudflareEjecucion en edge, baja latencia
Vercel FunctionsVercelIntegrado con frontend

Cold Start

Cuando una funcion se ejecuta por primera vez, el inicio del contenedor toma tiempo.

Cold Start:
Solicitud → [Inicio de contenedor 100-1000ms] → [Ejecucion de funcion] → Respuesta

Warm Start:
Solicitud → [Ejecucion de funcion] (reutilizacion de contenedor) → Respuesta

Si continua en estado inactivo:
[Detencion de contenedor] → La proxima vez sera Cold Start

Contramedidas para Cold Start

ContramedidaDescripcion
Provisioned ConcurrencyIniciar contenedores previamente
Calentamiento periodicoMantener contenedores con ejecucion periodica
Runtime ligeroNode.js, Python (mas rapido que Java)
Optimizacion de dependenciasReducir tamano de paquetes
// Inicializar conexion fuera de la funcion (se reutiliza)
const db = new Database();

export const handler = async (event) => {
  // db se reutiliza
  return await db.query('SELECT * FROM users');
};

Modelo de Precios

Ejemplo de Pago por Uso (AWS Lambda)

Precio = Numero de solicitudes x Tiempo de ejecucion x Memoria

Ejemplo:
- 1 millon de solicitudes/mes
- Tiempo promedio de ejecucion: 200ms
- Memoria: 512MB

Precio ≈ $0.20 + $3.33 = $3.53/mes

※ Capa gratuita: 1 millon de solicitudes, 400,000 GB-segundos/mes

Comparacion con Servidor Tradicional

Servidor tradicional:
24 horas x 30 dias = 720 horas de operacion
→ Cobro constante (incluso sin uso)

Serverless:
Solo se cobra por tiempo real de ejecucion
→ Sin cobro cuando esta inactivo

Casos de Uso

Casos Adecuados

Procesamiento orientado a eventos (procesamiento de archivos, Webhook)
Procesamiento por lotes irregular
Backend API (especialmente trafico bajo a medio)
Parte de microservicios
Prototipado, MVP

Casos No Adecuados

Alto trafico constante (eficiencia de costos deficiente)
Procesamiento de larga duracion (limite de tiempo de espera)
Latencia baja obligatoria (cold start)
Procesamiento con estado
WebSocket (soporte parcial)

Limitaciones

LimitacionAWS LambdaCloud Functions
Tiempo maximo de ejecucion15 min9 min (HTTP), 60 min (evento)
Memoria128MB-10GB128MB-32GB
Tamano de payload6MB (sincrono), 256KB (asincrono)10MB
Ejecuciones concurrentes1000 (por defecto, ampliable)Limitado

Patrones de Implementacion

API Gateway + Lambda

Cliente → API Gateway → Lambda → DynamoDB
                ↓
          Autenticacion, Rate limiting,
          Cache

Pipeline de Procesamiento de Eventos

S3 (Carga de imagen)
    ↓
Lambda (Generacion de miniatura)
    ↓
S3 (Guardado de miniatura)
    ↓
SNS (Notificacion)

Ejecucion Programada

// serverless.yml
functions:
  dailyReport:
    handler: handler.generateReport
    events:
      - schedule: cron(0 9 * * ? *)  // Todos los dias a las 9

Frameworks

FrameworkCaracteristicas
Serverless FrameworkSoporte multi-nube
AWS SAMOficial de AWS, integracion con CloudFormation
SSTTypeScript, desarrollo local
TerraformGestion integrada como IaC

Resumen

Serverless es una arquitectura que reduce la carga de gestion de infraestructura y permite concentrarse en el desarrollo. Es especialmente adecuada para procesamiento orientado a eventos y cargas de trabajo irregulares. Sin embargo, hay puntos a considerar como cold start y limitaciones de tiempo de ejecucion. Es importante distinguir entre serverless y servidores tradicionales segun el caso de uso.

← Volver a la lista