Últimamente he estado leyendo mucho sobre microservicios, y aquí están algunas de las conclusiones que obtuve hasta ahora (corríjame si me equivoco en algún momento).
- La arquitectura de microservicios combina bien con el diseño dirigido por dominios. Por lo general, una MS representa un contexto acotado.
- Si el microservicio A requiere una funcionalidad que reside en el microservicio B , mi modelo probablemente esté equivocado y A y B en realidad deberían ser un micro servicio / BC.
- La comunicación sincrónica entre microservicios (solicitudes HTTP directas) es mala, porque desafía el propósito de los microservicios e introduce el acoplamiento entre componentes.
- La comunicación asincrónica entre servicios es deseable. Los servicios deben publicar eventos en las colas de mensajes, para que otros servicios puedan suscribirse y procesar su parte del evento, o usarlo para replicar una parte de los datos necesarios para su contexto. De esta manera, los servicios pueden procesar solicitudes, incluso otros servicios están inactivos, lo que no sería el caso en la comunicación sincrónica.
- Si el microservicio A publica un evento, el microservicio B se suscribe a ese evento y produce un nuevo evento como resultado, el microservicio A no debe ser el que procesa el evento recién creado, ya que sería una dependencia circular. En este caso, debemos introducir un tercer microservicio o combinar A y B en el microservicio AB .
- El microservicio es en realidad un término engañoso. Deberíamos luchar por contextos pequeños, pero ese no tiene por qué ser el caso. El término no debe ser "microservicio", sino "lo suficientemente grande como para hacer el servicio de trabajo ".
- Los microservicios nos permiten introducir nuevas funcionalidades con más facilidad y sin temor a que rompamos todo el sistema. Se puede hacer introduciendo un nuevo servicio o refactorizando uno de los existentes.
- Cada microservicio debe tener su propio almacenamiento de datos. La replicación / duplicación de datos es un comportamiento deseable en esta arquitectura.
Además de confirmar mi comprensión de esta arquitectura, mi otra parte de la pregunta está relacionada principalmente con el descubrimiento de servicios. Si los servicios se comunican de forma asíncrona y utilizan una cola de eventos central como Amazon SQS, ¿eso significa que el descubrimiento de servicios no tiene su lugar en una arquitectura como esa?
Los servicios no deben tener ningún conocimiento sobre otros servicios en el sistema. ¿Solo conocen su contexto y los eventos a los que deberían publicar o suscribirse?