01. DADOS GERAIS
| Produto: | parametros
TOTVS Varejo Franquias e Redes |
|---|
| Linha de Produto: | |
|---|
| Segmento: | |
|---|
| 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.