Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como as escritas no banco de dados e a integração da API são feitas de forma não bloqueante?

No curso de PHP reativo da Alura eu tinha entendio que programacao não bloqueante era enviar diversas requests para N servidores diferentes ao mesmo tempo, em um processo sincrono por exemplo, a API iria fazer uma request, e aguardar o response para fazer outra request, e em um processo assincrono com programação não bloqueante, enquanto uma request é feita, outra já está sendo feita também, mesmo sem a resposta da primeira...

3 threads enviando requests para 3 apis diferentes ao mesmo tempo

Mas no projeto desse curso nós não fizemos diversas chamadas em diferentes APIs, nós fizemos integração com 1 request apenas, e temos escritas no banco de dados, mas ambas essas operações são chamadas de não bloqueantes e não consegui entender COMO

Eu entendo que as leituras do banco são não bloqueantes por causa do uso de SSE e event streaming, porque esses endpoints não bloqueiam, eles fazem uma comunicação unilateral em tempo real

Mas eu não consegui entender como a as escritas no banco de dados e as requests para a API externa não são sincronas, não faz sentido, pois não estamos enviando a request e dando continuidade no processamento, estamos fazendo integração e aguardando a resposta para retornar para a API

2 respostas
solução!

Olá, Arthur! Tudo bem?

No paradigma reativo, a ideia é utilizar um modelo de programação assíncrono e não bloqueante, onde as operações de I/O (como chamadas de rede e acesso a banco de dados) não bloqueiam a execução das threads. Em vez disso, elas utilizam callbacks ou promessas para lidar com a conclusão dessas operações.

  1. Escritas no Banco de Dados:

    • Em um ambiente reativo, as operações de escrita no banco de dados são feitas de forma assíncrona. Isso significa que, quando você faz uma operação de escrita, ela é iniciada e, em vez de bloquear a thread até que a operação termine, o controle é devolvido imediatamente. Quando a operação de escrita é concluída, um callback é acionado para lidar com o resultado.
    • O uso de drivers reativos para bancos de dados, como o R2DBC, permite que essas operações sejam realizadas de forma não bloqueante.
  2. Requisições para APIs Externas:

    • Similarmente, quando uma requisição é feita a uma API externa, a chamada é feita de forma assíncrona. O controle é devolvido imediatamente após a requisição ser enviada, e a resposta é tratada por meio de callbacks ou fluxos reativos quando chega.
    • WebClient, por exemplo, é uma ferramenta em Spring WebFlux que facilita essas chamadas de forma não bloqueante.

Mesmo que você esteja esperando a resposta para continuar o processamento (o que parece sincrônico), a diferença está em como os recursos do sistema são gerenciados. Em um modelo não bloqueante, o sistema pode continuar a processar outras tarefas enquanto aguarda a conclusão das operações de I/O, tornando-o mais eficiente em termos de uso de recursos.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Agora entendi, muito obrigado pelo esclarecimento! Essas chamadas assíncronas são incríveis, principalmente porque a thread não fica bloqueada em uma conexão de rede, ela entra em um estado de espera sem consumir recursos, aguardando o callback, incrível!