Interconnettere i nodi in un'infrastruttura distribuita Java per l'elaborazione tweet

0

Sto lavorando a una nuova versione di un vecchio progetto che ho usato per scaricare ed elaborare gli stati degli utenti da Twitter. Il problema principale di quel progetto era la sua infrastruttura. Ho usato più istanze di un'applicazione java (tracker) per scaricare da Twitter dato un compito specifico (fondamentalmente termini da cercare), connesso con un nodo centrale (un'applicazione web) che doveva elaborare tutti i tweet una volta al giorno e generare un nuovo compito per ogni tracker una volta ogni 15 minuti. Il nodo centrale doveva anche monitorare tutti i tracker e abilitarli / disabilitarli sotto petizione utente.

Questo,comehodetto,eratroppolentoperchéavevocollidibottigliamultipli,quindiinquestanuovaversionevogliomigliorarel'infrastrutturaeisolaretuttelefunzionalitàinnodispecifici.Hoanchebisognodiunbuonsistemadinotificaperriceverenotificheperqualsiasinodo.Quindi,neldiagrammaseguentemostroicomponentidicuihobisognoinquestanuovaversione:

Come puoi vedere, ci sono più nodi. Ecco alcune note su di loro:

  • Dashboard: controlla gli stati dei tracker e invia una singola attività a ciascuno di essi (sotto richiesta dell'utente). I tracker useranno questa attività fino a quando non saranno sostituiti con uno nuovo (se fatto, non ogni 15 minuti come prima).
  • Motore di ricerca: ho bisogno di memorizzare tutti i tweet. Vengono dapprima archiviati in un database locale per ciascun tracker, ma dopo di ciò sto pensando di utilizzare qualcosa come Elasticsearch per poter eseguire ricerche veloci.
  • Processore Tweet: Componente semplice e isolato con un proprio database (forse qualcosa come il motore di ricerca per accedere rapidamente alle informazioni generate dal modulo). In futuro potrebbe essere aggiunto altro.
  • Interfaccia utente dell'applicazione: Un'applicazione Web con un database condiviso con il Dashboard (principalmente per memorizzare le informazioni e le preferenze degli utenti). In effetti, entrambi potrebbero essere uniti in un'unica rete. La principale differenza con la versione precedente del progetto è che ora saranno isolati e mostreranno solo le informazioni e invieranno richieste. Non eseguirò alcun compito pesante (come i tweet di processo come facevo prima)

Quindi, avendo questi componenti, il mio mal di testa principale è come strutturare tutti per non dover riscrivere un sacco di codice ogni volta che ho bisogno di accedere a qualsiasi nuovo dato. Un altro mal di testa è come posso interconnettere i nodi . Potrei usare le prese ma è un rompicoglioni. Forse uno strato REST? Infine, se tutti i nodi sono isolati, come potrei generare notifiche per ciascun utente quali informazioni sono solo nel database utilizzato dall'IU dell'applicazione?

Sto programmando questo usando Java e Spring (almeno li ho usati nell'ultima versione) ma non ho problemi con la modifica della lingua se posso sfruttare uno strumento / libreria / motore per semplificarmi la vita e avere una piattaforma migliore Qualsiasi commento sarà apprezzato.

    
posta David Moreno García 05.06.2014 - 16:26
fonte

1 risposta

1

Potresti usare RPC per comunicare tra i nodi. Secondo me è il modo migliore per farlo. Comunica i nodi direttamente tra loro e chiedi al master di inviarli compiti anche tramite RPC .

Il nodo master può avere una tabella di nodi slave. Ogni nuovo nodo slave esegue il check-in con il nodo principale, in questo modo viene creata la tabella. Nel nodo master è possibile avere un server RPC attivo e funzionante su alcune porte fisse come ad esempio 15000. Ogni nodo slave, una volta avviato, esegue il ping del nodo master e riporta ad esso eseguendo un metodo e passando qualcosa come dati dal nodo slave. Questo è come è fatto di solito. Puoi controllare l'IPC di Hadoop per maggiori informazioni.

    
risposta data 05.06.2014 - 16:58
fonte

Leggi altre domande sui tag