2016-04-14 13 views
5

Sono molto nuovo a elasticsearch e al suo ridimensionamento e ho una domanda che non so nemmeno come affrontare.impostazione del server Elasticsearch per l'elaborazione dei dati da microservices

Ecco la situazione:

Ci sono diversi server con applicazioni Microservice Rails. Ognuno di loro sta ottenendo ognuno il proprio bel pezzo di dati (in particolare, aggregando i messaggi di diversi social network - quindi i campi di ricerca indicizzabili sono gli stessi in tutti i database).

Ho bisogno di trovare una soluzione che permetta di mantenere i dati in cui è attualmente e di impostare un server elasticsearch dedicato esclusivamente alla ricerca attraverso più database senza le rispettive app Rails attivando questo server di ricerca. Significa potenzialmente impostare ES su ciascuno degli altri server, definendo i modelli di ricerca lì ma facendo la ricerca su più modelli su un server totalmente diverso.

L'obiettivo finale di queste manipolazioni deve essere l'invio di tutti gli oggetti ActiveRecord/o tutti gli attributi correlati all'applicazione principale.

È persino possibile raggiungere? Forse qualcuno ha avuto un problema simile?

Sono un po 'perso su come iniziare con esso.

risposta

3

Questa domanda è un po 'ampia, ma penso che posso almeno indirizzarti nella giusta direzione da quello che ho capito. In primo luogo, vorrei iniziare affermando il problema come lo capisco.

Si dispone di più database popolati dal proprio microservizio ciascuno. Ogni database contiene informazioni simili a cui si desidera essere in grado di eseguire ricerche (ad esempio autore, corpo, titolo, ecc.). Si desidera un cluster elasticsearch che abbia accesso ai dati in tutti questi database e possa restituire un risultato che includa il corretto database e documento che corrisponde a una ricerca.

Elasticsearch è molto potente quando si tratta di gestire casi complicati come questo. Poiché tutti i tuoi dati hanno una struttura e campi simili, puoi semplicemente utilizzare un indice con campi aggiuntivi su di esso per memorizzare da quale DB proviene il documento e l'ID del documento da quel DB. Ciò ti consentirà di eseguire ricerche come "Dammi ogni post fatto da William Shatner attraverso questi 3 social network".

Per eseguire questa operazione sono necessari numerosi ulteriori elementi di funzionalità. Innanzitutto, è necessario un meccanismo per ottenere i dati dal database nell'indice di ricerca. Sul mio team, usiamo un IndexingService separato che sa come leggere i flussi di eventi e inviare i dati in tempo reale all'indice ES. Hai solo bisogno di decidere una strategia di indicizzazione (cioè quanto spesso aggiorni l'indice con nuove voci?). In secondo luogo, è necessaria una logica sul lato client per ottenere il risultato di ricerca non elaborato e recuperare la voce pertinente dal database.

Questo è solo un modo per risolvere il tuo problema. Se invece preferisci un approccio che ti permetta di mantenere un indice diverso per ogni social network, ma ha comunque un posto centrale che puoi cercare tra tutti loro suggerisco di utilizzare Elasticsearch Tribe Nodes. Fondamentalmente, è un singolo luogo per inviare una ricerca che conosce ogni cluster di ricerca e come interagire con loro per restituire un risultato di ricerca unificato.

Il modo migliore per imparare elasticsearch è quello di ottenere un cluster attivo e in esecuzione e iniziare a sperimentare! In bocca al lupo!

+0

Grazie @ chris-franklin, questo è esattamente il problema.Il servizio di indicizzazione menziona un'app separata che indicizza tutti i database esterni e quindi esegue la ricerca? – marinados

+0

Io stavo pensando di creare un'app di ricerca che punta a più DB remoti, li indicizza tutti, esegue una ricerca su più modelli e restituisce tutto tramite un'API. È una cattiva strategia? E guarderò nei Nodi Tribù, sembra promettente! – marinados

+0

Il nostro servizio di indicizzazione è un altro microservizio nella nostra architettura. Gestisce lo spostamento dei dati in Elasticsearch. Abbiamo un microservizio separato che gestisce la costruzione delle query di ricerca, inviandole a ES e quindi restituendo i risultati in un formato che l'interfaccia utente può facilmente utilizzare. Le vostre esigenze influenzeranno direttamente la complessità di questa architettura. Le nostre esigenze significano che abbiamo bisogno di servizi scalabili individualmente per gestire ogni passaggio. –

Problemi correlati