Une fonction de recherche peut être modélisée comme un service distinct avec une responsabilité distincte des deux services que vous mentionnez. Donc, l'approche ici pourrait être de créer un nouveau service (`` recherche '') et de lui faire stocker une copie des données des deux services sous une forme facile à indexer et à rechercher, éventuellement également dénormalisée afin de donner rapidement des résultats dans le format souhaité.
Ainsi, par exemple, vous pouvez avoir la base de données SQL héritée en utilisant par exemple mySql, l'autre microservice en utilisant par exemple MongoDB, et le nouveau service de recherche en utilisant elasticsearch avec des données des deux déjà collées ensemble (dénormalisées) pour un accès plus pratique. bien sûr, les détails dépendront du type de recherches que vous devez effectuer.
Les données des deux services seraient mieux transférées de manière asynchrone à l'index de recherche via un bus d'événements tel que Kafka ou Hermes afin d'augmenter le débit et de réduire le couplage entre les services. Un changement dans l'un des deux services enverrait un événement informant le service de recherche de mettre également à jour ses données.
Bien sûr, il y a le coût d'un délai supplémentaire entre les changements dans les services et dans le service de recherche, mais comme les microservices sont généralement utilisés dans les systèmes distribués, certains retards et incohérences temporaires sont de toute façon inévitables. Avoir un service supplémentaire et utiliser un stockage supplémentaire pour une copie de données qui se trouve déjà dans les deux autres services est également un coût typique d'avoir un système hautement distribué et évolutif utilisant des microservices.