J'ai quelques interrogations sur une architecture que je souhaiterai mettre en place dans un projet.
Voici le contexte, plusieurs services métiers autonomes dans l'esprit "microservices", chacun a sa base Postgresql dédié
Nous avons besoin de rajouter une recherche poussée dans l'architecture, et l'usage d'ES nous parait pertinent.
Un bus d'évènement est également en place.
Nous aimerions que sur un évènement bien précis, un logstash par exemple, aille récupéré des données des services A et B par exemple, merge ces données dans un seul document, et l'envoi dans l'ES.
Je recommande de modifier la couche applicative si possible et d'envoyer les données dans elasticsearch dans la même "transaction" que celle utilisée pour sauver les données en base de données.
Ce genre de besoins peut être couvert par l'utilisation d'un broker de messages comme Rabbitmq ou Kafka (et toute la famille des MQ), Logstash ayant des plugins input et output pour communiquer avec la plupart d'entre eux.
Cela permet de normaliser les transactions entre vos microservices sans que l'un ne soit dépendant des modifications d'implémentations d'un autre.
Le merge peut être réalisé soit via l'update de documents indexés sur la base d'un id unique (en ciblant des champs différents), via un index temporaire ou même une queue différente sur le broker.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.