@maestro-ai/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -0
- package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
- package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
- package/content/guides/Checklist Mestre de Entrega.md +68 -0
- package/content/guides/Gates de Qualidade.md +209 -0
- package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
- package/content/guides/Guia de Chaos Engineering.md +267 -0
- package/content/guides/Guia de Debugging com IA.md +135 -0
- package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
- package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
- package/content/guides/Guia de Multi-tenancy.md +368 -0
- package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
- package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
- package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
- package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
- package/content/guides/Rules base.md +90 -0
- package/content/prompts/README.md +203 -0
- package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
- package/content/prompts/apis/design-api-rest.md +303 -0
- package/content/prompts/apis/idempotencia.md +254 -0
- package/content/prompts/apis/versionamento.md +313 -0
- package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
- package/content/prompts/arquitetura/clean-architecture.md +151 -0
- package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
- package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
- package/content/prompts/arquitetura/modelo-dominio.md +207 -0
- package/content/prompts/arquitetura/multi-tenancy.md +235 -0
- package/content/prompts/database/migrations-zero-downtime.md +192 -0
- package/content/prompts/database/otimizacao-queries.md +296 -0
- package/content/prompts/desenvolvimento/code-review.md +301 -0
- package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
- package/content/prompts/devops/docker-compose.md +336 -0
- package/content/prompts/devops/feature-flags.md +374 -0
- package/content/prompts/devops/kubernetes-deploy.md +460 -0
- package/content/prompts/devops/pipeline-cicd.md +358 -0
- package/content/prompts/devops/terraform-iac.md +502 -0
- package/content/prompts/escalabilidade/analise-performance.md +240 -0
- package/content/prompts/escalabilidade/analise-performance.txt +94 -0
- package/content/prompts/escalabilidade/caching.md +255 -0
- package/content/prompts/observabilidade/chaos-testing.md +237 -0
- package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
- package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
- package/content/prompts/observabilidade/slos.md +215 -0
- package/content/prompts/produto/discovery-inicial.md +203 -0
- package/content/prompts/produto/discovery-inicial.txt +33 -0
- package/content/prompts/requisitos/refinar-requisitos.md +232 -0
- package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
- package/content/prompts/seguranca/analise-seguranca.md +243 -0
- package/content/prompts/seguranca/pentest-checklist.md +333 -0
- package/content/prompts/seguranca/rate-limiting.md +356 -0
- package/content/prompts/seguranca/revisao-lgpd.md +227 -0
- package/content/prompts/seguranca/threat-modeling.md +224 -0
- package/content/prompts/testes/contract-testing.md +340 -0
- package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
- package/content/prompts/testes/testes-e2e.md +460 -0
- package/content/prompts/testes/testes-integracao.md +418 -0
- package/content/prompts/testes/testes-performance.md +458 -0
- package/content/prompts/ux/gerar-ui-stitch.md +151 -0
- package/content/skills/api-patterns/SKILL.md +81 -0
- package/content/skills/api-patterns/api-style.md +42 -0
- package/content/skills/api-patterns/auth.md +24 -0
- package/content/skills/api-patterns/documentation.md +26 -0
- package/content/skills/api-patterns/graphql.md +41 -0
- package/content/skills/api-patterns/rate-limiting.md +31 -0
- package/content/skills/api-patterns/response.md +37 -0
- package/content/skills/api-patterns/rest.md +40 -0
- package/content/skills/api-patterns/scripts/api_validator.py +211 -0
- package/content/skills/api-patterns/security-testing.md +122 -0
- package/content/skills/api-patterns/trpc.md +41 -0
- package/content/skills/api-patterns/versioning.md +22 -0
- package/content/skills/app-builder/SKILL.md +75 -0
- package/content/skills/app-builder/agent-coordination.md +71 -0
- package/content/skills/app-builder/feature-building.md +53 -0
- package/content/skills/app-builder/project-detection.md +34 -0
- package/content/skills/app-builder/scaffolding.md +118 -0
- package/content/skills/app-builder/tech-stack.md +40 -0
- package/content/skills/app-builder/templates/SKILL.md +39 -0
- package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/content/skills/architecture/SKILL.md +55 -0
- package/content/skills/architecture/context-discovery.md +43 -0
- package/content/skills/architecture/examples.md +94 -0
- package/content/skills/architecture/pattern-selection.md +68 -0
- package/content/skills/architecture/patterns-reference.md +50 -0
- package/content/skills/architecture/trade-off-analysis.md +77 -0
- package/content/skills/bash-linux/SKILL.md +199 -0
- package/content/skills/behavioral-modes/SKILL.md +242 -0
- package/content/skills/brainstorming/SKILL.md +163 -0
- package/content/skills/brainstorming/dynamic-questioning.md +350 -0
- package/content/skills/clean-code/SKILL.md +201 -0
- package/content/skills/code-review-checklist/SKILL.md +109 -0
- package/content/skills/database-design/SKILL.md +52 -0
- package/content/skills/database-design/database-selection.md +43 -0
- package/content/skills/database-design/indexing.md +39 -0
- package/content/skills/database-design/migrations.md +48 -0
- package/content/skills/database-design/optimization.md +36 -0
- package/content/skills/database-design/orm-selection.md +30 -0
- package/content/skills/database-design/schema-design.md +56 -0
- package/content/skills/database-design/scripts/schema_validator.py +172 -0
- package/content/skills/deployment-procedures/SKILL.md +241 -0
- package/content/skills/doc.md +177 -0
- package/content/skills/documentation-templates/SKILL.md +194 -0
- package/content/skills/frontend-design/SKILL.md +396 -0
- package/content/skills/frontend-design/animation-guide.md +331 -0
- package/content/skills/frontend-design/color-system.md +311 -0
- package/content/skills/frontend-design/decision-trees.md +418 -0
- package/content/skills/frontend-design/motion-graphics.md +306 -0
- package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/content/skills/frontend-design/typography-system.md +345 -0
- package/content/skills/frontend-design/ux-psychology.md +541 -0
- package/content/skills/frontend-design/visual-effects.md +383 -0
- package/content/skills/game-development/2d-games/SKILL.md +119 -0
- package/content/skills/game-development/3d-games/SKILL.md +135 -0
- package/content/skills/game-development/SKILL.md +167 -0
- package/content/skills/game-development/game-art/SKILL.md +185 -0
- package/content/skills/game-development/game-audio/SKILL.md +190 -0
- package/content/skills/game-development/game-design/SKILL.md +129 -0
- package/content/skills/game-development/mobile-games/SKILL.md +108 -0
- package/content/skills/game-development/multiplayer/SKILL.md +132 -0
- package/content/skills/game-development/pc-games/SKILL.md +144 -0
- package/content/skills/game-development/vr-ar/SKILL.md +123 -0
- package/content/skills/game-development/web-games/SKILL.md +150 -0
- package/content/skills/geo-fundamentals/SKILL.md +156 -0
- package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/content/skills/i18n-localization/SKILL.md +154 -0
- package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/content/skills/intelligent-routing/SKILL.md +334 -0
- package/content/skills/lint-and-validate/SKILL.md +45 -0
- package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
- package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/content/skills/mcp-builder/SKILL.md +176 -0
- package/content/skills/mobile-design/SKILL.md +394 -0
- package/content/skills/mobile-design/decision-trees.md +516 -0
- package/content/skills/mobile-design/mobile-backend.md +491 -0
- package/content/skills/mobile-design/mobile-color-system.md +420 -0
- package/content/skills/mobile-design/mobile-debugging.md +122 -0
- package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/content/skills/mobile-design/mobile-navigation.md +458 -0
- package/content/skills/mobile-design/mobile-performance.md +767 -0
- package/content/skills/mobile-design/mobile-testing.md +356 -0
- package/content/skills/mobile-design/mobile-typography.md +433 -0
- package/content/skills/mobile-design/platform-android.md +666 -0
- package/content/skills/mobile-design/platform-ios.md +561 -0
- package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/content/skills/mobile-design/touch-psychology.md +537 -0
- package/content/skills/nextjs-best-practices/SKILL.md +203 -0
- package/content/skills/nodejs-best-practices/SKILL.md +333 -0
- package/content/skills/parallel-agents/SKILL.md +175 -0
- package/content/skills/performance-profiling/SKILL.md +143 -0
- package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/content/skills/plan-writing/SKILL.md +152 -0
- package/content/skills/powershell-windows/SKILL.md +167 -0
- package/content/skills/python-patterns/SKILL.md +441 -0
- package/content/skills/react-patterns/SKILL.md +198 -0
- package/content/skills/red-team-tactics/SKILL.md +199 -0
- package/content/skills/seo-fundamentals/SKILL.md +129 -0
- package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/content/skills/server-management/SKILL.md +161 -0
- package/content/skills/systematic-debugging/SKILL.md +109 -0
- package/content/skills/tailwind-patterns/SKILL.md +269 -0
- package/content/skills/tdd-workflow/SKILL.md +149 -0
- package/content/skills/testing-patterns/SKILL.md +178 -0
- package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/content/skills/vulnerability-scanner/SKILL.md +276 -0
- package/content/skills/vulnerability-scanner/checklists.md +121 -0
- package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/content/skills/webapp-testing/SKILL.md +187 -0
- package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/content/specialists/Especialista em Acessibilidade.md +266 -0
- package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
- package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
- package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
- package/content/specialists/Especialista em Banco de Dados.md +260 -0
- package/content/specialists/Especialista em Contrato de API.md +172 -0
- package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
- package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
- package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
- package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
- package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
- package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
- package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
- package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
- package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
- package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
- package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
- package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
- package/content/specialists/Especialista em Observabilidade.md +415 -0
- package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
- package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
- package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
- package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
- package/content/specialists/Especialista em UX Design.md +453 -0
- package/content/specialists/INDEX.md +43 -0
- package/content/templates/PRD.md +165 -0
- package/content/templates/README.md +65 -0
- package/content/templates/adr.md +103 -0
- package/content/templates/arquitetura.md +279 -0
- package/content/templates/backlog.md +185 -0
- package/content/templates/checklist-seguranca.md +180 -0
- package/content/templates/contexto.md +120 -0
- package/content/templates/criterios-aceite.md +99 -0
- package/content/templates/design-banco.md +270 -0
- package/content/templates/design-doc.md +240 -0
- package/content/templates/feature.md +88 -0
- package/content/templates/historia-backend.md +84 -0
- package/content/templates/historia-frontend.md +75 -0
- package/content/templates/historia-usuario.md +125 -0
- package/content/templates/mapa-navegacao.md +133 -0
- package/content/templates/matriz-rastreabilidade.md +121 -0
- package/content/templates/modelo-dominio.md +219 -0
- package/content/templates/plano-testes.md +199 -0
- package/content/templates/prototipo-stitch.md +138 -0
- package/content/templates/requisitos.md +162 -0
- package/content/templates/slo-sli.md +197 -0
- package/content/workflows/README-MCP.md +363 -0
- package/content/workflows/brainstorm.md +113 -0
- package/content/workflows/create.md +59 -0
- package/content/workflows/debug.md +103 -0
- package/content/workflows/deploy.md +176 -0
- package/content/workflows/enhance.md +63 -0
- package/content/workflows/mcp-debug.md +506 -0
- package/content/workflows/mcp-feature.md +385 -0
- package/content/workflows/mcp-gate.md +413 -0
- package/content/workflows/mcp-next.md +388 -0
- package/content/workflows/mcp-refactor.md +600 -0
- package/content/workflows/mcp-start.md +304 -0
- package/content/workflows/mcp-status.md +400 -0
- package/content/workflows/orchestrate.md +237 -0
- package/content/workflows/plan.md +89 -0
- package/content/workflows/preview.md +81 -0
- package/content/workflows/status.md +86 -0
- package/content/workflows/test.md +144 -0
- package/content/workflows/ui-ux-pro-max.md +296 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.js +138 -0
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.js +50 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/package.json +48 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Prompt: Análise de Performance e Escalabilidade
|
|
2
|
+
|
|
3
|
+
> **Quando usar**: Após implementação inicial, antes de ir para produção, ou ao identificar gargalos
|
|
4
|
+
> **Especialista**: [Performance e Escalabilidade](../../02-especialistas/Especialista%20em%20Performance%20e%20Escalabilidade.md)
|
|
5
|
+
> **Nível**: Médio a Complexo
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Fluxo de Contexto
|
|
10
|
+
|
|
11
|
+
Antes de usar este prompt, tenha em mãos:
|
|
12
|
+
- `docs/CONTEXTO.md` - Entendimento atual do projeto
|
|
13
|
+
- `docs/05-arquitetura/arquitetura.md` - Arquitetura do sistema
|
|
14
|
+
- Métricas atuais (se existirem)
|
|
15
|
+
|
|
16
|
+
Após gerar, salve o resultado em:
|
|
17
|
+
- `docs/07-performance/analise-performance.md`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Prompt Completo
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Atue como engenheiro de performance sênior.
|
|
25
|
+
|
|
26
|
+
## Contexto do Projeto
|
|
27
|
+
|
|
28
|
+
[COLE O CONTEÚDO DE docs/CONTEXTO.md]
|
|
29
|
+
|
|
30
|
+
## Arquitetura Atual
|
|
31
|
+
|
|
32
|
+
Arquitetura: [DESCREVA COMPONENTES - API, Frontend, Banco, Cache, etc]
|
|
33
|
+
Stack: [TECNOLOGIAS USADAS]
|
|
34
|
+
Banco de dados: [TIPO, TAMANHO ESTIMADO DOS DADOS]
|
|
35
|
+
Infraestrutura: [Cloud provider, containers, serverless, etc]
|
|
36
|
+
|
|
37
|
+
## Requisitos de Performance
|
|
38
|
+
|
|
39
|
+
Usuários esperados: [NÚMERO DE USUÁRIOS SIMULTÂNEOS]
|
|
40
|
+
Requests/segundo esperados: [NÚMERO]
|
|
41
|
+
SLA desejado: [LATÊNCIA p95, UPTIME %]
|
|
42
|
+
|
|
43
|
+
## Endpoints Críticos
|
|
44
|
+
|
|
45
|
+
[LISTE OS 3-5 ENDPOINTS MAIS IMPORTANTES]
|
|
46
|
+
- [Endpoint 1]: [Descrição e frequência de uso]
|
|
47
|
+
- [Endpoint 2]: [Descrição e frequência de uso]
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Sua Missão
|
|
52
|
+
|
|
53
|
+
Analise e proponha otimizações de performance e escalabilidade:
|
|
54
|
+
|
|
55
|
+
### 1. Análise de Gargalos
|
|
56
|
+
|
|
57
|
+
#### 1.1 Database
|
|
58
|
+
- Queries potencialmente problemáticas
|
|
59
|
+
- Necessidade de índices
|
|
60
|
+
- N+1 queries
|
|
61
|
+
- Connection pool sizing
|
|
62
|
+
- Locks e deadlocks potenciais
|
|
63
|
+
|
|
64
|
+
#### 1.2 Application
|
|
65
|
+
- CPU-bound vs I/O-bound operations
|
|
66
|
+
- Memory leaks potenciais
|
|
67
|
+
- Concurrency issues
|
|
68
|
+
- Bloqueios síncronos desnecessários
|
|
69
|
+
- Cold starts (se serverless)
|
|
70
|
+
|
|
71
|
+
#### 1.3 Network
|
|
72
|
+
- Latência entre serviços
|
|
73
|
+
- Payload sizes (compressão)
|
|
74
|
+
- Número de roundtrips
|
|
75
|
+
- DNS lookups
|
|
76
|
+
|
|
77
|
+
#### 1.4 Frontend (se aplicável)
|
|
78
|
+
- Bundle size
|
|
79
|
+
- Imagens e assets
|
|
80
|
+
- Render blocking resources
|
|
81
|
+
|
|
82
|
+
### 2. Estratégia de Caching
|
|
83
|
+
|
|
84
|
+
#### 2.1 O que cachear
|
|
85
|
+
- Dados que mudam raramente
|
|
86
|
+
- Queries frequentes e custosas
|
|
87
|
+
- Sessões e autenticação
|
|
88
|
+
- Respostas de APIs externas
|
|
89
|
+
|
|
90
|
+
#### 2.2 Onde cachear
|
|
91
|
+
| Camada | Tecnologia | Casos de Uso |
|
|
92
|
+
|--------|------------|--------------|
|
|
93
|
+
| Application | In-memory | Hot data |
|
|
94
|
+
| Distributed | Redis/Memcached | Sessões, queries |
|
|
95
|
+
| CDN | CloudFlare/CloudFront | Assets, páginas |
|
|
96
|
+
| Browser | Cache headers | Assets estáticos |
|
|
97
|
+
|
|
98
|
+
#### 2.3 Cache Policies
|
|
99
|
+
- TTL por tipo de dado
|
|
100
|
+
- Estratégia de invalidação (write-through, write-behind, cache-aside)
|
|
101
|
+
- Handling de cache miss thundering herd
|
|
102
|
+
|
|
103
|
+
### 3. Escalabilidade
|
|
104
|
+
|
|
105
|
+
#### 3.1 Horizontal Scaling (Scale Out)
|
|
106
|
+
- Quais componentes escalam horizontalmente
|
|
107
|
+
- Como manter estado (stateless vs stateful)
|
|
108
|
+
- Session affinity considerations
|
|
109
|
+
- Load balancing strategy
|
|
110
|
+
|
|
111
|
+
#### 3.2 Database Scaling
|
|
112
|
+
- Read replicas
|
|
113
|
+
- Sharding (se necessário)
|
|
114
|
+
- Connection pooling (PgBouncer, ProxySQL)
|
|
115
|
+
- Particionamento de tabelas
|
|
116
|
+
|
|
117
|
+
#### 3.3 Auto-scaling
|
|
118
|
+
| Métrica | Threshold | Ação |
|
|
119
|
+
|---------|-----------|------|
|
|
120
|
+
| CPU | > X% | Scale up |
|
|
121
|
+
| Memory | > Y% | Scale up |
|
|
122
|
+
| Queue depth | > Z | Add workers |
|
|
123
|
+
| Response time | > Wms | Scale out |
|
|
124
|
+
|
|
125
|
+
- Cooldown periods
|
|
126
|
+
- Minimum/Maximum instances
|
|
127
|
+
|
|
128
|
+
### 4. Performance Targets (SLOs)
|
|
129
|
+
|
|
130
|
+
| Endpoint/Fluxo | Latência p50 | Latência p95 | Throughput |
|
|
131
|
+
|----------------|--------------|--------------|------------|
|
|
132
|
+
| [Endpoint 1] | < Xms | < Yms | Z req/s |
|
|
133
|
+
| [Endpoint 2] | < Xms | < Yms | Z req/s |
|
|
134
|
+
|
|
135
|
+
### 5. Query Optimization
|
|
136
|
+
|
|
137
|
+
Para as queries mais críticas, sugira:
|
|
138
|
+
- Índices necessários
|
|
139
|
+
- Query rewrites
|
|
140
|
+
- Explain analyze interpretation
|
|
141
|
+
|
|
142
|
+
### 6. Plano de Load Test
|
|
143
|
+
|
|
144
|
+
- Cenários a testar (ramp-up, spike, soak)
|
|
145
|
+
- Ferramentas sugeridas (k6, Locust, Artillery)
|
|
146
|
+
- Métricas a monitorar durante teste
|
|
147
|
+
- Baseline vs target
|
|
148
|
+
|
|
149
|
+
### 7. Quick Wins vs Long Term
|
|
150
|
+
|
|
151
|
+
| Otimização | Esforço | Impacto | Prioridade |
|
|
152
|
+
|------------|---------|---------|------------|
|
|
153
|
+
| [Otimização 1] | Baixo | Alto | ⭐⭐⭐ |
|
|
154
|
+
| [Otimização 2] | Médio | Alto | ⭐⭐⭐ |
|
|
155
|
+
| [Otimização 3] | Alto | Médio | ⭐⭐ |
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Exemplo de Uso
|
|
161
|
+
|
|
162
|
+
```text
|
|
163
|
+
Atue como engenheiro de performance sênior.
|
|
164
|
+
|
|
165
|
+
## Contexto do Projeto
|
|
166
|
+
|
|
167
|
+
Marketplace de serviços locais com agendamento online.
|
|
168
|
+
|
|
169
|
+
## Arquitetura Atual
|
|
170
|
+
|
|
171
|
+
Arquitetura:
|
|
172
|
+
- Frontend: Next.js na Vercel
|
|
173
|
+
- API: NestJS em containers no ECS
|
|
174
|
+
- Banco: PostgreSQL RDS (db.t3.medium)
|
|
175
|
+
- Cache: Nenhum atualmente
|
|
176
|
+
|
|
177
|
+
Stack: Node.js 18, TypeScript, Prisma ORM
|
|
178
|
+
Banco de dados: PostgreSQL 15, ~50GB de dados esperados
|
|
179
|
+
Infraestrutura: AWS (ECS, RDS, ALB)
|
|
180
|
+
|
|
181
|
+
## Requisitos de Performance
|
|
182
|
+
|
|
183
|
+
Usuários esperados: 1000 simultâneos no pico
|
|
184
|
+
Requests/segundo esperados: 200
|
|
185
|
+
SLA desejado: p95 < 300ms, 99.9% uptime
|
|
186
|
+
|
|
187
|
+
## Endpoints Críticos
|
|
188
|
+
|
|
189
|
+
- GET /api/profissionais?cidade=X: Listagem de prestadores (~40% do tráfego)
|
|
190
|
+
- POST /api/agendamentos: Criação de agendamento (~15% do tráfego)
|
|
191
|
+
- GET /api/agenda/:id/disponibilidade: Horários livres (~30% do tráfego)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Resposta Esperada
|
|
197
|
+
|
|
198
|
+
### Gargalos Identificados
|
|
199
|
+
|
|
200
|
+
1. **Query de listagem** - Falta índice em `cidade` + `ativo`
|
|
201
|
+
2. **Disponibilidade** - Consulta completa para calcular, deveria ser pré-computada
|
|
202
|
+
3. **Sessões** - Stored in DB, should be Redis
|
|
203
|
+
4. **Sem cache** - Queries repetidas a cada request
|
|
204
|
+
|
|
205
|
+
### Cache Strategy
|
|
206
|
+
|
|
207
|
+
| Dado | Onde | TTL | Invalidação |
|
|
208
|
+
|------|------|-----|-------------|
|
|
209
|
+
| Lista de profissionais | Redis | 5min | On update |
|
|
210
|
+
| Disponibilidade | Redis | 1min | On agendamento |
|
|
211
|
+
| Sessão | Redis | 1h | On logout |
|
|
212
|
+
| Assets | CDN | 1 semana | Deploy hash |
|
|
213
|
+
|
|
214
|
+
### Scaling
|
|
215
|
+
|
|
216
|
+
- **API**: 2-10 pods, HPA on CPU > 70%
|
|
217
|
+
- **Database**: 1 primary + 2 read replicas
|
|
218
|
+
- **Redis**: ElastiCache cluster mode
|
|
219
|
+
|
|
220
|
+
### Quick Wins
|
|
221
|
+
|
|
222
|
+
| Otimização | Esforço | Impacto |
|
|
223
|
+
|------------|---------|---------|
|
|
224
|
+
| Adicionar Redis para sessões | 2h | Alto |
|
|
225
|
+
| Índice em cidade+ativo | 30min | Alto |
|
|
226
|
+
| Cache de listagem | 4h | Alto |
|
|
227
|
+
| Read replica para queries | 2h | Médio |
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Checklist Pós-Geração
|
|
232
|
+
|
|
233
|
+
- [ ] Gargalos identificados por camada (DB, App, Network)
|
|
234
|
+
- [ ] Estratégia de cache definida (o quê, onde, TTL)
|
|
235
|
+
- [ ] Índices sugeridos para queries críticas
|
|
236
|
+
- [ ] Thresholds de auto-scaling definidos
|
|
237
|
+
- [ ] SLOs documentados por endpoint
|
|
238
|
+
- [ ] Quick wins priorizados
|
|
239
|
+
- [ ] Plano de load test sugerido
|
|
240
|
+
- [ ] Salvar em `docs/07-performance/analise-performance.md`
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Atue como engenheiro de performance sênior.
|
|
2
|
+
|
|
3
|
+
Sistema:
|
|
4
|
+
- Arquitetura: [DESCREVA]
|
|
5
|
+
- Stack: [TECNOLOGIAS]
|
|
6
|
+
- Banco: [TIPO E TAMANHO]
|
|
7
|
+
- Usuários esperados: [NÚMERO]
|
|
8
|
+
- Requests/segundo esperados: [NÚMERO]
|
|
9
|
+
|
|
10
|
+
Analise e proponha otimizações de performance e escalabilidade:
|
|
11
|
+
|
|
12
|
+
## 1. Análise de Gargalos
|
|
13
|
+
|
|
14
|
+
### 1.1 Database
|
|
15
|
+
- Queries potencialmente problemáticas
|
|
16
|
+
- Necessidade de índices
|
|
17
|
+
- N+1 queries
|
|
18
|
+
- Connection pool sizing
|
|
19
|
+
|
|
20
|
+
### 1.2 Application
|
|
21
|
+
- CPU-bound vs I/O-bound
|
|
22
|
+
- Memory leaks potenciais
|
|
23
|
+
- Concurrency issues
|
|
24
|
+
|
|
25
|
+
### 1.3 Network
|
|
26
|
+
- Latência entre serviços
|
|
27
|
+
- Payload sizes
|
|
28
|
+
- Número de roundtrips
|
|
29
|
+
|
|
30
|
+
## 2. Estratégia de Caching
|
|
31
|
+
|
|
32
|
+
### 2.1 O que cachear
|
|
33
|
+
- Dados que mudam raramente
|
|
34
|
+
- Queries frequentes
|
|
35
|
+
- Sessões/auth
|
|
36
|
+
|
|
37
|
+
### 2.2 Onde cachear
|
|
38
|
+
- Application level
|
|
39
|
+
- Redis/Memcached
|
|
40
|
+
- CDN (assets estáticos)
|
|
41
|
+
|
|
42
|
+
### 2.3 TTL e Invalidação
|
|
43
|
+
- Tempo de expiração por tipo
|
|
44
|
+
- Estratégia de invalidação
|
|
45
|
+
|
|
46
|
+
## 3. Escalabilidade
|
|
47
|
+
|
|
48
|
+
### 3.1 Horizontal Scaling
|
|
49
|
+
- Quais componentes escalam
|
|
50
|
+
- Como manter estado (stateless)
|
|
51
|
+
- Load balancing
|
|
52
|
+
|
|
53
|
+
### 3.2 Database Scaling
|
|
54
|
+
- Read replicas
|
|
55
|
+
- Sharding (se necessário)
|
|
56
|
+
- Connection pooling
|
|
57
|
+
|
|
58
|
+
### 3.3 Auto-scaling
|
|
59
|
+
- Métricas de trigger
|
|
60
|
+
- Thresholds
|
|
61
|
+
- Cooldown periods
|
|
62
|
+
|
|
63
|
+
## 4. Performance Targets (SLOs)
|
|
64
|
+
|
|
65
|
+
| Endpoint/Fluxo | Latência p95 | Throughput |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| [Endpoint 1] | < Xms | Y req/s |
|
|
68
|
+
|
|
69
|
+
## 5. Plano de Load Test
|
|
70
|
+
|
|
71
|
+
- Cenários a testar
|
|
72
|
+
- Ferramentas sugeridas
|
|
73
|
+
- Métricas a monitorar
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Resposta Esperada (Resumo)
|
|
78
|
+
|
|
79
|
+
### Gargalos Identificados
|
|
80
|
+
1. **Query de listagem** - Falta índice em `created_at`
|
|
81
|
+
2. **Uploads** - Bloqueiam thread principal
|
|
82
|
+
3. **Sessões** - Stored in DB, should be Redis
|
|
83
|
+
|
|
84
|
+
### Cache Strategy
|
|
85
|
+
| Dado | Onde | TTL | Invalidação |
|
|
86
|
+
|---|---|---|---|
|
|
87
|
+
| Lista de produtos | Redis | 5min | On update |
|
|
88
|
+
| Sessão | Redis | 1h | On logout |
|
|
89
|
+
| Assets | CDN | 1d | Deploy |
|
|
90
|
+
|
|
91
|
+
### Scaling
|
|
92
|
+
- API: 2-10 pods, HPA on CPU > 70%
|
|
93
|
+
- Database: 1 primary + 2 read replicas
|
|
94
|
+
- Redis: Cluster mode for high availability
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Prompt: Estratégias de Cache
|
|
2
|
+
|
|
3
|
+
> **Prioridade**: 🟡 MÉDIA
|
|
4
|
+
> **Aplicável a**: APIs com alta carga, dados lidos frequentemente
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Prompt Base: Projetar Cache
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
Atue como engenheiro de performance.
|
|
12
|
+
|
|
13
|
+
Tenho um sistema com:
|
|
14
|
+
- Stack: [ex. Node.js + PostgreSQL + Redis]
|
|
15
|
+
- Tráfego: [ex. 1000 req/s, 80% leitura, 20% escrita]
|
|
16
|
+
- Dados: [ex. catálogo de 50k produtos, users sessions, configurações]
|
|
17
|
+
- Latência atual: [ex. p95 = 500ms]
|
|
18
|
+
- Meta: [ex. p95 < 100ms]
|
|
19
|
+
|
|
20
|
+
Para cada tipo de dado, recomende:
|
|
21
|
+
|
|
22
|
+
1. **Padrão de Cache**
|
|
23
|
+
- Cache-aside, write-through, read-through, ou combinação
|
|
24
|
+
- Justificativa
|
|
25
|
+
|
|
26
|
+
2. **TTL e Invalidação**
|
|
27
|
+
- Tempo de vida sugerido
|
|
28
|
+
- Estratégia de invalidação (explícita, event-driven, TTL puro)
|
|
29
|
+
|
|
30
|
+
3. **Estrutura no Redis**
|
|
31
|
+
- Tipo de dado Redis (string, hash, set, sorted set)
|
|
32
|
+
- Naming convention para keys
|
|
33
|
+
- Exemplos de comandos
|
|
34
|
+
|
|
35
|
+
4. **Código de Implementação**
|
|
36
|
+
- Cache layer reutilizável
|
|
37
|
+
- Decorators ou helpers
|
|
38
|
+
- Tratamento de cache miss e falha do Redis
|
|
39
|
+
|
|
40
|
+
5. **Métricas**
|
|
41
|
+
- O que monitorar
|
|
42
|
+
- Alertas recomendados
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Prompt: Cache para Endpoint Específico
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
Tenho este endpoint que é lento:
|
|
51
|
+
[COLE CÓDIGO DO ENDPOINT]
|
|
52
|
+
|
|
53
|
+
Métricas atuais:
|
|
54
|
+
- Latência: [ex. p95 = 800ms]
|
|
55
|
+
- Chamadas/dia: [ex. 100k]
|
|
56
|
+
- Taxa de mudança dos dados: [ex. atualizam 1x por hora]
|
|
57
|
+
|
|
58
|
+
Gere:
|
|
59
|
+
1. Análise do que pode ser cacheado
|
|
60
|
+
2. Implementação com cache-aside
|
|
61
|
+
3. Estratégia de invalidação
|
|
62
|
+
4. Código refatorado
|
|
63
|
+
5. Testes para validar cache hit/miss
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Prompt: Invalidação de Cache
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Tenho o seguinte cenário de cache:
|
|
72
|
+
- Entidades: [ex. User, Order, Product]
|
|
73
|
+
- Relacionamentos: [ex. User tem Orders, Order tem Products]
|
|
74
|
+
- Caches atuais: [ex. user:123, user:123:orders, product:456]
|
|
75
|
+
|
|
76
|
+
Quando um User é atualizado, preciso invalidar: [DESCREVA]
|
|
77
|
+
|
|
78
|
+
Projete uma estratégia de invalidação que:
|
|
79
|
+
1. Garanta consistência
|
|
80
|
+
2. Minimize invalidações desnecessárias
|
|
81
|
+
3. Use eventos/pub-sub se benéfico
|
|
82
|
+
4. Documente quais eventos afetam quais caches
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Prompt: Cache Multi-Layer
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
Quero implementar cache em múltiplas camadas:
|
|
91
|
+
1. Browser/CDN (edge)
|
|
92
|
+
2. Application (in-memory)
|
|
93
|
+
3. Distributed (Redis)
|
|
94
|
+
4. Database (query cache)
|
|
95
|
+
|
|
96
|
+
Para estes endpoints:
|
|
97
|
+
[LISTE ENDPOINTS E CARACTERÍSTICAS]
|
|
98
|
+
|
|
99
|
+
Gere:
|
|
100
|
+
1. Estratégia por camada
|
|
101
|
+
2. Headers HTTP para cache de browser/CDN
|
|
102
|
+
3. Código para cache in-memory + Redis
|
|
103
|
+
4. Quando usar cada camada
|
|
104
|
+
5. Como invalidar coordenadamente
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Prompt: Resolver Cache Stampede
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
Estou tendo problemas de cache stampede:
|
|
113
|
+
- Cenário: [ex. muitos requests simultâneos no cache miss]
|
|
114
|
+
- Impacto: [ex. banco sobrecarrega, timeout em cascata]
|
|
115
|
+
|
|
116
|
+
Stack: [DESCREVA]
|
|
117
|
+
|
|
118
|
+
Implemente:
|
|
119
|
+
1. Lock de requisição única (singleflight)
|
|
120
|
+
2. Probabilistic early expiration
|
|
121
|
+
3. Fallback para stale data durante refresh
|
|
122
|
+
4. Código completo com testes
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Exemplo: Cache Layer Genérico
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// src/cache/cacheLayer.ts
|
|
131
|
+
import Redis from 'ioredis';
|
|
132
|
+
|
|
133
|
+
interface CacheOptions {
|
|
134
|
+
ttl?: number; // segundos
|
|
135
|
+
staleWhileRevalidate?: boolean;
|
|
136
|
+
lockTimeout?: number; // ms
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
class CacheLayer {
|
|
140
|
+
private redis: Redis;
|
|
141
|
+
private locks = new Map<string, Promise<any>>();
|
|
142
|
+
|
|
143
|
+
constructor(redis: Redis) {
|
|
144
|
+
this.redis = redis;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async get<T>(
|
|
148
|
+
key: string,
|
|
149
|
+
fetcher: () => Promise<T>,
|
|
150
|
+
options: CacheOptions = {}
|
|
151
|
+
): Promise<T> {
|
|
152
|
+
const { ttl = 3600, staleWhileRevalidate = false, lockTimeout = 5000 } = options;
|
|
153
|
+
|
|
154
|
+
// 1. Tentar cache
|
|
155
|
+
const cached = await this.redis.get(key);
|
|
156
|
+
if (cached) {
|
|
157
|
+
const data = JSON.parse(cached);
|
|
158
|
+
|
|
159
|
+
// SWR: retornar stale e atualizar em background
|
|
160
|
+
if (staleWhileRevalidate && this.isNearExpiry(key)) {
|
|
161
|
+
this.refreshInBackground(key, fetcher, ttl);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return data;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 2. Prevenir stampede com lock
|
|
168
|
+
if (this.locks.has(key)) {
|
|
169
|
+
return this.locks.get(key);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// 3. Buscar com timeout
|
|
173
|
+
const promise = this.fetchWithLock(key, fetcher, ttl, lockTimeout);
|
|
174
|
+
this.locks.set(key, promise);
|
|
175
|
+
|
|
176
|
+
try {
|
|
177
|
+
return await promise;
|
|
178
|
+
} finally {
|
|
179
|
+
this.locks.delete(key);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async invalidate(key: string): Promise<void> {
|
|
184
|
+
await this.redis.del(key);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async invalidatePattern(pattern: string): Promise<void> {
|
|
188
|
+
const keys = await this.redis.keys(pattern);
|
|
189
|
+
if (keys.length > 0) {
|
|
190
|
+
await this.redis.del(...keys);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private async fetchWithLock<T>(
|
|
195
|
+
key: string,
|
|
196
|
+
fetcher: () => Promise<T>,
|
|
197
|
+
ttl: number,
|
|
198
|
+
timeout: number
|
|
199
|
+
): Promise<T> {
|
|
200
|
+
const lockKey = `lock:${key}`;
|
|
201
|
+
const lockAcquired = await this.redis.set(lockKey, '1', 'PX', timeout, 'NX');
|
|
202
|
+
|
|
203
|
+
try {
|
|
204
|
+
const data = await fetcher();
|
|
205
|
+
await this.redis.setex(key, ttl, JSON.stringify(data));
|
|
206
|
+
return data;
|
|
207
|
+
} finally {
|
|
208
|
+
await this.redis.del(lockKey);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
private async isNearExpiry(key: string): Promise<boolean> {
|
|
213
|
+
const ttl = await this.redis.ttl(key);
|
|
214
|
+
return ttl < 60; // último minuto
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
private async refreshInBackground<T>(
|
|
218
|
+
key: string,
|
|
219
|
+
fetcher: () => Promise<T>,
|
|
220
|
+
ttl: number
|
|
221
|
+
): Promise<void> {
|
|
222
|
+
// Fire and forget
|
|
223
|
+
fetcher()
|
|
224
|
+
.then(data => this.redis.setex(key, ttl, JSON.stringify(data)))
|
|
225
|
+
.catch(err => console.error(`Background refresh failed for ${key}:`, err));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Uso
|
|
230
|
+
const cache = new CacheLayer(redis);
|
|
231
|
+
|
|
232
|
+
const user = await cache.get(
|
|
233
|
+
`user:${userId}`,
|
|
234
|
+
() => db.users.findById(userId),
|
|
235
|
+
{ ttl: 300, staleWhileRevalidate: true }
|
|
236
|
+
);
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Checklist
|
|
242
|
+
|
|
243
|
+
- [ ] Padrão de cache escolhido para cada tipo de dado
|
|
244
|
+
- [ ] TTLs definidos e documentados
|
|
245
|
+
- [ ] Invalidação implementada para operações de escrita
|
|
246
|
+
- [ ] Proteção contra stampede
|
|
247
|
+
- [ ] Monitoramento de hit rate
|
|
248
|
+
- [ ] Fallback se Redis indisponível
|
|
249
|
+
- [ ] Testes de cache hit, miss, e invalidação
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Referências
|
|
254
|
+
|
|
255
|
+
Consulte: [Guia de Estratégias de Cache](../03-guias/Guia%20de%20Estratégias%20de%20Cache.md)
|