Load Balancing for Listeners

1

Come dovremmo bilanciare gli ascoltatori con un servizio di terze parti?

es. Abbiamo bisogno di leggere i messaggi gtalk tramite XMPP Listener e creare un'applicazione utilizzando le interazioni dell'utente con un chatbot. In tal caso, in che modo possiamo assicurarci di poter avere ascoltatori XMPP su più server e bilanciamo i messaggi tra gli ascoltatori?

Grazie in anticipo.

    
posta user88748 20.04.2013 - 08:32
fonte

2 risposte

2

Potresti voler dare un'occhiata al framework Storm di Twitter. Fa uso di zookeeper per gestire i cluster di JVM che possono essere configurati per elaborare eventi in entrata.

Dal loro bel tutorial:

  • L'astrazione principale in Storm è il "flusso". Un flusso è una sequenza illimitata di tuple. Storm fornisce i primitivi per trasformare uno stream in un nuovo stream in modo distribuito e affidabile. Ad esempio, puoi trasformare un flusso di tweet in un flusso di argomenti di tendenza.

  • Uno spout è una fonte di flussi. Ad esempio, un becco può leggere tuple da una coda di Kestrel ed emetterle come un flusso. Oppure un becco potrebbe connettersi all'API di Twitter ed emettere un flusso di tweet.

  • Un bullone consuma qualsiasi numero di flussi di input, esegue un po 'di elaborazione ed eventualmente emette nuovi flussi. Trasformazioni di stream complesse, come il calcolo di un flusso di argomenti di tendenza da un flusso di tweet, richiedono più passaggi e quindi più bulloni. I bulloni possono fare qualsiasi cosa, dalle funzioni di esecuzione, filtrare le tuple, fare aggregazioni di streaming, fare join di streaming, parlare con i database e altro.

  • Le reti di beccucci e bulloni sono impacchettate in una "topologia" che è l'astrazione di primo livello che invii ai cluster Storm per l'esecuzione. Una topologia è un grafico delle trasformazioni di flusso in cui ogni nodo è un beccuccio o un bullone. I bordi nel grafico indicano quali bulloni sono abbonati a quali flussi. Quando un beccuccio o un bullone emette una tupla su un flusso, invia la tupla a ogni bullone che si è iscritto a quel flusso.

link

Potrebbe essere eccessivo, ma guardarlo potrebbe anche ispirarti a pensare al tuo problema in modo diverso anche se non lo usi.

    
risposta data 20.04.2013 - 21:28
fonte
0

Se non riesci a modificare la terza parte, devi eseguire il bilanciamento del carico al tuo fianco utilizzando una coda messaggi.

Un server ascolterà i messaggi in arrivo in XMPP e li inserirà in una coda di messaggi. Questa coda di messaggi avrà più lavoratori, quindi verrà automaticamente bilanciata dal carico tra i lavoratori. Una volta che il lavoratore ha finito di elaborare il messaggio, invierà il risultato al server.

Utilizzare un server non bloccante come NodeJS e una coda di messaggi senza broker come ZeroMQ sarebbe la soluzione migliore, a basso sovraccarico e ad alte prestazioni. Puoi leggere di più su NodeJS (IO non bloccante e loop di eventi) e ZeroMQ (0MQ è una libreria, non un server, quindi non è necessario un server separato)

    
risposta data 19.05.2013 - 23:31
fonte

Leggi altre domande sui tag