Architecture Overview
Visão geral da arquitetura do sistema.
Arquitetura Geral
Nossa arquitetura é baseada em serverless usando AWS Lambda com comunicação síncrona (APIs REST) e assíncrona (SQS/SNS).
graph TB
Client[Cliente Web/Mobile] --> ALB[Application Load Balancer]
ALB --> APIGateway[API Gateway]
APIGateway --> AuthLambda[Lambda: Auth]
APIGateway --> UserLambda[Lambda: Users API]
APIGateway --> ProductLambda[Lambda: Products API]
UserLambda --> RDS[(PostgreSQL)]
ProductLambda --> RDS
UserLambda --> SQS[SQS: user-events]
ProductLambda --> SNS[SNS: product-updates]
SQS --> ProcessorLambda[Lambda: Event Processor]
SNS --> EmailLambda[Lambda: Email Sender]
SNS --> NotificationLambda[Lambda: Push Notifications]
ProcessorLambda --> S3[S3: Data Lake]
EmailLambda --> SES[SES: Email Service]
subgraph monitoring [Monitoring]
CloudWatch[CloudWatch Logs & Metrics]
XRay[X-Ray Tracing]
end
AuthLambda -.-> CloudWatch
UserLambda -.-> CloudWatch
ProductLambda -.-> CloudWatch
ProcessorLambda -.-> CloudWatch
Componentes Principais
Frontend
Stack: React 18 + TypeScript + Vite
Responsabilidades: - Interface do usuário - Validação client-side - Autenticação (JWT) - Comunicação com APIs
Deploy: S3 + CloudFront
Backend APIs
Stack: Python 3.11 + FastAPI + SQLAlchemy
Responsabilidades: - Endpoints REST - Business logic - Validação de dados - Autenticação/Autorização - Integração com banco de dados
Deploy: AWS Lambda via API Gateway
Database
Stack: PostgreSQL 14 (RDS)
Características: - 2 instâncias: staging e production - Migrations com Alembic - Backups automáticos - Réplicas de leitura (production)
Message Queues
SQS (Simple Queue Service)
Uso: - Processamento assíncrono - Desacoplar serviços - Retry automático - Dead Letter Queue (DLQ)
Exemplos:
- user-events-queue: Eventos de usuário (criação, atualização)
- payment-processing-queue: Processamento de pagamentos
- notification-queue: Envio de notificações
SNS (Simple Notification Service)
Uso: - Pub/Sub (1 → N) - Fan-out para múltiplos consumidores - Notificações em tempo real
Exemplos:
- product-updates-topic: Atualizações de produtos
- order-events-topic: Eventos de pedidos
- system-alerts-topic: Alertas do sistema
Storage
S3 Buckets:
- app-uploads-staging/prod: Uploads de usuários
- app-data-lake: Data analytics
- app-backups: Backups e exports
Patterns Arquiteturais
Synchronous (REST API)
Para operações que precisam de resposta imediata:
# Cliente faz request
POST /api/users
{
"name": "John",
"email": "john@example.com"
}
# Lambda processa e responde
{
"id": 123,
"name": "John",
"email": "john@example.com"
}
Quando usar: - CRUD operations - Queries de dados - Validação imediata necessária
Asynchronous (SQS/SNS)
Para operações que podem ser processadas em background:
# Lambda publica mensagem
sqs.send_message(
QueueUrl=queue_url,
MessageBody=json.dumps({
"event": "user_created",
"user_id": 123
})
)
# Outro Lambda processa assincronamente
def lambda_handler(event, context):
for record in event['Records']:
message = json.loads(record['body'])
process_user_created(message)
Quando usar: - Envio de emails - Processamento de imagens - Geração de relatórios - Integração com serviços externos - Qualquer operação > 2 segundos
Ambientes
Staging
- Branch:
dev - URL: https://staging.seuapp.com
- Database: PostgreSQL staging
- Propósito: Testes e QA
- Dados: Dados fake/anonimizados
Production
- Branch:
main - URL: https://seuapp.com
- Database: PostgreSQL production (com réplicas)
- Propósito: Ambiente real
- Dados: Dados reais de clientes
Segurança
Autenticação
- JWT tokens com expiração
- Refresh tokens em HTTP-only cookies
- MFA para operações sensíveis
Autorização
- RBAC (Role-Based Access Control)
- Permissões granulares
- Least privilege principle
Network
- VPC privada para RDS
- Security groups restritivos
- API Gateway com WAF
- Rate limiting
Escalabilidade
Lambda
- Auto-scaling automático
- Concurrency limits configurados
- Reserved concurrency para funções críticas
- Provisioned concurrency para latência consistente
Database
- Connection pooling
- Read replicas para queries
- Índices otimizados
- Query caching
Caching
- CloudFront CDN para assets estáticos
- ElastiCache Redis para dados de sessão
- Application-level cache (Python @lru_cache)
Monitoramento
- CloudWatch Logs para todos os Lambdas
- CloudWatch Metrics e Dashboards
- X-Ray para distributed tracing
- Alarmes para erros e latência
- Ver mais em Observability →
Disaster Recovery
- RTO (Recovery Time Objective): 1 hora
- RPO (Recovery Point Objective): 5 minutos
- Backups automáticos diários
- Cross-region replication para dados críticos
- Runbook de DR →
Próximos Passos
- API Design - Padrões de API REST e eventos
- AWS Services - Serviços AWS utilizados
- Design Patterns - Patterns de código
- Database Schema - Modelo de dados