ChatGPT Consegue te Substituir? | Entendendo Jobs Assíncronos

240.16k views7147 WordsCopy TextShare
Fabio Akita
Vamos entender mais sobre Jobs Assíncronos, a diferença de usar Promises ou Bull. E um pouco mais so...
Video Transcript:
Olá pessoal Fábio Akita todo mundo parece que gostou do episódio de técnicas de otimização web onde eu explico porque o aplicativo que você acabou de conseguir terminar seguindo um tutorial ou curso online não se parece com nada com o projeto profissional de verdade não foi surpreendente como realmente a maioria dos iniciantes nem imaginava que aquelas técnicas existiam e quem já tem experiência também confirmou que tudo que eu falei é o arroz com feijão na mesma semana em dezembro de 2022 tava todo mundo super rapado com chat GPT eu acho que todos assistindo pelo menos ouviram falar dessa tal Inteligência Artificial da Open ai do i ou muski que consegue fazer sua lição de casa até escrever uma matéria jornalística ou script para vídeos de YouTube sem nenhum esforço e pra nós programadores o relevante ele conseguir escrever código direitinho muitos Youtubers até prevem o fim dos programadores será se você pensou assim também hoje eu vou explicar porque tá errado recapitulando no episódio de otimização eu expliquei rapidamente o conceito básico de balanceador de carga tanto no nível de requisições http com o indinext ou entre sua aplicação e o banco de dados compude conexões e no final eu falei sobre como deferimos a execução de operações demoradas para Jobs a sincronos alguns iniciantes corretamente se questionaram porque usar um sistema como o Bull no caso de novo JS se existem Promises assim que a wait challe de prostitis E worker trads por que não simplesmente colocar a operação mais demorada numa Promise vai rodar em paralelo e devolver o HTML para o usuário rápido não é a mesma coisa para responder isso eu queria mostrar um outro exemplo E como eu escrevi esse script de tarde na noite eu realmente estava morrendo de preguiça de escrever código java script então eu resolvi pedir para o meu copiloto um chat GPT para escrever para mim eu peço as coisas para ele sempre em inglês porque o modelo em inglês é o mais completo e mais bem treinado e é quem dá as melhores respostas e minha primeira requisição foi escreve um forme multipark para upload de uma imagem e como era de se esperar a resposta está correta Eis o código e ele até dá uma explicação sobre o atributo em que Type e tudo mais isso é bacana mas não exatamente impressionante para uma lição de casa de curso ou faculdade é suficiente mas numa aplicação de verdade não fazemos mais assim é o seguinte esse HTML vai gerar um formulário onde o usuário pode escolher uma imagem no seu computador ou smartphone quando clicar em enviar o navegador vai fazer aquele caminho que eu já expliquei nos Episódios de rede criar o pacote de http Quest conectar no servidor que responde qual o Andy point/piloud e no servidor o processo que recebe as requisição fica bloqueado Esperando receber esse arquivo Qual o objetivo de um end Point de uma aplicação web é responder de volta para o usuário o mais rápido possível de preferência na faixa abaixo de 100 milissegundos lembram Quanto mais tempo sua aplicação leva para responder deixando o usuário menos requisições por segundo seu receptor consegue responder daí somos obrigados a gastar mais colocando mais servidores para suportar todo mundo acessando simultaneamente portanto sempre precisamos pensar se o que estamos fazendo contribuir para aumentar ou diminuir esse tempo o problema do forme Desse exemplo é que ele se conecta e vai deixar sua aplicação e o usuário parados esperando o upload da imagem completar num pior caso Digamos que o usuário é um fotógrafo resolveu dar upload uma foto em oito carros ou seja descomprimido que Pode ocupar entre 60 a 100 megabytes Digamos que seja 60 megabytes e ele tá fazendo upload do celular numa conexão 4G ruinzinha que dá upload só 10 mega bits por segundo isso vai custar 480 segundos ou aproximadamente 8 minutos Isso é terrível esse uma upload fez um processo do seu servidor ficar simplesmente parado esperando sem poder fazer nada por oito minutos inteiro Já vou voltar nisso como é uma operação de ai ou tem capacidade de jogar essa espera para uma trade separada que não bloqueia a habilidade de conseguir responder outras requisições enquanto isso porém Imagine que sua aplicação é feita para fotógrafos que vão ficar o dia todo subindo imagens gigantes desse tipo o tempo todo tudo tem o limite e em breve seu servidor vai ficar bem pesado porque não dá para ficar criando dreads infinitamente e treads não são de graça muitos não entendem isso cada nova tread ocupa espaço em rã e tempo de processamento para mudar o estado de uma trade para outra um paliativo é justamente usar o end next na frente da aplicação node ou Spring boot ou laravel ou seja lá qual Framework esteja usando porque o end next foi feito para lidar com coisas como uploads demorados de forma mais eficiente do que um node o usuário primeiro você pendura não é de Next faz o upload e só quando termina o end next passa o arquivo direto para sua aplicação só que em de Next apesar de ordens de grandeza mais rápido que seu note também não é infinito e uma hora vai ficar pesadão tem diversas formas de lidar com esse problema mas hoje em dia o melhor custo-benefício é simplesmente não lidar com esse problema Especialmente porque tem outra coisa ruim que não tem a ver com a espera e sim com Onde fica o arquivo o história ou HD local do processo que recebeu o arquivo lembra que numa infraestrutura de verdade subiu vários pequenos servidores embaixo de um balanceador de carga significa que se aplicação receber um arquivo e gravar localmente só os processos no mesmo servidor vão conseguir ler e os outros não vão ter acesso Mas aí o usuário navega na sua aplicação e vai querer ver a imagem que acabou de subir e não vai achar porque o end next elegeu outros servidor para receber a sua requisição e nesse servidor não tem a imagem Então como é que faz podemos usar um volume compartilhado na rede via NFS que nem quando você se conecta num servidor de arquivos da sua empresa é uma solução válida mas ao mesmo tempo gostaríamos de ter um backup caso o servidor de arquivos der algum pau não queremos perder arquivos dos usuários E no fim vamos mandando esses arquivos para algum lugar como um serviço aws S3 por isso eu falei que o menos trabalhoso é simplesmente não lidar com arquivos localmente e sim já mandar direto para o aws S3 eu já sabia disso então eu fiz outra requisição para o chat GPT eu pedi para ele agora escreva outra versão desse formulário mas com o suporte a upload direto para um banco de qual URL PR pré-assinada do S3 e como esperado devolveu um exemplo correto se você é iniciante Pelo menos já tentou programar o upload via web provavelmente fez igual o chat GPT na primeira vez conforme multiplarte dando post para onde Point na sua aplicação só que nunca parou para pensar em coisas como a demora do upload num cenário de verdade e nunca pensou que daria para dar piloto direto pro S3 sem passar pela sua aplicação O Grande Truque é o atributo Action no exemplo anterior era um post para Barra upload na sua aplicação mas agora é para o URL que tiver nessa variável pré-sign de your em seguida tem os campos escondidos que eu não chequei na documentação mais atualizada da WS se é assim mesmo mas se não for é parecido são coisas como o nome da chave onde vai ser gravado esse arquivo no Bucket do S3 credenciais e outras configurações e o resto do formulário é igual como falei antes o lance é que quando o usuário clicar em submeter o arquivo não passa por nenhum dos servidores da sua aplicação vai dar upload direto para o Bucket que você configurou na sua conta antes mas como que gera essa tal de URL PR press assinada essa foi minha próxima requisição para o chat GPT agora Escreva um exemplo em nome de JS Express de como conseguir a URL press assinada antes de renderizar o HTML anterior e ele fez o código de back end que executa antes de mandar renderizar o htm que eu acabei de mostrar nada mal ele importa bibliotecas como a wsdk o Express e tudo mais Note que eu só pedi esse trecho mais pra funcionar ou precisa saber fazer ou pedir para o chat de PT configurar seu Pack Jason o arquivo ep. js e outras configurações só esse código sozinho não funciona se nunca uso o Express quando abriu o navegador apontando para localhost 3 mil barra upload vai cair nesse app. get/pload gerar a chave do objeto pode ser feito de diversas formas se for antes do usuário escolher qual arquivo vai mandar vamos precisar criar um nome aleatório usando coisas como uma função de resto tipo um Shark 512 de um número aleatório E se for viajar script a partir do formulário depois que o usuário escolher o arquivo pode usar o próprio nome do arquivo o principal é escolher uma fórmula que gere um string que vai ser o único dentro do Bucket para não sobre descrever o arquivo de outra pessoa então construímos um Jason simples indicando o Bucket a chave que geramos e por quanto tempo a URL de upload vai ficar disponível coisa como 60 segundos ou menos porque se essa URL não tiver inspiração e vazar qualquer um poderia ficar fazendo uploads arbitrais no seu banquete até acabar o espaço ou de fazer pagar Fortuna à toa finalmente usamos o objeto de S3 que carregamos e chamamos essa função Gets Sine de wirele passando os parâmetros que configuramos a biblioteca do S3 vai chamar a peida WS e se não der erro vai devolver uma url especial a tal url pré-assinada que passamos para esse template upload forme que é o HTML que eu mostrei antes aliás faltou uma coisa né não tem nada mais ruim para o usuário do que dá upload de um arquivo gigante e não saber se tá fazendo upload devagar ou se travou tudo então eu pedi para o chat GPT refazer o formulário anterior adicionando uma barra de progresso e ele fez de novo uma solução simples mas correta primeiro adicionou um drible chamado problems bar container com outro divide dentro chamado progressibar em seguida criou um CSS simples para cada um desses elementos E no fim fez um java script que captura o evento de submite do forme para mandar o upload usando a classe XML http request que tem evento para indicar o progresso do upload ele usa isso para conseguir o que já foi e atualizar o comprimento do div na barra de via CSS honestamente eu não testei para ver se funciona só de bater o olho parece que sim mas de novo é um código Super simplificado como eu não especifiquei que era para usar viu o ponto JS ou react ou outro frame o que ele fez java script puro se seu projeto usa react não dê cop peixe desse código faça um componente seguindo o padrão da sua equipe é o tipo de código que se encontraria numa resposta destaque overflow e que não se deve copiar e colar sem ajustar Note que pesquise rapidamente no Instagram Flow e eu achei uma resposta com o código similar ao que o chat de ept me deu no geral não tá errado estão entendendo Digamos que você é um programador Júnior iniciante num projeto e o gerente pedisse oh Fulano faz um formulário de upload de imagem no nosso site Você faria a mesma coisa que o chat GPT aquele primeiro formulário HTML multi Party mandando o arquivo direto para a aplicação e gravando no disco local do Servidor e pronto se é a mesma requisição viesse para mim o outro programador experiente faremos perguntas é para coisas pesadas quem vai usar só pessoal interno ou é para todo o usuário onde quer gravar essas imagens podemos mandar direto para o S3 quer mostrar uma barra de progresso para o usuário o chat GPT sabe como fazer tudo isso mas ele não questiona faz o mais simples primeiro e não tá errado precisamos saber de antimão que queremos mandar para o S3 via URL para assinada e daí ele faz exatamente o que foi pedido deixa eu dar outro exemplo para ficar mais claro e aproveitar para explicar mais conceitos que iniciantes não conhece agora que temos a imagem no Bullet do S3 Digamos que a nossa aplicação web é tipo um clone de Instagram eu gostaria que a imagem fosse crocapada em formato quadrado e sempre fosse gravado em formato png para padronizar tudo então eu pedi Exatamente isso pro chat GPT agora Escreva um exemplo de ação de controle de novo até sexo expressa para puxar a imagem que deu upload não é relembrar assinado do S3 daí use imã de match para cropar num quadrado perfeito salvar como png e dá para outro Bucket do S3 e de novo tá certinho no começo Ele carrega bibliotecas que precisa saber carregar no pack de ponto Jason e cria um endpoint de post chamado barra process image que poderia ser chamado pelo JavaScript no formulário pelo objeto de XML htdp request quando detectar que o upload terminou por exemplo e esse código faz o seguinte primeiro tem que saber a URL completa do arquivo que acabou de subir no banco de do S3 e configurar os parâmetros para esse Bucket ele começa chamando o método get Object do objeto do S3 eu não tô familiarizado com a biblioteca WS ssdk para java script mas parece que devolve uma Promise e corretamente da wait para quem é de outras linguagens que não tem provas não é a mesma coisa mas é como se tivesse colocando esse s3.
gat Óbvio dentro de uma nova trade e esse Awake é como se fosse Joy ou seja para esperar antes de continuar finalmente puxamos o conteúdo binário do arquivo nessa variável ima de buffer se a imagem tinha 60 megabytes agora tem 60 megabytes na memória do interpretador V8 desse processo na sequência ele faz o código para fazer cópia ou seja para recortar a imagem num quadrado usando a biblioteca imediamedic nesse im chamando o método crop direitinho ele assumiu que eu crie uma imagem de 200 por 200 pixels Tá ok eu não tinha dito nenhum outro número mais de novo por isso que não pode copiar e colar cegas se o amador só copiar você sem ver e deixar se isso passar agora aquela imagem de altíssima qualidade em 8k ro do Fotógrafo você transformou numa imagem porcaria minúscula Se for para ser fixo eu não cortaria nada menor com uns 4 mil por 4. 000 pixels esse Patrine que ele faz de englobar tudo numa nova Promise e imediatamente chamar a wait do ponto de vista só desse código Seria a mesma coisa que não tem isso desse jeito esse código vai esperar a wait até o cropper terminar ela forma como O Event loop do node funciona que é vantagem tem que fazer assim a única trade do evento de Lupi ficaria bloqueada e o node não iria conseguir fazer mais nada até o crop do imaginética e terminar mas colocando numa Promise e dando a wait Ele delega para o sistema operacional a operação de esperar o ayo ler arquivo gravar arquivo e libera O Event loop para fazer outras coisas como responder outras requisições de outros usuários quando a operação cara de ayu retorna atrás de continua depois do auente como se nada tivesse acontecido Essa é a grande vantagem de se usar node em primeiro lugar o evento loop e o suporte a Promises eu vou voltar nisso mais para frente em seguida temos um bloco de código que chama direto o programa converte mesma coisa provavelmente e no final o último bloco é chamado biblioteca do S3 para fazer o upload do S3 cropado e reformatado como png para o Bucket do S3 agora vamos entender o problema quer dizer não é nenhum problema se só você for usar essa aplicação ou mesmo se for uma parte de administrativa de um site onde só medos de pessoas for usar Mas se for para todo o usuário do site e tiver centenas ou milhares de usuários isso vai pesar rapidamente e exigir que se faça deploide muitos servidores tornando a infraestrutura super cara Primeiro de tudo quando fazemos download da imagem do S3 guardamos nessa variável imã de data e a imagem tem 60 Mega de cara temos consumindo 60 Megas de Ram dos servidor Digamos que sem usuários estão fazendo upload de mais mais ou menos ao mesmo tempo seria 6 GB de Ram sendo ocupados no servidor web para processar imagens realmente vai usar muita rã o problema é compartilhar isso no mesmo servidor que precisa responder requisições web o mais rápido possível Além disso temos duas operações de rede para S3 download e upload baixando 60 megas subindo uma imagem menor mas é um tráfego que não podemos ignorar de novo se tivesse senta usuário simultaneamente subindo imagens de alta qualidade naquele minuto seu servidor tá precisando gastar uns seis gigabytes de tráfego só para baixar do S3 Ah mas é porque mandou fazer Direct upload para S3 se tivesse no story de local estaria ocupando menos banda sim é verdade e Eis um exemplo de que não tem resposta certa se você é um serviço grande onde uma das partes principais do que oferece aos usuários é armazenamento de arquivos grandes Talvez queira ter essa infraestrutura sob seu controle vai ter gente dedicada com servidores no data center dedicados só para gerenciar armazenamento daí não precisa usar tanto S3 por outro lado pode ser uma empresa no começo que ainda não tem tanto servidores rede gente de infra dedicada só para armazenamento Talvez o S3 seja um custo-benefício melhor nenhuma das duas respostas é errada Depende de quem você é qual o seu nível de orçamento quanto cobra Qual sua receita Digamos que somos uma empresa menor e pra gente S3 faz sentido então o código seria mais ou menos como nesse exemplo Mas além do armazenamento temos esses dois blocos pesados de processamento que é calcular o crop e converter a imagem para outro forma Lembra que eu falei que na variável ima de data tem 60 megabytes do binário da imagem original nessa parte aqui a variável cropped imã de buffer vai ter o binário da imagem recortada Digamos que seja uns 50 megabytes e nessa outra parte aqui onde convertemos para png faz de conta que o png ficou com 5 megabytes de tamanho porque é comprimido Então antes dessa função Acabar essas três variáveis estão ocupando 60 mais 50 mais 5 ou seja 115 MB de memória se tiver 10 usuários pendurados fazendo upload de mais semelhantes estamos ocupando uns 11 Giga e meio de ram dos Servidores só nesse processo estão entendendo o problema não é só conseguir rodar essas tarefas em paralelo para liberar processamento para o node conseguir atender mais requisições o problema é que quanto mais gente usar o sistema Mais rápido vai acabar os recursos das máquinas web e em breve não vai ter ram para atender mais gente chegando o objetivo é responder rápido mas fazendo tudo isso é impossível devolver a resposta html o usuário na faixa de menos de 100 milissegundos por isso que para casos assim O correto é jogar esse processamento para fora da aplicação web isso não vai diminuir nem a carga de processamento e nem uso de Ram Mas vamos conseguir segmentar separar os recursos dedicados só para web e os recursos dedicados para processar as imagens no caso do note JS podemos usar a biblioteca Boom Como Eu mencionei no último episódio aí eu pedi para o chat GPT escreva o mesmo código mas sem usar Promises e na realidade deveria as tarefas de download da imagem de croppe em salvar em png fazer upload de volta para outro Bucky como um Job a síncron implementado como um worker de Bull sabendo perguntar em detalhes exatamente o que queremos o chat de PT responde direitinho ele não tem como adivinhar Qual é a melhor solução para você por isso sempre vai dar resposta mais simples Se eu não soubesse que burro existe o chat GPT não ia me dizer mas agora o código começa com ele carregando a biblioteca do burro distanciando uma nova fila chamada imã de prossecy em seguida já Adiciona uma nova tarefa na fila com a chave do objeto do Bucket que é a imagem original que o usuário fez upload Esse é o trecho que iria no controle do Express e vamos tirar fora eu não pedi para o chat GPT reescrever aquele trecho app. post/pilologia do Express Mas seria arrancar fora todo aquele código do processamento de imagens e simplesmente colocar essa linha de registrar uma nova tarefa na fila e rapidamente devolveu Ok para o usuário parar de esperar na fila caso a página Web que iria devolver tivesse um prévio da imagem que subiu não teríamos como mostrar porque ainda não processamos mas aí é só colocar uma imagem genérica com uma mensagem de aguarde estamos processando e colocar um web socket ou algo assim para puxar a imagem processada quando ficar disponível depois voltando para o worker de Bull é a mesma coisa de antes o código que acabamos de apagar duende Point de app ponto post Esse worker é um instalaria num servidor separado só para workers e que eu posso controlar quantas tarefas Eu quero processar simultaneamente Digamos que meu servidor não tenha 11 gigabytes de Ram seria necessário para rodar 100 tarefas simultâneas de imagens grandes eu só tenho 4 GB então só dá para rodar umas 30 tarefas ou menos mas tudo bem Vai demorar mais mas como o usuário não tá pendurado esperando e eu nem tô congestionando servidores web não tem problema se demorar o triplo do tempo Além disso tem outra razão para jogar essas coisas pesadas num drop assim em vez de tentar rodar compromissos ou dreads Digamos que tenha um bug na biblioteca do Imagine quando o S3 você deu um Crash na hora de processar por alguma razão como eu faço para rodar de novo essa tarefa existem bibliotecas Como assim que a Waiting try mas imagina que seja um erro sistêmico e tinha sem usuários subindo e mais por um erro qualquer assim tarefas começa a dar pau e 100 vezes o sistema tem de dar brilho que retentando o meu servidor vai morrer tentando à toa assim e eu preciso ter controle sobre regras numa fila como Bull se os workers começam a dar pau eu posso configurar para não dar retries e só marcar erro se descobrirmos que foi algo sistêmico podemos corrigir o bug e depois que tiver tudo corrigido mandar as tarefas pendentes na fila rodar tudo sobre controle na documentação do bull Ele explica como podemos configurar automáticos por exemplo aqui ele diz para tentar três vezes caso de problema e com o tempo de backoff exponencial que começa em um segundo na primeira tentativa dois segundos para segunda 4 Segundos pra terceira nunca é bom retentar imediatamente porque Muito provavelmente vai dar problema igual e o Bull tem um monte de funcionalidades importantes como Grace foi chat Down Digamos que modificamos o código do sworkers e agora precisamos atualizar nos servidores não pode simplesmente Desligar tudo e atualizar não queremos crackear Jobs que estão rodando normalmente queremos que o worker saiba que tem uma atualização e reinicia só depois que terminar de processar o job que tava em andamento você Temos vários seguidores de Bull cada um com vários processos ele vai desligando atualizando e reiniciando um a um só depois que terminar os Jobs Assim nenhum Job vai corromper é que nem dá chance a te dar o normal no Windows em vez de apertar o botão de força e desligar forçado que nunca é bom e sendo um sistema com fila e worker separados existem projetos como o matador que é uma interface web para monitorar os trabalhos da fila do bull assim um administrador ou Devotos Pode checar visualmente se os workers estão se comportando como deveriam e facilitar conseguir identificar se tudo tá correndo bem entendam colocar um burro e jogar aquele processamento pesado de imagens e outros servidores não diminui a quantidade de recursos sendo gastos ele serve para tornar esse processamento mais gerenciável e previsível tudo que roda no lado do servidores web é pra ser leve e rápido tudo que é pesado como nesse exemplo de imagens jogamos em Jobs em outros servidores que só rodam Jobs e a comunicação entre os dois é feita via uma fila no do bu ele usa um módulo chamado ayo Reds que usa readiz como servidor de fila o correto na hora de instanciar a fila é indicar o servidor do rediz na conexão e quando Subimos os workers apontamos para o mesmo rediz para escutar e quando chegar novos Jobs como eu tô mostrando nesse exemplo que tem na própria documentação se não ficou claro eu vou repetir quando precisamos executar alguma tarefa mais pesada Faz de Conta mandar uma linha nova de log para um servidor de log enviar uma notificação coisas que não duram segundos ou minutos é possível que Promises no caso de Java script ou assim que a White não dot net ou mesmo trads não Java faça um sentido O problema é quando a duração desse processamento é longo e pior varia bastante nesse caso o tempo vai variar dependendo do tamanho das imagens fica imprevisível demais para controlar misturado com a requisição web o certo é mandar pra Jobs assíncronos isso me lembrou um caso Esses dias eu tava configurando minha conta de Google workspace que são os planos pagos do Google serviços como Gmail eu queria habilitar a opção de conseguir mudar o tema do meu Gmail isso eu tava desligado sei lá porque eu fui no admin nessa tela e liguei mas mesmo recarregando meu Gmail Essa opção não aparecia Olha só em outra conta de Google workspace que era da minha empresa já tá ligado e em configurações aparece essa opção aqui tão vendo porque na outra conta não apareceu porque quando eu habilitei no admin ele mandou isso para uma fila que tem um tempo super longo para o suor que eles pegarem pode ser porque tem tanta operação em fila dos milhões de usuários que usam na plataforma que precisa de horas para executar meu pedido você imaginaria que deveria ser imediato mas escolheram separar assim porque deve ser pesado por n motivos que não temos acesso de saber veja o YouTube toda vez que eu termino um episódio eu faço upload do arquivo de vídeo é um arquivo de dezenas de gigabytes leva vários minutos para subir e depois que sobe precisa fazer checagem de copyright gerar versões com resoluções menores sincronizar cobre CDM e assim por diante Enquanto isso não acontece eu vendo essa mensagem indicando que ainda tá processando só depois que termina que eu consigo fazer coisas como adicionar cards veja no enter.
fm que é onde eu subo o arquivo MP3 para publicar no Spotify ou Deezer eu faço upload e depois ele manda para alguma fila enquanto isso no meu front Change só indica que tá processando meu navegador não tá pendurado no servidor deles provavelmente temos java script que de tempos em tempos checa se já terminou ou tem websocket aberto Qual a melhor forma de fazer tudo isso não tem depende de quantos servidores de quais tamanhos você pode pagar o software tem que ser feito para organizar os recursos disponíveis de forma que fique tudo menos difícil de gerenciar não quer dizer necessariamente mais performance ou rodar tudo em paralelo controle significa que quando alguma coisa dá erro eu tenho a oportunidade de pausar checar consertar e daí mandar rodar de novo e para isso soluções usando fila e workers como o Bud Now JS faz sentido pensam que porque node JS tem evente loop não precisa de Jobs assíncronos só Promises e eu espero que tenham entendido que são funcionalidades diferentes para casos diferentes mesma coisa o pessoal de Java que tem créditos nativos e poderiam achar que não precisam de Jobs assim mas um dos sistemas de fila mais reconhecidos é justamente o Apache Kafka que é feito em Java aproveitei para pedir para o chat GPT escrever o worker de Bull em Spring boot Tecnicamente o boiler Plate a parte burocrática de configuração de Kafka exige adicionar o pacote Org Spring Framework fica no arquivo com ponto XML do projeto que é mais ou menos equivalente ao pack de ponto de ex onde daí teria que usar o script k fica top sh para criar os tópicos da fila e finalmente pra aplicação Spring boot conseguir criar mensagens para mandar para fila precisa configurar um produto ser Factory que é o responsável pela estratégia de como criar instâncias de produtos em Kafka o código de exemplo que o chat GPT gerou distancia um Kafka template mas ele deveria injetar um produto ser Factor ali dentro que foi omitido como o vídeo não é para ser um tutorial de spring boot depois Leiam a documentação mas só para explicar aqui de novo o chat GPT não me deu tudo mastigado eu sei que falta coisa porque eu já li a documentação se você nunca usou Kafka na vida e achou PT te dá tudo mastigado pensou errado em seguida ele cria um end Point web chamado barra process image como tínhamos feito com Express no spring boot isso é configurado com uma anotation que é essa linha que começa com a roupa para decorar a função logo abaixo e essa função responde super rápido porque a única coisa que faz é pegar a Instância de café template e enviar mensagem do Job para fila a classe de work era abaixo também é configurado com outra anotation para dizer que é o responsável por mensagens enviadas para o tópico e medir próstata assim nessa classe tem a função process e medir que vai fazer a mesma coisa que o worker de Bull só que em Java bibliotecas de S3 e imã de Magic nas versões de Java download da imagem num biterain e memória cropper e converter em png e fazer upload em termos de processamento como o grosso depende da conexão remota com S3 e de chamar o mesmo imã de Magic Tanto faz ser em Java Script ou em Java vai levar mais ou menos o mesmo tempo para rodar para quem gosta de perder tempo discutindo benchmarks de linguagens Entenda esse cenário veja esses dois códigos lá do alado a linguagem meio que não importa porque o grosso do trabalho não é feito nem java script e nem Java o grosso é o imã de médio e o S3 nas duas versões vão fazer forte e subir um processo separado da ferramenta converte que vem no pacote do imã de Magic que é feito em C ele é quem vai fazer o trabalho sujo e sim eu não precisava ter usado iMedia médica poderia ter escolhido uma biblioteca feita em tudo java script outra feita em pururu Java mas não vejo porque imagine médica é a ferramenta mais madura e reconhecida para trabalhar imagens é literalmente um photoshop em linha de comando que faz Praticamente tudo para que que eu vou Reinventar a roda e mesmo se eu reinventasse a roda não seria uma diferença muito grande de qualquer jeito novamente o objetivo de hoje foi demonstrar como um código feito como o exercício simples que só você vai usar sozinho na sua própria máquina é de um jeito mas como as mesmas funcionalidades do projeto de verdade ficam completamente diferentes na sua própria máquina não precisa de burro nem de k fica basta subir uma prova que é forte de processos ou worker trags que sobe uma tread no mesmo processo para rodar em paralelo mesmo se a imagem for pesada só você tá usando mesmo se demorar alguns minutos e usar muita rã e cair por Suape que é mais lento não tem problema o problema só aparece se tiver exposto na internet aí fodeu e agora sobre coisas como o chat GPT ou de chá decopado tipo eu não mostrei nesse vídeo mas já usei eu acho excelentes eu sei exatamente o que eu quero eu sei que uma solução simples com upload direto na aplicação web Eu sei que existe a técnica de URL pré-assinada então o chat GPT me obedece eu sei que o processamento de imagens download upload para o S3 é demorado por isso eu soube pedir para o chat GPT fazer o código levando isso em consideração e usar Bull e Kafka Além disso eu sei que nos exemplos de código que o chat é PTM devolveu não tem a configuração de redes do bull nem do produto ser Factor e de Kafka eu sei onde configurar e procurar os detalhes que não lembro eu sei achar documentação e completar e também poderia pedir ou achar PT faltou ali a configuração de produtos perfectre no carro ficar template pode completar para mim entenderam vocês assistindo que são iniciantes e ainda não trabalharem em projetos de verdade já tinham ouvido falar dessas coisas eu não tô dizendo que ninguém ensina mas Entenda os cursos mais básicos querem que vocês tenham A falsa ilusão que programa mais simples e qualquer um pode fazer te dar um passo a passo para conseguir fazer um Frontier de Instagram com upload de imagem e quando conseguir ver a imagem postada na sua aplicação local fica feliz e realmente a primeira vez que consegue é bacana mesmo mas eu acho que falta dizer que em cima disso tem esse tanto de coisas que eu mostrei nesse vídeo e no anterior uma inteligência artificial consegue facilmente substituir um programador Júnior inexperiente como puderam ver aqui porém ele ainda não consegue substituir um programador experiente eu vou ficar impressionado quando eu pedir para ele fazer alguma coisa e em vez de me dar um código simples começar a me devolver perguntas pertinentes como quantos usuários eu espero que o sistema tenha que aguentar ou o volume da pilodes um programador experiente não sai rodando à toa de qualquer jeito o chat GPT é um serviçal bem burrinho que dá a respostas erradas ou incompletas com muita convicção por exemplo num vídeo que eu estava assistindo do Joseph callson ele pediu para o irmão dele que é médico de verdade fazer uma pergunta para o chat GPT que no caso foi Qual a condição mais comum que provavelmente se origina na coroide e que afeta homens jovens e o chá de GPT questão explicando que é neovascularização coloidal e segue explicando o que é isso e o médico respondeu nada mal mas está incorreto seria correto se estivessemos falando de pessoas idosas a resposta correta seria retinopatia serosa e é por isso que fazer autodiagnóstico via Google não funciona Claro esse caso em particular com um pouco mais de treino chat GPT deve conseguir responder correto da próxima vez mas o ponto é que as respostas deles não são garantidamente corretas o tempo todo e quando são erradas ele não tem noção que tá errado a resposta é sempre verbalizada de uma forma bem assertiva se você não for também especialista no assunto vai acreditar e nesse caso poderia ser autodiagnosticar errado e acaba tendo problemas graves mas isso já acontece hoje com o Google também para amadores o chat de GPT pode ser usado como uma ferramenta de estudos e nada do que ele soltar deve ser usado todo mundo real sem consultar um especialista porque você não tem o conhecimento e nem experiência para saber se veio errado ou incompleto para especialistas de verdade o chat GPT é excelente para fazer as tarefas mundanas que nós sabemos fazer mas não vale a nossa taxa hora como os códigos que eu mostrei aqui eu mostrei avaliar se o código serve ou não Por isso para mim o chat GPT funciona bem quando ele não sabe responder ou me responde errado eu sei onde consertar o banco de dados o modelo dele é realmente impressionante o que mais me impressiona não é funcionar eu sei que funciona as teorias para isso existem e vem sendo evoluídas e desenvolvidas faz décadas mais para fazer modelos desse tipo custa extremamente caro eu estava assistindo no canal code Fusion que eu gosto muito e recomendo e no vídeo ele menciona o que o Sam altman o presidente da operar e falou hoje temos milhões de pessoas usando chat GPT Pela novidade mas ele não escala pra ordem de bilhões de pessoas que seria a escala de redes sociais como o Facebook ou fala que Google é pô Microsoft conseguem atingir com seus produtos o custo seria inviável segundo altma uma resposta do chat PT custa de 10 a 100 vezes o custo de pesquisa no Google ainda Precisa otimizar até 100 vezes até essa tecnologia para chegar num ponto onde vai ser economicamente viável para todo mundo usar no dia a dia como smartphones ou um Google e claro em alguns anos Isso vai acontecer hoje ainda não é esse dia pode levar 10 anos 20 anos e isso para otimizar custos para chegar num ponto Onde eu posso confiar quase 100% a ponto de não precisar de especialistas humanos isso realmente não vejo acontecendo tão cedo eu vejo sim sendo um excelente auxiliar para nós especialistas e no espectro menor ajudando não especialistas com perguntas simples do dia a dia algo um pouco melhor que as porcarias de Alexa seria ou cortana pra nós programadores tem outros aspecto muitos iniciantes acham que deveriam estudar tópicos de Inteligência Artificial porque futuro próximo todo mundo vai estar programando inteligências artificiais Mas eu sinto te informar que isso não vai acontecer como você pensa sim se você tem nível e talento para ser contratado para times de pesquisa da opeai da Microsoft da Apple do Google aí você teria chance de trabalhar na construção dessas inteligências mas fora dessas empresas gigantes não vai rolar o maior problema não são os algoritmos o problema é o treinamento para conseguir fazer um dali dois midge Journey ou esse table de Fusion gerar fotos e desenhos artísticos realistas precisou treinar cada um desses modelos com milhões de imagens diferentes por muito e muito tempo estamos falando a escala de PETA bites de dados milhares ou milhões de horas em dezenas ou centenas de servidores super caros datas Center dedicados com super sumo das placas de vídeo nvid ou seja você no seu pczinho notebook jamais vai conseguir produzir um modelo de verdade que vai além de um brinquedo modelo sérios do tamanho de um chat GPT custam milhões de dólares para produzir você não vai ter acesso a esse tipo de investimento e infraestrutura se alguém de uma Tex Startup desconhecida viet convidar para construir um modelo desses já sabemos que ele mora em Nárnia enxerga unicórnios e tem amigos imaginários não vai acontecer na prática quase todos nós programadores no máximo vão poder usar outros modelos prontos dos outros como da Open já tentou usar o chat GPT todo dia já deve ter visto como do nada uma resposta engasga dá erro de conexão ou como o site todas as vezes fica fora do ar por alguns segundos ou minutos Exatamente porque Nessa versão de agora ainda não escala precisa sair uma versão 2.
Related Videos
Python? Java? Rust? Qual a Diferença? | Discutindo Linguagens
49:14
Python? Java? Rust? Qual a Diferença? | Di...
Fabio Akita
278,695 views
Conversando sobre TDAH, Autismo, Ansiedade e Depressão | Tirando a Camisa de Força
1:00:53
Conversando sobre TDAH, Autismo, Ansiedade...
Fabio Akita
280,856 views
Sua Segurança é uma DROGA | Gerenciadores de Senhas, 2FA, Encriptação
41:14
Sua Segurança é uma DROGA | Gerenciadores ...
Fabio Akita
296,755 views
The AI Revolution Is Underhyped | Eric Schmidt | TED
25:38
The AI Revolution Is Underhyped | Eric Sch...
TED
1,361,597 views
Usando Git Direito | Limpando seus Commits!
47:20
Usando Git Direito | Limpando seus Commits!
Fabio Akita
173,451 views
Microsoft Windows 10: Your Old PC is Now Trash!
14:13
Microsoft Windows 10: Your Old PC is Now T...
Dave's Garage
891,853 views
Como Funciona o Boot de um Linux? | O que tem num LiveCD?
46:00
Como Funciona o Boot de um Linux? | O que ...
Fabio Akita
118,202 views
From Zero to Your First AI Agent in 25 Minutes (No Coding)
25:58
From Zero to Your First AI Agent in 25 Min...
Futurepedia
456,625 views
AI Just Created a Perfect Chip (But Nobody Understands How)
18:14
AI Just Created a Perfect Chip (But Nobody...
Underscore_
870,045 views
No one actually knows why AI works
10:30
No one actually knows why AI works
Alberta Tech
369,579 views
Fizemos o ChatGPT Conversar de Programador para "Programador" 🤖
29:52
Fizemos o ChatGPT Conversar de Programador...
Código Fonte TV
236,913 views
TUTORIAL ChatGPT - Curso GRÁTIS COMPLETO para Iniciantes, FAÇA DINHEIRO Com ChatGPT
28:55
TUTORIAL ChatGPT - Curso GRÁTIS COMPLETO p...
Rob Boliver - Como usar o CANVA
1,527,769 views
Entendendo GIT | (não é um tutorial!)
1:03:35
Entendendo GIT | (não é um tutorial!)
Fabio Akita
323,332 views
The Engine of Our Dreams Exists. It's a Clean, Powerful, Supercharged and Rotary Valved Two Stroke
22:29
The Engine of Our Dreams Exists. It's a Cl...
driving 4 answers
700,142 views
Top 3 Distros Linux | Qual Recomendo?
18:22
Top 3 Distros Linux | Qual Recomendo?
Fabio Akita
263,420 views
Ubuntu: The Rise and Fall of Linux for Human Beings
17:20
Ubuntu: The Rise and Fall of Linux for Hum...
YouTux Channel
60,847 views
This is the code that sent Apollo 11 to the moon (and it’s awesome)
19:09
This is the code that sent Apollo 11 to th...
Coding with Dee
720,189 views
3 Formas de usar ChatGPT como Programador
19:30
3 Formas de usar ChatGPT como Programador
Bonieky Lacerda
6,134 views
The Hole In Relativity Einstein Didn’t Predict
27:40
The Hole In Relativity Einstein Didn’t Pre...
Veritasium
7,443,354 views
AI 2027: A Realistic Scenario of AI Takeover
37:45
AI 2027: A Realistic Scenario of AI Takeover
Species | Documenting AGI
1,263,429 views
Copyright © 2025. Made with ♥ in London by YTScribe.com