🟡 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)
🟡 Médio | Performance/Resiliência | Compaction/API
Problema
CompactionBackpressuremonitora a taxa de escrita vs compactação e calcula delays, mas não há integração com oRateLimiterStateda 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
Evidência
src/infra/backpressure.rs: implementação completa com EMA (exponential moving average)src/api/rate_limiter.rs:RateLimiterStatecommax_requests_per_minuteatualizávelFluxo de correção recomendado
Esforço: Médio (6h)