Búsqueda a través de datos a través de varios microservicios

7

Tengo datos para un determinado dominio distribuido entre un microservicio y una base de datos heredada. Tengo una búsqueda que abarca campos tanto en la base de datos heredada como en la de microservicio. Anteriormente (antes de la división del microservicio), se hacía con una consulta de 1 sql. Ahora necesito una llamada REST y una consulta a la base de datos heredada para servir esta funcionalidad de búsqueda. Estamos hablando de unos pocos millones de filas aquí. ¿Cómo puedo modelar esto mejor? Debido al volumen de datos, la llamada REST también devuelve resultados paginados. El enfoque ingenuo para lanzar una llamada SQL y combinar y combinar resultados con la respuesta REST es demasiado lento y no es realmente práctico.

    
pregunta senseiwu 05.07.2017 - 12:45

1 respuesta

13

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. el formato deseado.

Entonces, por ejemplo, podría tener la base de datos SQL heredada usando, por ejemplo, mySql, el otro microservicio que usa, p. MongoDB, y el nuevo servicio de búsqueda que usa elasticsearch con datos de ambos ya pegados juntos (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 serían mejor transferidos 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 para 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 utilizan generalmente en los 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 se encuentra en los otros dos servicios también es un costo típico de tener un sistema altamente distribuido y escalable que utiliza microservicios.

    
respondido por el Michał Kosmulski 05.07.2017 - 12:59

Lea otras preguntas en las etiquetas