Arquitetura Serverless - Introdução ao FaaS

Intermediário | 15 min leitura | 2025.12.04

O que é Serverless

Serverless é uma arquitetura que permite focar apenas na execução do código, delegando o gerenciamento de servidores ao provedor de nuvem. Não significa “sem servidor”, mas sim “sem necessidade de se preocupar com servidores”.

Benefícios: Sem gerenciamento de infraestrutura, escalabilidade automática, cobrança apenas pelo uso

Tipos de Serverless

FaaS (Function as a Service)

Executa funções através de gatilhos de eventos.

// Exemplo 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)

Fornece funcionalidades de backend como autenticação, banco de dados e armazenamento como serviço.

Exemplos de BaaS:
- Firebase Authentication (autenticação)
- Firestore (banco de dados)
- AWS S3 (armazenamento)
- Algolia (busca)

Como o FaaS Funciona

flowchart LR
    subgraph FaaS["Plataforma FaaS"]
        Event["Evento"] --> Container["Início do Container"] --> Execute["Execução da Função"] --> Response["Resposta"] --> Stop["Parada"]

        subgraph Functions["Execução Paralela Possível"]
            FA["Função A"]
            FB["Função B"]
            FC["Função C"]
        end
    end

    Note["Escalabilidade: 0 → 1 → 100 → 1000 → 0 (automática)"]

Fontes de Eventos

Requisição HTTP    → API Gateway → Lambda
Upload de arquivo  → S3 Event    → Lambda
Agendamento        → CloudWatch  → Lambda
Mensagem           → SQS/SNS     → Lambda
Alteração no BD    → DynamoDB    → Lambda

Principais Plataformas FaaS

ServiçoProvedorCaracterísticas
AWS LambdaAmazonLíder de mercado, amplas integrações
Cloud FunctionsGoogleIntegração GCP, Firebase
Azure FunctionsMicrosoftAfinidade com .NET
Cloudflare WorkersCloudflareExecução na borda, baixa latência
Vercel FunctionsVercelIntegração com frontend

Cold Start

Quando uma função é executada pela primeira vez, leva tempo para iniciar o container.

Cold Start:
Requisição → [Início do Container 100-1000ms] → [Execução da Função] → Resposta

Warm Start:
Requisição → [Execução da Função] (reutilização do container) → Resposta

Após período de inatividade:
[Container Parado] → Próxima vez será Cold Start

Estratégias para Cold Start

EstratégiaDescrição
Provisioned ConcurrencyManter containers pré-iniciados
Aquecimento periódicoManter containers com execução periódica
Runtime leveNode.js, Python (mais rápidos que Java)
Otimização de dependênciasReduzir tamanho dos pacotes
// Inicializar conexão fora da função (será reutilizada)
const db = new Database();

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

Modelo de Precificação

Exemplo de Cobrança por Uso (AWS Lambda)

Preço = Número de requisições × Tempo de execução × Memória

Exemplo:
- 1 milhão de requisições/mês
- Tempo médio de execução: 200ms
- Memória: 512MB

Preço ≈ $0.20 + $3.33 = $3.53/mês

※ Camada gratuita: 1 milhão de requisições, 400.000 GB-segundos/mês

Comparação com Servidor Tradicional

Servidor tradicional:
24 horas × 30 dias = 720 horas de operação
→ Cobrança constante (mesmo sem uso)

Serverless:
Cobrança apenas pelo tempo real de execução
→ Sem cobrança em tempo ocioso

Casos de Uso

Casos Adequados

✓ Processamento orientado a eventos (processamento de arquivos, Webhooks)
✓ Processamento em lote irregular
✓ Backend de API (especialmente tráfego baixo a médio)
✓ Parte de microsserviços
✓ Prototipagem, MVP

Casos Não Adequados

✗ Alto tráfego constante (custo-benefício ruim)
✗ Processamento de longa duração (limite de timeout)
✗ Baixa latência obrigatória (cold start)
✗ Processamento stateful
✗ WebSocket (suporte parcial)

Limitações

LimitaçãoAWS LambdaCloud Functions
Tempo máximo de execução15 min9 min (HTTP), 60 min (eventos)
Memória128MB-10GB128MB-32GB
Tamanho do payload6MB (síncrono), 256KB (assíncrono)10MB
Execuções simultâneas1000 (padrão, pode ser aumentado)Limitado

Padrões de Implementação

API Gateway + Lambda

Cliente → API Gateway → Lambda → DynamoDB
                ↓
          Autenticação, Rate Limit,
          Cache

Pipeline de Processamento de Eventos

S3 (upload de imagem)
    ↓
Lambda (geração de thumbnail)
    ↓
S3 (salvamento do thumbnail)
    ↓
SNS (notificação)

Execução Agendada

// serverless.yml
functions:
  dailyReport:
    handler: handler.generateReport
    events:
      - schedule: cron(0 9 * * ? *)  // Todos os dias às 9h

Frameworks

FrameworkCaracterísticas
Serverless FrameworkSuporte multi-cloud
AWS SAMOficial AWS, integração CloudFormation
SSTTypeScript, desenvolvimento local
TerraformGerenciamento integrado como IaC

Resumo

Serverless é uma arquitetura que reduz a carga de gerenciamento de infraestrutura e permite focar no desenvolvimento. É especialmente adequado para processamento orientado a eventos e cargas de trabalho irregulares. Por outro lado, há pontos a considerar como cold start e limites de tempo de execução. É importante usar em conjunto com servidores tradicionais conforme o caso de uso.

← Voltar para a lista