Pular para conteúdo

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