Sinatra Mini — API Analítica de Alta Vazão em Java 17, Spring 3 & K8s
Plataforma SaaS de Análise de Vendas Multi-Loja em Java 17 e Spring Boot 3.2.12, concebida para resolver gargalos clássicos de memória, concorrência e latência em relatórios analíticos de alta volumetria. O projeto evoluiu sob governança estruturada de 49 Issues de Épicos/Stories, 56 Pull Requests, 11 migrações Flyway (V1–V11), cache híbrido em duas camadas (Caffeine L1 + Redis L2), suíte de integração com Testcontainers e orquestração em Kubernetes com HPA (3–10 réplicas).
- Repositório Público & Releases (
v1.1.0): github.com/evslopes/sinatra-mini - Backlog de Evolução Arquitetural (49 Issues — v1.0 a v3.0): github.com/evslopes/sinatra-mini/issues
Pipeline de Execução Analítica de Baixa Alocação
Em sistemas B2B multi-loja, invocar findAll() ou materializar grafos inteiros de entidades JPA na Heap derruba rapidamente instâncias em produção por OutOfMemoryError. A arquitetura isola responsabilidades por camada (SRP) e processa séries temporais em fluxo contínuo:
REST Controller
Validação ISO & Records
Service Layer (ZoneId & Varredura O(N))
CompositeCacheManager
L1 Caffeine / L2 Redis
JPA Projections & Stream<T>
fetchSize=500
PostgreSQL 15
Flyway V1–V11 & Índices Compostos
Decisões de Engenharia & Otimizações Aplicadas
| Desafio de Engenharia | Anti-Pattern Evitado | Solução Implementada em Código |
|---|---|---|
| Exportação CSV de Alto Volume | Carregar List<Pedido> inteira em memória antes de serializar | Stream<DailySalesProjection> com @Transactional(readOnly = true), @QueryHints(fetchSize = "500") e escrita direta em StreamingResponseBody |
| Detecção do Maior Intervalo Sem Vendas | Loops aninhados O(N^2) comparando pares de datas | Varredura linear única O(N) sobre datas distintas ordenadas no banco em MaiorIntervaloSemVendasService |
Consistência Multi-Fuso (Timezone) | Conversões ad-hoc espalhadas entre Controller e SQL | Armazenamento uniforme em LocalDateTime e conversão ZoneId estritamente isolada na camada Service (média semanal Seg–Dom e dia de menor venda) |
| Seletividade Relacional & Tráfego | Full Table Scans e projeção completa de entidades (N+1) | Índice composto idx_pedido_loja_data (loja_id, data_pedido), triggers de totalização (V11) e DTOs imutáveis com Java 17 Records |
| Cache Multi-Nível Resiliente | Dependência rígida de rede em cada leitura quente | CompositeCacheManager combinando L1 Caffeine in-process (10.000 entradas, < 0,1 ms) e L2 Redis distribuído (TTL 10 min) |
Governança SRE, Testcontainers & Produção Cloud-Native
- Suíte Automatizada com Paridade Real (
Testcontainers+ Fallback):GlobalTestBootstrapprovisiona automaticamentepostgres:15-alpinevia Testcontainers em CI/CD para validar as 11 migrações Flyway reais, mantendo fallback transparente em memória com triggers Java equivalentes para execução offline instantânea (54testes unitários, integração, validação e carga). - Hardening de Container & Kubernetes (
HPA+RPO/RTO):Dockerfilemulti-stage (eclipse-temurin:17-jre-alpine, usuário não-root,dumb-initcomo PID 1,G1GCeMaxRAMPercentage=75%), manifestosk8s/comHorizontalPodAutoscaler(3a10pods),StatefulSetseCronJobautomatizado de backup/restore PostgreSQL documentado com metas formais de RPO/RTO. - Orquestração Multi-Agente & Roadmap até CQRS/Sharding: Governança de engenharia dividida em 4 papéis especializados (
.github/agents/: Agile, Engineer, DevOps e QA) conduzindo um roadmap técnico de 6 Épicos documentados até particionamento multi-tenant (Sharding) e CQRS + Event Sourcing.
Repositório aberto com pipeline GitHub Actions (Java 17 + Testcontainers + Docker Build), especificações por Story, relatório QA e runbook de Disaster Recovery.