olá hoje não vou conversar sobre o conceito de integração e um sistema de mensageria o curso de arquitetura de sistemas avançados de gestão não vêm chamando o objetivo das aulas é só mostrar o que é a arquitetura engenharia comunicação assim como entre os serviços utilizando e gerenciamento de erros numa arquitetura assim como básicos pra entender por que não conversar hoje com o entendimento básico sobre a cpi quando conhecer um pouco sobre comunicação de aplicativos externos da arquitetura como apps mobile aplicações web com essa plataforma é um conhecimento aprofundado no assunto mais interessante em um conhecimento
básico sobre essas bocas conhecer pelo menos uma ferramenta como funciona kaká nessa em que o gênesis o contrato da plataforma de e mensageria bom vamos iniciar então sobre o que é uma arquitetura em mensageria uma arquitetura básica sobre o uso de mensagens é mais ou menos algo assim imagina que nós temos tantos serviços externos temos aplicações cliente como por exemplo uma aplicação web ou mobile fazer comunicações através de http por um serviço esse serviço terá então um proxy de entrada ele próprio poderá nos tirar requisições serviço um serviço dois anos aqui dentro e qualquer operação
realizada nesses serviços isso será gerada uma mensagem então possivelmente isso aqui pode fazer um eclético serviço um no qual ele vai comunicar com um naipe ae com serviço externo e gera uma mensagem esta mensagem pode ser consumida por outros serviços da mesma maneira pode ser o serviço 2 recebendo um recorte uma nova mensagem a mãe da arquitetura inteira uns advento uma operação que foi realizada note se que nesse exemplo de arquitetura eu tenho o ágata o próprio http americanos eles 1 e 2 no qual eles estão sendo expostos no mundo externo mas o serviço três
não está linkada sproc esse é um exemplo de serviços que não vão ter comunicação com o mundo externo diretamente porém esse aqui é um serviço que vai estar conectado diretamente começa de bronca ou seja a arquitetura em mensageria nos permite que a gente consiga ter serviços que se comunicam com aplicações externas da nossa cultura e e aplicações que não se comunicam diretamente porém elas estão consumindo mensagens de serviços que tiveram sua comunicação então em operações como por exemplo cadastro o usuário aplicação pode comer pode chegar à fazenda quati http um serviço que irá criar os
usuários o usuário pode colocar externo pode ser inserido no banco de dados enfim esse serviço para lidar com a lógica de criação dos olhos após que tiver pronto é realizado a operação de cadastro o usuário esse serviço responde de volta dizendo usar casaco sucesso que o e do usuário e possuir também um serviço uma lógica de criar uma mensagem essa bronca que por sua vez vai ser espalhada vai ser feito um bom teste para todos os outros serviços interessados em ouvir mensagens sobre cada um dos olhos então assumindo por exemplo que o serviço três serão
serviço de pagamentos por exemplo esse serviço pode sim estar interessado em ouvir qualquer mensagem de cadastro o usuário para tudo isso tinha um usuário cadastrado uma atualização o usuário informação cadastral usuário esse serviço pode crescer e ficar sabendo na hora de fazer uma cobrança poder colocar informações necessárias enfim esse é só um exemplo pode ter várias outras utilidades aqui o prós e contras a ter uma arquitetura mais ou menos com aquela que eu mostrei o mensageiro a grande vantagem é o complemento então ficou claro que eu tenho uma arquitetura isso não comunicam diretamente entre sí
é que uma comunicação através de março de golpe e essa comunicação ela acaba sendo a cinco anos então tem um serviço que é e saberei quest e facilitando a operação manda um responsável do cliente e também mandou uma mensagem fazendo qualquer serviço o desacoplamento acaba facilitando também o turno em play então se eu quiser hoje pela futura quando colocar um sistema novo de um serviço novo modo internadas features e eu quiser que serviço consiga e lidar com dados de usuário ou qualquer outra informação basta colocar esse serviço à minha stec lugar esse serviço não meço
de bronca que começar a escutar as mensagens que vão vir e usuários onde todos os tópicos que possuem endereço fazendo isso é preciso alterar o serviço que produz a mensagem que o serviço tem interesse e simplesmente coloco ele lembrou que ele começa a escutar mensagens e automaticamente ele vai começar a receber os dados é conseguir trabalhar então fica muito fácil eu lugar um serviço novo sem ter que alterar outros serviços a que ele comece a funcionar da mesma maneira seria remover o futuro de um serviço é muito fácil tirar um serviço de colocar outro no
lugar ou sem tirar um serviço por uma fita que não existe mais que a arquitetura vai cantar funcionando mas será impactado nenhum serviço que produz a mensagem para aquele que foi removido mais afetado porque não ter essa comunicação direta então nunca vai acontecer o caso de serviço um tatu mandar uma mensagem diretamente isso 232 já não existe mais na rede ele quebrou esse e se quebrar da comunicação falharam conta será mais por ser tudo feito de uma maneira muito mais reativa do que prático outro ponto positivo na comunicação a synchro então você fazer determinadas operações
no qual não existe não é somente exige que o aplicação cliente é o futebol o ebep e que ele traduz perdendo então um grande exemplo disso seria um pagamento usando cartão de crédito para operações de cartão de crédito de uma operação há cinco anos então uma maneira que daria para fazer eu tenho aplicação que quando o usuário clica em comprar e se comprar vai gerar uma rica e méxico é um serviço de pagamento 13 cobranças alguma coisa do gênero e serviços responde por claro dizendo 'ok recebemos a mensagem quando estiver pronta a gente avisa e
por baixo dos panos serviço pode também ter recebido a mensagem tsr creche tem produzido uma mensagem e serviço vai ficar esperando um motor serviço mandar mensagem de volta pra dizer o serviço foi realizado com sucesso o pagamento foi efetuado então se aquele aplicação web está ali esperando receber esse pagamento foi realizado não pode ficar fazendo por exemplo conklin segunda segundo okada x 2º ficar fazendo request plantando status pagamento e no momento que estiver pronto ele vai ter concluído ou uma falha aconteceu durante o processo e isso consegue responder por 45 que o cliente inicialmente travada
entre cada uma conexão aberta o tempo todo isso acaba gastando menos consumindo menos recursos do servidor e no seu computador uma máquina cliente que estava na classificação então tem outras maneiras de fazer isso na ativa com os óculos por exemplo mas a ideia ter toda uma arquitetura que no momento que eu faço e quest isso vai ter uma resposta de imediato usuário sendo essa resposta à informação que está procurando ou só um ok estamos processando alguma coisa e por baixo dos panos quando a cultura já está fazendo trabalhos de forma assíncrona com serviços com que
executando deter as operações com base nas mensagens foram produzidas então acaba sendo muito bom porque temos escala habilidade eu nunca vou sobrecarregar de uma maneira sobrecarregar um serviço de uma maneira que ele vai se comprometer e acabar negando recurso o marcelo vai acontecer é a minha fila de tarefas a serem executadas acaba subindo a cada crescendo muito mais do que um serviço consegue dar conta isso promessas de boca validar automaticamente para nós então a gente tem esse buffer e completamente o correto seria pegar esse serviço está com gargalo escalar ele está maior de distâncias para
então fazer com que essa fila acaba sendo processado mas a vantagem que ano teria então esse serviço está sobrecarregado respondendo não não vou passar essa mensagem estou sobrecarregado ou por último ele quebra cai e os próximos seqüestro foram chegar nele vai simplesmente negar a produção está rodando a esse tipo de falha a gente não tem por causa desse banco e acaba sendo nessa comunicação assim como e uma vez que o serviço consegui pegar para si aquela mensagem ele vai acabar então fazendo na operação até manda uma outra mensagem para que os serviços consiga ver que
aquela tarefa foi realizada então automaticamente já tem uma uma fila de tentativas mas tenho uma filha de tarefas a serem executadas e uma vez que estiver pronto e consegui executar ele vai fazer vai executar e tudo vai funcionar sem ter que fazer uma comunicação direta e tentativas por falha ou qualquer tipo tudo automaticamente of the box em uma simples casualidade é por isso que comentei com meu tempo de serviço que está sobrecarregado a filha deles só aumenta cada vez mais mas o que ele precisa fazer sempre escalar o número de instâncias isso utilizar um método
de boca como capital por exemplo o carro sendo bem configurado bem acertado e consegue escalar inúmeros serviços e um carro automático de linces para ti por exemplo então eu consigo ter prestado um serviço que está sobrecarregado se escalar para três instâncias ele consegue automaticamente pegar essa fila dividir ela em diferentes canais z e atribuir os canais para os restantes estão conectados então automaticamente acaba sendo processado ainda assim garantindo ordem das mensagens que forem colocados nos pés de broncas enfim então têm maneiras bem legais para a estabilidade sem a nós temos que nos preocupar em como
consumiram com ordem consumir as mensagens outra vantagem também acaba sendo broadcasting dado que vai acabar tendo situações que um serviço vai querer mandar uma mensagem para notificar um outro serviço tem uma comunicação assíncrona de boca consigo literalmente pegar uma mensagem colocar naquele mês os blocos devendo produzir a mensagem que a operação de risco convida todos os serviços que vão estar escutando esse tópico recebe a mensagem da de uma forma que se eu tivesse que fazer isso 100 metros de boca fazer uma comunicação direta toda vez que eu posso pegar um serviço novo na rede um
serviço já está no sistema tivesse agora uma fita o que for de interesse dele ouvir determinadas operações para aquele serviço produto da cultura mensagem manda eu teria que não se modificar o código dos serviços que está agora interessado em ouvir mais uma mensagem como também teve que pagar esse serviço que produz a mensagem e dizer a hora no mandamento é só por ser visto em dois e manda para 3 também então que vai ter um certo acoplamento entre os serviços e tudo vai ter uma complexidade maior não compartilhar um ponto que eu mandei preciso um
dos dois ele falhou o que eu faço agora acaba de publicar um livro dois não posso roubar que tenho é que eu faço agora então esse tipo de problema que acaba sendo resolvido simples poderão produzir mensagem lugar e automaticamente todos revistos interessado naquele tópico naquela mensagem bom ouvir então é tudo fácil já pronto também acaba permitindo que a gente consegue fazer ele só se esforce ser basicamente eu ter uma lista de mensagens é um fila de de eventos de operações que esses eventos juntos vão meter numa determinada a boleta no estado então por exemplo dado
que eu tenho uma conta bancária eu iniciei a conta bancária com um saldo zero e sem nenhuma transação momento que eu fizer por exemplo um depósito isso foi um evento mensal de depósitos em reais seria então meu estadual uma conta bancária com uma transação e saúde 100 reais se eu puder fazer mais depósitos transferências pagamentos e tem cada operação vai ser um evento e se eu pegar o estado inicial foi uma conta com saldo zerado e foi refazendo esses eventos no final do estado que eu tenho hoje ou seja se eu tenha formação por exemplo
demonstrado atual um banco de dados e por algum motivo desse banco de dados ele é perdido eu realmente pegar toda essa fila de eventos que eu tenho e reprocessar ela conseguiu reconstruir o banco de dados então claro tem vários padrões que a gente só sem isso é uma coisa que é tempo de avançar com um pouco grande para deter as operações mas ocorre mesma idéia principal do open source é ter essa fila de eventos usando metros de boca fica muito fácil de poder trabalhar com cada mensagem ser um evento então conseguiu aplicar e vem só
se em cima disso o ponto negativo seria ter 155 por taylor na então minha arquitetura inteira acaba sendo comprometida se com o meu serviço de mensageria cai por algum motivo se aquele serviço começa a falhar a arquitetura inteira quer inteira não de uma maneira que o serviço para se comunicar mas se parte da operação de um serviço recebe request é colocar a mensagem de que esse fato de colocar a mensagem nesse momento de bronca no serviço de mensageria se isso não for realizado aquela mensagem será perdida então nunca mais não poder a fazer com que
o serviço saiba de que aquilo aconteceu e aí eu tenho um problema em um vôo perdeu bank perdendo um buffer não só pelas comunicações do serviço como também perco todos os eventos que aconteceram foram gerados pelo serviço então e arquitetura inteira se quebra é o único ponto que não pode faltar falhar por nada outro outro ponto também acaba sendo um monitoramento mais difícil dado que todos os serviços se comunicam entre si uma maneira assíncrona é complicado conseguir fazer o rastreamento de uma determinada operação gerando fluxo no qual os recursos envolve mais um serviço então eu
vou ter sempre um sequestro entre os serviços serviço por uma mensagem ou serviço consome essa mensagem faz manter uma operação talvez operação gere mais uma mensagem pouco serviço pega essa mensagem fala da conduta na operação e no final das contas se for ver eu tenho três serviços que fizeram operações por causa de um reconhece que entrou lá no primeiro serviço então como rastrear estas operações que foi linkado por aquilo e quest é complicado eu tenho logos que vão ser gerados em diferentes serviços em diferentes momentos então pegar tudo isso e agrupar e falaram esses logs
12 e 13 estão agrupados estão relacionados de certa forma que se tem uma certa complexidade para fazer mas tem sim uma solução um patamar que pode servir para nos auxiliar nesse ponto é bom falar um pouco mais de comunicação a sincronia entre o serviço vamos imaginar então um cenário simples takk de comunicação no qual vou te navegação web está fazendo a 4ª dp através de um proxy e o serviço número 1 é o serviço que vai estar recebendo a seqüestro digamos que serviço de uma determinada operação operação simples quando a mensagem de boca-a-boca cônsul em
possui as mensagens misson e vamos dizer que o exemplo o serviço dois quer consumir todas as mensagens que o serviço está produzindo então esse co2 como foi essa a mensagem fazendo operações coloca no seu banco de dados enfim qualquer operação realizada por lógica 2002 e como resultado pode ser que ele queira mandar mais uma mensagem que eu tenho também um caso com serviço 3g possui interesse em receber mensagens do serviço 22 produzir mensagem o serviço três páginas bronca consumir essa mensagem fazer determinadas operações enfim pode consumir e produzir uma outra mensagem ou pode morrer a
operação fluxo de mensagens aí pode ter várias lojas e bares meio de proceder mas isso pode ser um caso verídico um caso que aconteça e tem um serviço que produz mensagem que um outro serviço consuma esse serviço consumo mensal de produção mais uma outra e outros serviços acaba querendo consumir essa mensagem então determinar as operações acaba sendo uma comunicação assíncrona e desocupada e indireta serviço 1 e 2 eo serviço 2003 então ele seria mais ou menos um exemplo é uma operação de como funcionaria essa comunicação assíncrona usando um serviço de mensageria só que esse a
esse exemplo ele parece muito mais uma comunicação linear tem muito mais um conceito de pipeline por exemplo o plano delineado no qual tem um serviço que ele provavelmente saia o resultado com um produto serviço e serviços produzidos mensagem esse resultado com o terceiro e assim vai eu posso chegar um ponto que eu tenho uma comunicação entre os serviços de uma maneira um pouco mais complexa vamos a um exemplo anterior eu tenho um serviço número 11 ele fez uma alteração escreveu uma mensagem no blog porém ao invés de ter visto dois homens portando aquela mensagem eu
tenho serviço 2 e 3 essas duas flechas são flashes de mensagens que estão passando pelo nada de bronca que são somente mensagens assim cruzamentos indirectamente ligado para o serviço 23 a essa faixa tem um sentimento dele no meio o serviço 112 mensagens 23 será responsável em consumir sua mensagem de maneira paralela por exemplo é completamente diferente serviço 23 não sabe que eles existem e só sabe aqueles com consumindo a mensagem de serviços 1 e cada um deles a sua operação seu trabalho diferente então movimento independente dessa maneira a gente tem novamente um consumidor mais dois
consumidores interessados pelo meio da mensagem no mesmo tópico que seria de serviço número ainda pode escalar para um ponto de ser 2012 vai produzir mensagem 145 têm interesse em ouvir que o serviço empresa produz mensagem dos serviços e 17 têm interesse ou vídeo então a gente pode chegar um ponto que a complexidade ea o monitoramento desses serviços e dessas a operações que são realizadas torna muito complexo imagine como é que eu faço para rastrear por exemplo o serviço do número 6 ele selecionou 16 apresentou um determinado erro como eu consigo rastrear que não consigo entender
que 66 exemplo uma mensagem que veio do serviço 3 que por sua vez executou uma operação que de uma natureza uma mensagem que veio do serviço on que por sua vez foi realmente ter ligado por causa de um projeto http que veio de um cliente x então são muitos pontos que acaba sendo complicado poder com todo este rastreio até entender que a origem do problema foi esse request que teve esse pelouro que foi nesse estado outro serviço processou com esse estado nessa mensagem então e gerou uma certa inconsistência de dados isso sim pode acontecer já
tem com o centro de dados e então a gente acaba tendo uma falha no serviço