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ço | Provedor | Características |
|---|---|---|
| AWS Lambda | Amazon | Líder de mercado, amplas integrações |
| Cloud Functions | Integração GCP, Firebase | |
| Azure Functions | Microsoft | Afinidade com .NET |
| Cloudflare Workers | Cloudflare | Execução na borda, baixa latência |
| Vercel Functions | Vercel | Integraçã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égia | Descrição |
|---|---|
| Provisioned Concurrency | Manter containers pré-iniciados |
| Aquecimento periódico | Manter containers com execução periódica |
| Runtime leve | Node.js, Python (mais rápidos que Java) |
| Otimização de dependências | Reduzir 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ção | AWS Lambda | Cloud Functions |
|---|---|---|
| Tempo máximo de execução | 15 min | 9 min (HTTP), 60 min (eventos) |
| Memória | 128MB-10GB | 128MB-32GB |
| Tamanho do payload | 6MB (síncrono), 256KB (assíncrono) | 10MB |
| Execuções simultâneas | 1000 (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
| Framework | Características |
|---|---|
| Serverless Framework | Suporte multi-cloud |
| AWS SAM | Oficial AWS, integração CloudFormation |
| SST | TypeScript, desenvolvimento local |
| Terraform | Gerenciamento 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