[DÚVIDA] Como micro services se comunicão
Estou querendo desenvolver uma arquitetura de microservices e até hoje trabalhei em monólitos onde as apis compartilhavam uma seção, mas em um novo projeto queremos implementar arquitetura de microservices.
O que quero saber é como elas se comunicam, e como elas garantem que a requisição vem do serviço que a requisitou e não um hacker tentando imputar dados via api. como que eu sei que os dados do usuário que uma api está enviando ou solicitando da outra são dados válidos.
Se alguém poder me dar uma ajuda (que pelo menos passe de falar: usa JWT ou Oauth 2.0) ficarei grato.
Primeiro, a arquitetura de microsserviços é uma das principais modinhas que apareceram em TI. Fique longe o quanto puder. Se precisar dele, você estará em uma equipe cheia de gente com bastante conhecimento. Em hipótese alguma uma pessoa consegue lidar com tudo isso sozinho, e até mesmo não tem porque alguém sozinho tentar mexer com isso, em qualquer análise que se faça.
Reforço que quase ninguém precisa. Alguns dos maiores sites não usam e se dão muito bem, por exemplo Wikepedia, Instagram e os maiores ERPs do mercado. Se uma empresa precisa por organização de equipes, e raramente precisa mesmo, e algumas empresas estão voltando atrás até por isso, espere estar em uma equipe com centenas ou milhares de programadores.
Microsserviços é computação distribuída, que é considerado o problema mais difícil de resolver da computação, só pessoas com extraordinário conhecimento farão corretamente. É tão complicado que a maioria faz outra coisa, chama de microsserviços e acha que sabe fazer.
A comunicação entre eles costuma ser toda em rede interna, então o hacker não tem acesso e não precisa de maiores preocupações no software, só na infra. Se não for assim, já é um pouco preocupante, mas se ainda fizer sentido, a proteção é a mesma de qualquer outro site, pode ser com Oauth. Os detalhes dependem de como a pessoa deseja e o que ela está fazendo, não é uma forma universal.
Algumas informações que podem ajudar:
Faz sentido para você?
Espero ter ajudado.
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).
Ola @MestriRodrigo, separei sua pergunta em topicos para facilitar.
Como se comunicam?
Em uma arquitetura distribuida (micro-servicos) as aplicacoes podem se comunicar internamente de duas maneiras, sincrona ou assincrona. Sincrona: Comunicacao sincrona exige que as duas aplicacoes estejam rodando ao mesmo tempo e capaz de responder uma solicitacao quase instantaneamente. Normalmente utiliza protocolos como o HTTP. A parte ruim desse metodo e que se por algum motivo uma das aplicacoes estiver indisponivel no momento, o sistema como um todo para de funcionar. Assincrona: Nesse metodo, a estrutura do sistema fica mais complexa e normalmente exige um intermediario entre os dois sistemas para se comunicar. Existe varias ferramentas para suportar esse tipo de estrutura, normalmente chamadas de message brokers, pelo meu conhecimento, uma das mais conhecidas e o kafka. A parte ruim de comunicacoes assincronas e que a complexidade do sistema aumenta, dificultando rastreamento de errors e aumentando tempo de desenvolvimento. [Opiniao] Projetos para utilizacao de micro-servicos:
- Intuito de aprendizado. (Sistemas/Empresas que lidam com grande trafico de dados em sua maioria adotam micro-servicos pela sua resiliencia e maior controle de escalonamento. Aprender essa arquitetura pode te dar vantagens em caso de uma entrevista.)
- Projeto que ja tem ou preve ter em curto-prazo grande trafego de informacoes. Como disse anteriormente, as vantagens de resiliencia a escalonamento sao fundamentais para manter as coisas funcionando.
Caso nao seja uma das opcoes acima, aconselho manter em monolitos pela praticidade e velocidade de desenvolvimento.
Como garantem que a requisicao vem do servico que a requisitou?
Normalmente os micro servicos estao rodando na mesma rede/cluster e como a comunicacao ocorre internamente, voce nao precisa autenticar de quem veio a requisicao. O servico recebe a requisicao e responde sem checar a origem. Lembrando que essas portas de entradas nao podem ser acessiveis publicamente.
Como validar os dados?
Cada servico e responsavel de validar os dados de entrada e caso a requisicao esteja em um formato invalido, deve responder com um error (por exemplo erro status 400) como se fosse um usuario normal.
As respostas sao validas para comunicacoes internas apenas, no caso de comunicacao com clientes (por exemplo navegador de usuario), as regras de seguranca e validacao de dados sao outras. Seria melhor discutir sobre isso em outra thread.
Espero ter ajudado e tambem espero que alguem tenha algo para debater ou complementar.
Maior parte da comunicação é por endpoints com protocolo http, então o remetente e o destinatário envia e recebe JSON por essas comunicação.
O mias comum atualmente, mas pode mudar.