Una función de búsqueda se puede modelar como un servicio separado con responsabilidad separada de los dos servicios que menciona. Entonces, el enfoque aquí podría ser crear un nuevo servicio ('búsqueda') y hacer que almacene una copia de los datos de ambos servicios en una forma que sea fácil de indexar y buscar, posiblemente también desnormalizada para dar resultados rápidamente en El formato deseado.
Entonces, por ejemplo, podría tener la base de datos SQL heredada usando, por ejemplo, mySql, el otro microservicio usando, por ejemplo, MongoDB, y el nuevo servicio de búsqueda usando Elasticsearch con datos de ambos ya pegados (desnormalizados) para un acceso más conveniente. por supuesto, los detalles dependerán del tipo de búsquedas que necesite realizar.
Los datos de los dos servicios se transferirán mejor de forma asíncrona al índice de búsqueda a través de un bus de eventos como Kafka o Hermes para aumentar el rendimiento y reducir el acoplamiento entre los servicios. Un cambio en cualquiera de los dos servicios enviaría un evento informando al servicio de búsqueda que también actualice sus datos.
Por supuesto, existe el costo de un retraso adicional entre los cambios en los servicios y en el servicio de búsqueda, pero dado que los microservicios se usan generalmente en sistemas que se distribuyen, algunos retrasos e inconsistencias temporales son inevitables de todos modos. Tener un servicio adicional y usar almacenamiento adicional para una copia de datos que ya está en los otros dos servicios también es un costo típico de tener un sistema altamente distribuido y escalable que utiliza microservicios.