Skip to content

BACKPRESSURE-001: CompactionBackpressure calcula delays mas não reduz rate limit da API #360

@ElioNeto

Description

@ElioNeto

🟡 Médio | Performance/Resiliência | Compaction/API

Problema

CompactionBackpressure monitora a taxa de escrita vs compactação e calcula delays, mas não há integração com o RateLimiterState da API. Quando a compactação não consegue acompanhar, o MemTable enche e writes são bloqueados abruptamente (write stall), causando picos de latência em vez de degradação gradual.

Impacto

  • Write stalls abruptos com picos de latência de 100ms+
  • Experiência do usuário inconsistente
  • Sem degradação graceful: 0 → 100% bloqueio em vez de redução gradual

Evidência

  • src/infra/backpressure.rs: implementação completa com EMA (exponential moving average)
  • src/api/rate_limiter.rs: RateLimiterState com max_requests_per_minute atualizável
  • Nenhuma conexão entre os dois

Fluxo de correção recomendado

// Em start_server ou thread de monitoramento:
let bp = Arc::new(CompactionBackpressure::default());
let rate_limiter = Arc::new(RateLimiterState::new(100));

// Thread de ajuste dinâmico:
tokio::spawn(async move {
    loop {
        tokio::time::sleep(Duration::from_secs(5)).await;
        if bp.should_backpressure() {
            let current = rate_limiter.max_requests_per_minute;
            let reduced = (current as f64 * 0.8) as usize; // reduz 20%
            rate_limiter.set_max_requests_per_minute(reduced.max(10));
            tracing::warn!("Backpressure: reducing rate limit to {} req/min", reduced);
        } else {
            // Recuperar gradualmente
            let current = rate_limiter.max_requests_per_minute;
            if current < 100 {
                rate_limiter.set_max_requests_per_minute((current + 10).min(100));
            }
        }
    }
});

Esforço: Médio (6h)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions