flow-guard 0.1.0

High-performance adaptive concurrency control and backpressure for Rust services.
Documentation

🛡️ FlowGuardNext-Generation Adaptive Concurrency Control & Backpressure for RustCriado e Desenvolvido por: Cleiton Augusto Correa BezerraO FlowGuard é uma biblioteca de próxima geração para controle de carga. Ao contrário de limitadores de taxa (rate limiters) estáticos, o FlowGuard utiliza algoritmos de controle de congestionamento (TCP Vegas) para ajustar dinamicamente os limites de carga baseando-se na latência real e na saúde do sistema.🚀 A Inovação: Por que o FlowGuard?Configurar um limite fixo (ex: "máximo 100 conexões") é uma armadilha em sistemas modernos:Limite muito alto: O sistema entra em colapso (Cascading Failure) antes de atingir o limite.Limite muito baixo: Desperdício de hardware e recusa de tráfego legítimo.O FlowGuard resolve isso com:Auto-tuning: Observa o RTT (Round Trip Time). Se a latência sobe, ele reduz a concorrência. Se o sistema está rápido, ele expande a capacidade.Resiliência Nativa: Protege bancos de dados e serviços externos de sobrecarga.Zero-Cost Abstractions: Construído com operações atômicas em Rust para performance extrema.🛠️ InstalaçãoAdicione ao seu Cargo.toml:Ini, TOML[dependencies]

Versão Core

flow-guard = "0.1.0"

Com suporte total a Axum 0.8 / Tower

flow-guard = { version = "0.1.0", features = ["axum", "tower"] } 💻 Exemplo de Uso (Axum 0.8)O FlowGuard é plug-and-play e utiliza o padrão moderno de middlewares do Rust.Rustuse axum::{routing::get, Router, error_handling::HandleErrorLayer}; use flow_guard::{FlowGuardLayer, VegasStrategy, FlowError}; use tower::ServiceBuilder;

#[tokio::main] async fn main() { // Inicializa: (Limite Inicial, Mínimo, Máximo) let strategy = VegasStrategy::new(10, 2, 100); let flow_layer = FlowGuardLayer::new(strategy);

let app = Router::new()
    .route("/api/data", get(|| async { "Hello from Protected API!" }))
    .layer(
        ServiceBuilder::new()
            .layer(HandleErrorLayer::new(|err: FlowError<std::convert::Infallible>| async move {
                // Retorna 503 Service Unavailable automaticamente se houver sobrecarga
                axum::response::IntoResponse::into_response(err)
            }))
            .layer(flow_layer)
    );

let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();

} 📊 O Algoritmo Vegas (The Math)A estratégia Vegas ajusta o limite $L$ baseado na diferença entre o RTT atual e o RTT base:$$diff = L \times \left(1 - \frac{RTT_{base}}{RTT_{actual}}\right)$$Se $diff < \alpha$: O sistema está ocioso. Aumentamos o limite para aproveitar os recursos.Se $diff > \beta$: Congestionamento detectado! Reduzimos o limite proativamente antes do crash.💼 Visão de Futuro (Versão Enterprise)O FlowGuard é um projeto Open-Core. Enquanto a versão comunitária foca em instâncias isoladas, a nossa versão Enterprise foca em:🌐 Distributed Flow Control: Controle de fluxo global sincronizado via Redis/NATS para clusters Kubernetes.📈 Observability Dashboard: Painéis em tempo real (Prometheus/Grafana) para visualizar o estrangulamento de tráfego.⚡ Dynamic Thresholds: Alteração de políticas de segurança em tempo real via Control Plane.🤝 Contato & ContribuiçõesContribuições são o coração da comunidade Rust!Autor: Cleiton Augusto Correa BezerraEmail: augusto.cleiton@gmail.comLinkedIn: cleiton-augusto-b619435b📄 LicençaEste projeto está licenciado sob a Licença MIT.