La ricerca tra i dati incrocia diversi microservizi

7

Ho dati per un determinato dominio distribuito tra un microservice e un database legacy. Ho una ricerca che si estende su campi su entrambi i database legacy e microservizi. Precedentemente (prima della divisione microservice), veniva eseguito con 1 query sql. Ora ho bisogno di una chiamata REST e una query al database precedente per offrire questa funzionalità di ricerca. Stiamo parlando di alcuni milioni di righe qui. Come posso modellare questo meglio? A causa del volume di dati, la chiamata REST restituisce di solito risultati paginati. Un approccio ingenuo per attivare una chiamata SQL e combinare e unire i risultati con la risposta REST è troppo lento e non molto pratico.

    
posta senseiwu 05.07.2017 - 12:45
fonte

1 risposta

14

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.

    
risposta data 05.07.2017 - 12:59
fonte

Leggi altre domande sui tag