14-16 Mar 2026
Voltar ao catalogo

ProcessarOfertasWorker sem limite de concorrencia entre tenants

SCALE-C2
CriticalAchado ConfirmadoEscalabilidadeRodada 1

Descricao

Task.WhenAll(tasks) sem limite, onde tasks cresce linearmente com numero de tenants. Timer.Period = 1 milissegundo.

Evidencia
`ProcessarOfertasWorker.cs` linhas 57-71 — `Task.WhenAll(tasks)` com `Timer.Period = 1`.
Impacto Tecnico

N threads simultaneas fazem requests Galileu, abrem conexoes PostgreSQL e competem por locks Redis. Degradacao exponencial com crescimento de tenants.

Impacto de Negocio

Com 150 tenants (meta), sistema pode ficar indisponivel por exaustao de recursos.

Recomendacao

Implementar SemaphoreSlim com limite configuravel (max 5 tenants). Considerar Hangfire ou ABP Background Jobs.

Arquivos Afetados

aspnet-core/src/cargo_fleet.HttpApi.Host/BackgroundJobs/ProcessarOfertasWorker.cs

Acoes Relacionadas

{
  "id": "SCALE-C2",
  "title": "ProcessarOfertasWorker sem limite de concorrencia entre tenants",
  "severity": "Critical",
  "type": "achado confirmado",
  "category": "scalability",
  "description": "`Task.WhenAll(tasks)` sem limite, onde tasks cresce linearmente com numero de tenants. `Timer.Period = 1` milissegundo.",
  "evidence": "`ProcessarOfertasWorker.cs` linhas 57-71 — `Task.WhenAll(tasks)` com `Timer.Period = 1`.",
  "technicalImpact": "N threads simultaneas fazem requests Galileu, abrem conexoes PostgreSQL e competem por locks Redis. Degradacao exponencial com crescimento de tenants.",
  "businessImpact": "Com 150 tenants (meta), sistema pode ficar indisponivel por exaustao de recursos.",
  "recommendation": "Implementar `SemaphoreSlim` com limite configuravel (max 5 tenants). Considerar Hangfire ou ABP Background Jobs.",
  "files": [
    "aspnet-core/src/cargo_fleet.HttpApi.Host/BackgroundJobs/ProcessarOfertasWorker.cs"
  ],
  "pass": 1,
  "relatedActions": [
    "ACT-3.6"
  ]
}