MDH GROUP · BLOG

Escalonamento de PHP Worker para Affilentra self‑hosted: Filas, Backpressure e Limites de Taxa para altos volumes de tracking

O tracking de conversões em redes de afiliados gera picos de carga: lançamentos de campanhas, picos de vendas ou promoções aumentam temporariamente as taxas de requests. Para instalações self‑hosted do Affilentra isso significa: eventos de tracking devem ser processados de forma fiável, auditável e sem perda de dados

← Todos os artigos

Escalonamento de PHP Worker para Affilentra self‑hosted: Filas, Backpressure e Limites de Taxa para altos volumes de tracking

Introdução

O tracking de conversões em redes de afiliados gera picos de carga: lançamentos de campanhas, picos de vendas ou promoções aumentam temporariamente as taxas de requests. Para instalações self‑hosted do Affilentra isso significa: eventos de tracking devem ser processados de forma fiável, auditável e sem perda de dados. Este artigo descreve práticas recomendadas concretas para a construção e operação de filas de workers PHP, mecanismos de backpressure e limites de taxa — para que comerciantes, operadores e parceiros trabalhem de forma estável.

Visão geral da arquitetura: Papel do RabbitMQ e do Redis

Escolha as ferramentas certas para a tarefa:

  • RabbitMQ: Bem adequado para fluxos de trabalho duradouros e ordenados com roteamento, entrega best‑effort, acknowledgements e dead‑letter‑queues. Ideal para eventos de conversão que devem ser persistidos e processados em sequência.
  • Redis: Rápido, com menor latência, adequado para contadores, limites de taxa tipo token‑bucket, listas efémeras ou filas leves (Stream/Lists). Funciona bem para mecanismos de fairness e contadores rápidos que coordenam várias instâncias.

Em deployments do Affilentra recomenda‑se uma arquitetura híbrida: RabbitMQ para o caminho principal de eventos, Redis para limitação de taxa, contadores e informações de controlo rápidas.

Design de filas para PHP‑Worker

Projete as filas de modo que os workers PHP funcionem de forma estável, monitorada e previsível:

  • Passos de processamento curtos: Cada worker processa um passo pequeno e bem delimitado (validação, atribuição, cálculo de comissões, persistência). Evite tasks monolíticas.
  • Acknowledgements: Use ACK/NACK explícitos. ACK apenas após persistência bem‑sucedida e validação de negócio; em caso de erro, NACK com backoff ou encaminhamento para uma dead‑letter‑queue.
  • Prefetch/Concorrência: Defina limites de prefetch por processo worker para evitar que um worker assuma muitas mensagens simultaneamente. Ajuste conforme o perfil de memória do PHP e os limites de conexões da base de dados.
  • Worker stateless: Mantenha os workers o mais stateless possível. Estado na BD/Redis, não no processo. Isso simplifica reinícios e escalonamento horizontal.
  • Supervisor & ciclo de vida: Utilize ferramentas de supervisor (systemd, supervisord, orquestrador de containers) para monitorização de processos. Planeie reinícios regulares para libertar memória (graceful shutdown).

Estratégias de Backpressure: controlar picos de carga

Backpressure evita que o sistema entre em colapso durante picos de carga. Mecanismos importantes:

  • Monitorização do comprimento das filas: Meça não apenas a taxa de entrada, mas também a profundidade das filas e o tempo médio de processamento. Gere alertas quando a latência ou a profundidade crescerem de forma significativa.
  • Throttling de produtores: Quando a profundidade da fila atingir limiares críticos, reduza a velocidade dos produtores. Isso pode acontecer ao nível de entrada HTTP (retornar 429) ou recusando temporariamente submissões internas.
  • Shedding (descarte de carga): Defina prioridades claras. Comerciais/parceiros de alta prioridade recebem processamento preferencial; eventos de prioridade mais baixa podem ser rejeitados ou movidos para uma fila separada em modo best‑effort.
  • Escalonamento adaptativo de consumers: Escalone os workers horizontalmente quando houver profundidade de fila persistente. Como o Affilentra é self‑hosted, isso pode ser feito via script de autoscaling, escalador de containers ou ação manual em playbook.
  • Degradação graciosa: Em caso de sobrecarga, reduza tarefas auxiliares não críticas (por ex., logging detalhado, notificações em tempo real) e adie‑as para jobs em lote.

Limites de taxa & Equidade

Os limites de taxa protegem os recursos do backend e criam equidade entre comerciantes e parceiros:

  • Limites granulares: Implemente limites em vários níveis: global, por comerciante, por parceiro (Publisher/Creator) e possivelmente por campanha. Redis é adequado como instância central de contagem.
  • Token‑Bucket / Leaky‑Bucket: Utilize algoritmos consolidados. Token‑Buckets são fáceis de implementar e adequados para tráfego com rajadas (bursty) com uma taxa sustentada definida.
  • Sinais de backoff: Comunique a redução de forma ativa aos parceiros: HTTP 429 com Retry‑After ou via headers de Tracking‑Response. Assim, os parceiros podem reexecutar inteligentemente em vez de aumentar o tráfego cegamente.
  • Fair‑Queuing: Implemente sub‑filas separadas por parceiro/grupos de comerciantes e escolha um escalonador (Round‑Robin com ponderação), para que promotores individuais não monopolizem a capacidade.

Operação, Monitorização e Tratamento de Erros

Operar de forma estável requer métricas, alertas e caminhos de erro claros:

  • Métricas: Recolha a Incoming‑Rate, Queue‑Length, Processing‑Latency, Success/Failure‑Rate, Retries, DLQ‑Rate, DB‑Connection‑Usage e memória dos Workers. Visualize tudo em dashboards.
  • Alertas: Alerta baseado em tendências em vez de valores pontuais — por exemplo, aumento sustentado da profundidade da fila ou subida nas taxas de retry.
  • Dead‑Letter‑Queues: Mova todos os eventos que falham repetidamente para uma DLQ com informações de diagnóstico claras. Disponibilize processos para pós‑processamento manual ou jobs de reprocessamento.
  • Idempotência: Garanta que o processamento de conversões é idempotente. Eventos duplicados devem ser identificáveis para que retries não provoquem atribuições erradas ou comissões duplicadas.
  • Limites transaccionais: Separe a persistência rápida e crítica do fluxo de trabalho secundário pesado. Por exemplo, escritas curtas na BD para validação e faturação complexa como job assíncrono subsequente.

Práticas de deploy

Deploys e gestão de configuração influenciam directamente a escalabilidade:

  • Configuração em Env/Config‑Management: Mantenha Prefetch, Worker‑Count, Retry‑Policy e Rate‑Limits configuráveis sem alterar código.
  • Blue/Green & Rolling Updates: Execute rolling‑updates nos workers para evitar downtime e processamento duplicado. Os workers devem completar tarefas em curso (graceful stop).
  • Load‑Tests: Teste cenários de pico com payloads realistas e mistura de parceiros. Meça como as regras de backpressure reagem e ajuste os thresholds.
  • Documentação & Playbooks: Defina runbooks para sobrecarga, processamento de DLQ e expansão de capacidade. As funções (operador de software, comerciante, parceiro) devem ter tarefas e caminhos de contacto claros.

Como a Affilentra beneficia disto

A Affilentra oferece tracking baseado em funções e pagamentos transparentes. Com os padrões de fila e backpressure descritos acima, os operadores controlam picos de carga, os comerciantes mantêm condições seguras e os parceiros têm links de tracking fiáveis e históricos de pagamentos auditáveis. A opção self‑hosted permite que o operador configure infra‑estrutura e limites conforme as suas necessidades, sem partilha de receita com o operador da plataforma.

Conclusão e recomendações

Para um processamento de conversões estável: separar claramente componentes, usar de forma híbrida RabbitMQ e Redis, garantir processamento idempotente, aplicar limites de taxa granulares e mecanismos automatizados de backpressure. Monitorização, DLQs e playbooks bem documentados fazem a diferença entre operação reativa a incidentes e escalabilidade planeada.

Se usar ou avaliar o Affilentra, comece pragmaticamente: implemente uma topologia simples de filas, adicione limites de taxa baseados em Redis e teste cenários de picos. Escale workers e regras de forma iterativa com base nas métricas medidas.

Começar

Próximo passo

Experimentar o Affilentra

Plataforma unificada que integra de forma transparente disponibilização de produto, tracking, validação de conversões, cálculo de comissões e pagamentos ao longo de funções claramente separadas; opção de instalação auto‑hospedada com licença perpétua sem participação nas receitas; os lojistas mantêm controlo sobre produtos, condições e materiais promocionais; os parceiros recebem links de tracking pessoais e um histórico de pagamentos auditável.

Começar