Pular para o conteúdo principal

Processamento em Lote e Arquitetura Assíncrona

Visão Geral

O sistema Grocers utiliza uma arquitetura assíncrona baseada em Azure Service Bus para processar operações em lote. Esta abordagem permite:

  • Processamento eficiente de grandes volumes de dados
  • Melhor escalabilidade e resiliência
  • Feedback em tempo real através de webhooks
  • Rastreabilidade completa das operações

Arquitetura

Componentes Principais

  1. API de Integração

    • Recebe requisições em lote
    • Valida dados de entrada
    • Gera identificador único (operationId)
    • Envia mensagens para filas
  2. Azure Service Bus

    • Gerencia filas de mensagens
    • Garante entrega das mensagens
    • Suporta diferentes tipos de filas:
      • Transaction Queue: Para operações de negócio
      • Webhook Queue: Para notificações
  3. Processadores de Mensagens

    • Processam mensagens das filas
    • Executam operações no banco de dados
    • Geram eventos de notificação
  4. Sistema de Notificação

    • Envia atualizações via webhook
    • Notifica sucesso/erro de operações
    • Permite rastreamento em tempo real

Fluxo de Processamento

sequenceDiagram
participant Cliente
participant API
participant ServiceBus
participant Processor
participant Webhook

Cliente->>API: POST /v1/batch/{entity}
API->>Cliente: 200 OK (operationId)
API->>ServiceBus: Envia mensagens
ServiceBus->>Processor: Processa mensagens
Processor->>Webhook: Notifica progresso
Webhook->>Cliente: Envia notificação
  1. Recebimento da Requisição

    • Cliente envia lote de dados
    • API valida formato e autenticação
    • Gera operationId único
  2. Enfileiramento

    • Dados são convertidos em mensagens
    • Mensagens são enviadas para Azure Service Bus
    • Resposta imediata com operationId
  3. Processamento

    • Mensagens são processadas assincronamente
    • Operações são executadas em ordem
    • Estado é mantido consistente
  4. Notificação

    • Webhook é notificado de cada operação
    • Cliente recebe atualizações em tempo real
    • Erros são reportados detalhadamente

Endpoints Disponíveis

Os seguintes endpoints suportam processamento em lote:

Rastreamento de Operações

Cada operação em lote recebe um operationId único que permite:

  • Rastrear progresso da operação
  • Identificar mensagens relacionadas
  • Correlacionar notificações
  • Investigar erros

Exemplo de Ciclo de Vida

  1. Início
{
"operationId": "54d6a979-5f62-4e17-9d4c-dbd9f5ede403",
"status": "started",
"totalItems": 100,
"processedItems": 0
}
  1. Progresso
{
"operationId": "54d6a979-5f62-4e17-9d4c-dbd9f5ede403",
"status": "processing",
"totalItems": 100,
"processedItems": 50,
"successCount": 48,
"errorCount": 2
}
  1. Conclusão
{
"operationId": "54d6a979-5f62-4e17-9d4c-dbd9f5ede403",
"status": "completed",
"totalItems": 100,
"processedItems": 100,
"successCount": 95,
"errorCount": 5,
"completedAt": "2024-02-04T12:30:00Z"
}

Tratamento de Erros

O sistema implementa várias estratégias para garantir resiliência:

  1. Retry Automático

    • Tentativas automáticas em caso de falhas temporárias
    • Backoff exponencial entre tentativas
    • Máximo de 3 tentativas por operação
  2. Dead Letter Queue

    • Mensagens que falham após todas as tentativas
    • Armazenadas para análise posterior
    • Podem ser reprocessadas manualmente
  3. Notificação de Erros

    • Erros são reportados via webhook
    • Incluem detalhes específicos do problema
    • Permitem ação corretiva pelo cliente

Boas Práticas

  1. Tamanho do Lote

    • Recomendado: máximo 1000 itens por requisição
    • Dividir lotes grandes em menores
    • Considerar volume de dados por item
  2. Monitoramento

    • Acompanhar notificações de webhook
    • Verificar status das operações
    • Manter registro dos operationIds
  3. Tratamento de Erros

    • Implementar retry no cliente
    • Armazenar itens com erro
    • Reprocessar apenas itens falhos