Ultimamente, tenho lido muito sobre microsserviços e aqui estão algumas das conclusões que tirei até agora (por favor, corrija-me se estiver errado a qualquer momento).
- A arquitetura de microsserviços combina bem com o design orientado por domínio. Normalmente, um MS representa um contexto limitado.
- Se o microsserviço A exigir uma funcionalidade que reside no microsserviço B , meu modelo provavelmente está errado e A e B devem realmente ser um microsserviço / BC.
- A comunicação síncrona entre microsserviços (solicitações HTTP diretas) é ruim, pois desafia o objetivo dos microsserviços e introduz o acoplamento entre os componentes.
- A comunicação assíncrona entre serviços é desejável. Os serviços devem publicar eventos nas filas de mensagens, para que outros serviços possam se inscrever e processar sua parte do evento ou usá-lo para replicar uma parte dos dados necessários para o seu contexto. Dessa forma, os serviços podem processar solicitações até que outros serviços estejam inativos, o que não seria o caso na comunicação síncrona.
- Se o microsserviço A publica um evento, o microsserviço B se inscreve nesse evento e produz um novo evento como resultado, o microsserviço A não deve ser o único a processar o evento recém-criado, pois isso seria uma dependência circular. Nesse caso, devemos introduzir o terceiro microsserviço ou combinar A e B no microsserviço da AB .
- Micro-serviço é na verdade um termo enganador. Devemos lutar por pequenos contextos, mas isso não precisa ser o caso. O termo não deve ser "micro-serviço", mas " grande o suficiente para fazer o serviço de trabalho ".
- Os microsserviços nos permitem introduzir novas funcionalidades com mais facilidade e sem medo de quebrar o sistema inteiro. Isso pode ser feito introduzindo um novo serviço ou refatorando um dos existentes.
- Cada microsserviço deve ter seu próprio armazenamento de dados. A replicação / duplicação de dados é um comportamento desejável nessa arquitetura.
Além de confirmar minha compreensão dessa arquitetura, minha outra parte da questão está principalmente relacionada à descoberta de serviços. Se os serviços estão se comunicando de forma assíncrona e usando a fila central de eventos como o Amazon SQS, isso significa que a descoberta de serviços não tem seu lugar na arquitetura assim?
Os serviços não devem ter nenhum conhecimento sobre outros serviços no sistema. Eles conhecem apenas o contexto e os eventos que devem publicar ou assinar?