Processos Síncronos e Assíncronos

Você sabe a diferença entre um processamento síncrono e assíncrono? É bem importante ter essa distinção antes de seguir nossa leitura. Vamos lá:

Imagine a situação onde temos dois processos: A e B. Cada um deles possui sua própria linha do tempo em termos de execução. Agora, na linha do tempo, o processo A chama o processo B, e o comportamento será dado em função do seu tipo:

  • Processo Síncrono: O processo A chama o processo B. Neste caso o processo A aguarda o processo B terminar para continuar sua execução.
  • Processo Assíncrono: O processo A chama o processo B e continua executando, desta forma A e B seguem paralelos (a linha do tempo não é interrompida). Quando o processo B terminar, notifica o processo A disso.

A imagem abaixo representa em termos gráficos essa execução:

Quando usar processos Síncronos e processos Assíncronos?

Um processo dito Síncrono deve ser usando nas seguintes situações:

  • Tarefas rápidas: atividades simples que não vão bloquear o fluxo do sistema por muito tempo como uma validação, ou cálculo rápido ou até algo que utilize caches.
  • Operações ordenadas: quando há a necessidade de iniciar um processo apenas quando outro termine, um fluxo num wizard por exemplo.
  • Consistência prévia: quando necessitamos de uma informação validada antes se seguir a diante com outro processo, uma validação de formulário ou até mesmo a validação de um CPF/CNPJ.

Já os processos Assíncronos devem ser utilizados nos seguintes casos:

  • Tarefas pesadas/Tarefas que bloqueiam fluxo da aplicação: os processos que consomem recursos e são demorados, uma emissão de NF ou o processamento de e-social são exemplos de processos que demoram.
  • Evitar congelar a interface: qualquer processamento que traga uma experiência de tempo negativo deve ser levado para processamento assíncrono. Você gostaria de esperar 30 segundos, 1 minuto, 5 minutos ou até mais que isso olhando para uma tela parada? Se sua resposta foi não, esse é um forte candidato a ser um processo assíncrono.
  • Executar tarefas em paralelo: tarefas independentes que podem ser quebradas em processos menores (tickets), desta forma ganhando vazão processando muito mais informação em menos tempo (cuidado apenas com os limites de hardware).

Percepções e Métricas

É importante destacar que a percepção de performance pelo usuário é mais importante que a própria performance do sistema, mas como isso é explicado? Temos 3 tipos de respostas para processos:

  • Processos síncronos, mas que o usuário espera uma resposta imediata – fluxo de navegação de telas.
  • Processos assíncronos, mas que o usuário espera que sejam rápidos – emissão de folha de pagamento, apesar se der um relatório, o usuário espera agilidade na execução.
  • Processos assíncronos, mas que o usuário não espera imediatismo – cuidado com as divisões de processos, pois um processo em background pode competir com outros processos disparados pelo sistema ou até mesmo outros usuários, o que pode impactar muito no tempo de execução do processo.

Já quanto as métricas, alguns números que devemos observar para a carga de uma página:

Tempo Sentimento
de 0s a 0.1s Perfeito
de 0.1s a 1.0s Aceitável
de 1.0s a 10s Problemático
mais de 10s Inviável

É importante dar um feedback visual para o usuário quando os tempos estão na casa de 1.0s, devemos sempre evitar deixar o usuário no “escuro” sem notificações.

O que a Benner oferece para processamento paralelo?

Uma das ferramentas oferecidas é o BTL – Business Tasks Library, que é um conjunto de componentes para disparo de tarefas mais longas e pesadas com disparo em segundo plano, provendo: controle, performance e escalabilidade (tanto horizontal quanto vertical, mas muito mais focado em escalabilidade horizontal).

Vale destacar as novas implementações do BTL:

  • WithPriority: para definir as prioridades dos processos, inclusive criando processos que podem furar a fila usando esse parâmetro.
  • WithoutProgressBar: feedback visual para o usuário, mostrando os status da situação do processo.

Além disso, é importante ficar atendo à granularidade dos processos, para que os provideres não fiquem alocados com um processo imenso, utilize sempre a estratégia de quebrar em tickets menores os processos grandes. Atenção, pois muita granularidade também pode ser um problema, já que a inicialização pode consumir processamento. Tente buscar o cálculo que seja mais equilibrado.

Outra ferramenta importante da tecnologia para processamento paralelo é o Benner Tasks Worker, ele é o serviço que monitora a fila de processos do BTL e distribui as tarefas para serem executadas nos provideres. A fila pode ser tanto através do banco de dados quanto serviços de mensageria.

O Worker pode ser inicializado pelo BServer (podendo ser personalizado através do ServerManager, sem necessidade de configuração), entretanto oferece a desvantagem de não ser flexível e escalável. Outra forma de configurar Worker é fazer a instalação como um serviço do Windows. Nesta abordagem, temos a vantagem de flexibilização dos processamentos, como chamada remota e até priorização dos processos e filas.

Uma dica para detecção de eventuais problemas, podemos habilitar o log de depuração, visualizar o Event Viewer ou o Worker Sniffer.

Para saber mais

Temos uma vasta gama de materiais sobre o assunto na Wiki:

Além disso, em nossa trilha de treinamento da tecnologia temos uma série de vídeos falando BTL, o primeiro vídeo da série é:

E para complementar, temos um BE.TECH gravado pelos nossos especialistas Danilo Pereira da Silva e Matheus Silva Ribeiro, o vídeo é esse:

Espero que tenha gostado, te vejo no próximo post, um abraço,

Danton C. Franco Junior

#TimeTec

Compartilhe
Autor
Leia mais
Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *