Bom, pessoal, o negócio é o seguinte, tá? Agora aqui na tela do meu computador, ainda aqui nesse Scaledraw, eu quero fazer um apanhado de alguns aspectos aqui para vocês, tá? Então, a primeira coisa que a gente tem que se ligar são formas de comunicação quando usar uma coisa ou quando usar outra, né? Eu vou começar pelo básico, provavelmente muito disso você já conheceu, ou se não conhece, ou se ainda não é familiarizado, talvez esse vídeo seja ideal, inclusive, para fazer esse resumo. Mas o fato aqui é o seguinte, nós temos duas formas de comunicação. Síncrona. Legal? Então vamos colocar esse formato aqui de comunicação para a gente, formato síncrono de comunicação. Certo? Ou seja, comunicação síncrona. E essa comunicação síncrona, nesse caso, o que ela significa? requisição, você necessita da resposta de forma imediata. Legal? Então, essa é a forma mais clara de a gente conseguir pensar em sincronismo. Você pergunta, alguém responde. É a gente falando no telefone, basicamente a nossa latência é mínima. Eu tô falando com você ali de forma geral, em tempo real, né? Mas para que isso aconteça, eu preciso que tenha alguém do outro lado da linha. Então, isso aí é o que mais acontece nos dias de hoje, principalmente quando a gente trabalha, por exemplo, com REST, né? Se a gente tá trabal, por exemplo, com REST. Se a gente está trabalhando aqui com HTTP. Por que isso faz sentido? Eu mando uma requisição para um servidor e o servidor retorna essa minha requisição. Simples assim, não vou ficar chovendo no molhado. A gente tem outra forma de a gente trabalhar, que é a forma assíncrona. Ou seja, eu mandei um e-mail para você, quando você lê seu e-mail, o que vai acontecer? Você olha e me responde. Ou seja, as duas pontas não precisam estar conectadas ao mesmo tempo para trocar informações. E eu não vou colocar as duas pontas, as pontas, porque às vezes eu estou falando com mais do que uma pessoa, tá? Então, isso aqui é um exemplo claro de assincronismo. Tudo tem vantagem e desvantagem nessa vida. Ou seja, se eu faço uma requisição HTTP pra pegar os dados, né, dos motoristas que estão cadastrados no Uber, por exemplo, e eu mando essa requisição e eu recebo, eu tô feliz, peguei a informação na hora que eu queria, né? Ou, se eu quero mandar uma solicitação de corrida, eu faço essa requisição e essa requisição retornou pra mim que a corrida vai ser processada ali pra gente, que a corrida começou. Qual que é o grande problema aqui nesse caso, né? A gente tem um problema aqui, que pra que isso aconteça, tá? Os envolvidos precisam estar online, tá? Então, esse aí é um ponto claro, né? Se eu mando uma request e o servidor está fora do ar, eu vou ter um problema que eu não vou conseguir receber essa resposta, tá? Então, esse aí é um caso muito claro de que a comunicação síncrona exige que tudo esteja online naquele momento, né? E a gente sabe que a nossa vida, ela não funciona dessa forma, né? Seria muito bom que todos os servidores de todos os lugares do mundo estivessem no ar e estaria tudo bem. Legal? Então, os envolvidos precisam estar online. Uma outra coisa que poucas pessoas acabam pensando em algumas vezes é que, em determinados contextos, a comunicação síncrona custa mais caro como assim Wesley? custa mais caro eu vou fazer uma analogia muito clara pra você imagina que você vai no supermercado e você vai fazer uma compra legal? o que que acontece normalmente na hora que a gente vai fazer a compra? A gente entra no caixa, né? E daí, de repente, naquele caixa, a pessoa vai lá, te atende e você faz essa compra. Agora, vamos imaginar que eu tenho mil pessoas fazendo compras naquele momento, naquele supermercado. Se eu quiser uma resposta imediata, ou seja, se eu quiser pegar e já conseguir passar a minha compra, isso significa que eu vou ter que ter, pelo menos ali, mil caixas me atendendo, para que todos possam ser atendidos ao mesmo tempo, para que as duas pontas estejam conectadas diretamente. Então, quando eu tenho uma possibilidade de comunicação síncrona, a gente tem que garantir Quando eu tenho uma possibilidade de comunicação síncrona, a gente tem que garantir que as pontas estejam disponíveis a todo momento. E para eu deixar tudo disponível a todo momento, para inúmeras pessoas acessarem, o que acontece nesse caso? Eu preciso, normalmente, ofere mais recurso. Imagina que eu quero um relatório que vai demorar 5 minutos pra ser gerado. Eu mando isso via HTTP e fico pausado lá 5 minutos enquanto o sistema está processando aquele relatório pra ele me retornar o arquivo pra eu baixar em seguida. Agora, imagina todo mundo acessando isso ao mesmo tempo. Quanto de hardware, de recurso computacional eu tenho que ter no ar para conseguir fazer isso de forma assíncrona. Então já dá para perceber que existem casos que a gente utilizar as coisas de forma assíncrona vai sair mais caro. Um outro ponto aqui que a gente tem de problemas com fórmula assíncrona, não digo que é um problema, é um trade-off, tudo tem ganho e perda, né? Eu recebo o dado na hora, mas se, né? Eu vou colocar servidor nesse momento, se o servidor estiver fora, há possibilidade de perda de dados. Então vamos imaginar que eu estou no checkout da minha aplicação, da minha loja virtual, e aí o que acontece nesse momento? Na hora que eu mando a informação, passar lá na parte de pagamento, aquele servidor está fora do ar e eu não consigo concluir o meu pagamento naquele momento, eu largo o carrinho e vou embora e aquela loja perdoa a venda. Ou eu vou fazer uma transferência bancária e se no momento que eu mandar o dinheiro, a API do Banco Central está fora do ar, ou o banco está fora do ar, alguma coisa assim, o que acontece? Eu não consigo realizar aquela minha operação porque eu precisava que as pontas estivessem conectadas exatamente naquele momento, tá? Então, a comunicação síncrona, ela tem uma vantagem gigante. Você pergunta e você é respondido. Eu acesso um site e recebo os dados do site no HTML na minha hora. Acesso uma API, já recebo o resultado da minha API. Porém, quando a gente tem grandes sistemas, a gente precisa de resiliência, a gente não pode perder dado, a gente não pode ter a chance de alguém solicitar um relatório e nesse momento alguém cai do ar, esse relatório não é gerado, eu mando uma transferência bancária e não funciona, ou eu vou fazer uma compra, e temporariamente aquele sistema estava fazendo o deploy e daí eu perdi a possibilidade de venda. Então, existem situações que a resiliência conta mais do que a velocidade com que aquela informação vai ser retornada. Às vezes, é aceitável eu esperar algum tempo a mais para ter algum resultado, do que simplesmente eu ter que colocar mil caixas para atender mil pessoas no supermercado. Às vezes, cada pessoa vai esperar cinco minutos para conseguir passar sua compra. Se pela qualidade daquele supermercado estiver ok, maravilha, eles botam 10 caixas e vai atendendo. Legal? No próximo vídeo, a gente vai falar sobre mais aspectos da comunicação assíncrona, e da mesma forma que assíncrona tem vantagens e, entre aspas, desvantagens, assíncrona, a gente também tem esses pontos. Então, vamos nessa.