Árvore de páginas

01. DADOS GERAIS

Produto:

parametros TOTVS Varejo Franquias e Redes

Linha de Produto:

PDV Sync

Segmento:

Varejo

Módulo:Workflow
Função:
País:Brasil
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :

DVARINT1-14447


02. SITUAÇÃO/REQUISITO

Analisar e otimizar o uso do banco de dados no projeto Overlord, identificando possíveis gargalos, uso incorreto de conexões, pool excedente ou configurações inadequadas que possam estar ocasionando erros de conexão recorrentes. O objetivo final é eliminar as falhas de conexão e garantir estabilidade no acesso ao banco.

03. SOLUÇÃO

Alterações no MS Fila:

  • Inclusão dos seguintes parâmetros na ConnectrionString: "Maximum Pool Size=50;Multiplexing=true;Connection Pruning Interval=5;Connection Idle Lifetime=10;Application Name=MsFila;" para otimizar o uso das conexões;
  • Inclusão de cache para armazenar a verificação de partição por inquilino;
  • Refatoração das Libs do projeto que estavam quebrando o build do Docker;
  • Ajuste na publicação de mensagens no PubSub para criar o tópico/subscrição apenas se esses não existirem;
  • Correção no armazenamento e recuperação do TipoLote no cache. 

Alterações no Worker RTS:

  • Inclusão dos seguintes parâmetros na ConnectrionString: "Maximum Pool Size=80;Multiplexing=true;Connection Pruning Interval=5;Connection Idle Lifetime=10;Application Name=WorkerRTS;" para otimizar o uso das conexões;
  • Ajuste no semáforo que controla o fluxo de consumo da fila para 80 itens por vez;
  • Utilização do método "StartProcessingSubscriptionAsync" para consumir as mensagens por Stream em vez de por Pull;
  • Otimização de Queries e criação de métodos "Simple" que retornam dados menores;
  • Ajuste nos métodos de repositório utilizados pelo Worker para serem Async;
  • Ajuste na publicação de mensagens no PubSub para criar o tópico/subscrição apenas se esses não existirem;

Alterações no Worker RTS - ManagementWorkflow:

  • Criação de semáforo que controla o fluxo de consumo da fila para 80 itens por vez;

Alterações no Worker SubLote:

  • Inclusão dos seguintes parâmetros na ConnectrionString: "Maximum Pool Size=50;Multiplexing=true;Connection Pruning Interval=5;Connection Idle Lifetime=10;Application Name=WorkerSubLote;" para otimizar o uso das conexões;
    • Alteração feita apenas na conexão com o Banco Fila. Para aplicar a mesma configuração para o banco de Controle seria necessário alterar todos os repositórios para Async.
  • Criação de semáforo que controla o fluxo de consumo da fila para 80 itens por vez;

Alterações no Worker Evento:

  • Inclusão dos seguintes parâmetros na ConnectrionString: "Maximum Pool Size=50;Multiplexing=true;Connection Pruning Interval=5;Connection Idle Lifetime=10;Application Name=WorkerEvento;" para otimizar o uso das conexões;
  • Criação de semáforo que controla o fluxo de consumo da fila para 80 itens por vez;

Alterações no Microsserviços:

  • Nos microsserviços de Produto, Cliente e Comercial, foram removidas as verificações de Tenant e Lote. A alteração já havia sido feita em Prod, porém não foi repassada para Dev.  


Obs: Nos testes com Workflow (envolvendo Ms Fila, Worker RTS e Functions de Workflow) não foi possível aplicar um teste de carga satisfatório (que cobrisse o fluxo do dado de ponta a ponta), uma vez que as APIs do VO possuem um rate limite de 30 requests a cada 2s, como documentado aqui: https://github.com/Varejonline/api/wiki/Limite-de-requisi%C3%A7%C3%A3o-%28Rate-Limit%29 

Neste cenário, para validar a capacidade de processamento dos serviços, foi inserido de forma manual o Id de uma dado da previamente cadastrado no banco de Fila, e várias requisições foram feitas pela ferramenta K6, validando a capacidade do WorkerRTS de
processar as mensagens, enviar para um MS de destino e um evento e enviar teste evento para o Worker de Eventos, validando também a capacidade desse último de enviar as requisições para o destino.