Una funzione di ricerca può essere modellata come un servizio separato con responsabilità distinte dai due servizi menzionati. Quindi, l'approccio qui potrebbe essere quello di creare un nuovo servizio ('ricerca') e di archiviare una copia dei dati da entrambi i servizi in una forma che sia facile da indicizzare e cercare, eventualmente anche denormalizzata per dare rapidamente risultati il formato desiderato.
Quindi, ad esempio, potresti avere il database SQL legacy utilizzando ad es. mySql, l'altro microservice che utilizza ad es. MongoDB e il nuovo servizio di ricerca utilizzando elasticsearch con i dati di entrambi già incollati insieme (denormalizzati) per un accesso più conveniente. ovviamente i dettagli dipenderanno dal tipo di ricerche che devi eseguire.
I dati dei due servizi potrebbero essere trasferiti in modo asincrono all'indice di ricerca tramite un bus di eventi come Kafka o Hermes per aumentare il throughput e ridurre l'accoppiamento tra i servizi. Un cambiamento in uno dei due servizi invierebbe un evento informando il servizio di ricerca anche per aggiornare i suoi dati.
Ovviamente vi è il costo di un ulteriore ritardo tra le modifiche nei servizi e nel servizio di ricerca, ma poiché i microservizi vengono solitamente utilizzati nei sistemi distribuiti, alcuni ritardi e incoerenze temporanee sono comunque inevitabili. Avere un servizio aggiuntivo e l'utilizzo di spazio aggiuntivo per una copia di dati che è già negli altri due servizi è anche un costo tipico di un sistema altamente distribuito e scalabile che utilizza i microservizi.