web-dev-qa-db-fra.com

Service de messagerie dans l'architecture de microservice

Qui devrait gérer l'envoi d'e-mails dans une architecture de microservices si c'est un envoi d'e-mails à l'aide d'API comme Sendgrid, Mandrill, etc.?

  • chaque microservice doit envoyer par lui-même, car il ne s'agit que de l'API HTTP (certains inconvénients: chaque microservice doit connaître les e-mails de chaque utilisateur du système, les avantages: facile à mettre en œuvre)
  • un autre microservice devrait envoyer des e-mails en fonction des événements (certains des inconvénients: point de défaillance unique, avantages: les e-mails ne seraient connus que par ce microservice et la modification de l'e-mail dans le profil ne changerait qu'en un seul endroit)
8
user1318496

Comme l'a souligné Laiv dans les commentaires, ce n'est pas une réponse claire. Cela dépend beaucoup de l'endroit où sont vos priorités.

Un service de messagerie central unique peut être le plus propre et le plus "approprié" dans un environnement de microservices. C'est certainement quelque chose que je considérerais sérieusement.

Mais la création d'une bibliothèque d'e-mails configurable pour résumer les détails du service de messagerie utilisé et relier chaque microservice qui doit envoyer des e-mails à cette autre option pourrait bien être viable (et c'est bien sûr la façon dont les choses ont été faites depuis des décennies).

L'avantage de la première option (au-delà de sa pureté architecturale) est que vous n'avez qu'une seule chose à changer si quelque chose change dans l'environnement de messagerie. L'inconvénient est que vous avez maintenant introduit un point de défaillance unique, si le service de messagerie que vous avez créé tombe en panne pour une raison quelconque, vous ne pouvez plus envoyer d'e-mails du tout. Bien sûr, l'exécution de plusieurs instances et d'équilibreurs de charge pour diriger le trafic entre eux peut en partie atténuer ce risque, au prix d'une complexité accrue.

La deuxième option présente l'inconvénient distinct dont vous avez besoin pour reconstruire et redéployer chaque microservice unique si votre bibliothèque de messagerie change.

8
jwenting

Il est préférable d'envelopper les API externes dans un service interne avec une API indépendante du fournisseur. De cette façon, vous pouvez changer de fournisseur d'API externe avec un seul changement de service.

Chaque service que vous avez est potentiellement un point de défaillance unique (en supposant qu'ils font tous des choses essentielles). Si cela vous préoccupe, examinez les configurations à haute disponibilité à l'aide de services sans état redondants derrière les équilibreurs de charge avec basculement automatique, ou examinez les solutions de courtier de messages où la communication entre les services se fait via un courtier de messages fiable qui permet un temps d'arrêt modéré de tout service jusqu'à ce qu'il est prêt à recevoir à nouveau des messages.

3
Joeri Sebrechts