Dal punto di vista fisico, uno Storm Cluster è costituito da nodi organizzati in nodi master e worker. I nodi master eseguono un demone chiamato Nimbus, i nodi worker eseguono un demone chiamato Supervisor. Un TOPOLOGY viene eseguito attraverso molti nodi worker su differenti macchine. Infine, Storm mantiene lo stato di tutti i cluster in un server ZooKeeper, rappresentante anche l'interfaccia tra Nimbus e i vari Supervisor. In dettaglio:
Demone | Descrizione |
---|---|
Nimbus | è responsabile di distribuire il codice all'interno del cluster,assegnare i tasks ad ogni nodo worker e di monitorare i guasti. |
Supervisor | esegue una porzione di un TOPOLOGY. |
ZooKeeper | è un servizio centralizzato per il mantenimento di informazioni di configurazione. |
I demoni elencati sono stateless e per questo motivo il loro stato viene mantenuto in questo servizio, cosi possibili fail o restart non incidono sul sistema in produzione.
Infine, Storm fa uso di ZeroMQ (0MQ), una libreria di messaging asincrono ad elevate prestazioni, utilizzata in sistemi distribuiti, che offre le seguenti caratteristiche:
- una socket library che agisce come un framework concorrente;
- consegna di messaggi attraverso IPC, TCP e multicast;
- operazioni di I/O asincrone per il passaggio di messaggi tra le applicazioni scalabili e multicore;
- connessioni N-to-N, publish/subscribe, pipeline, request-reply.
In particolare, Storm utilizza delle sockets push/pull.
Modus Operandi di Storm
Storm opera in due modalità:
Mdalità | Descrizione |
---|---|
Local Mode | i topologies vengono eseguiti su una macchina locale, in una singola JVM. Generalmente, questa modalità è usata per sviluppo, test e debbugging in quanto è il modo più semplice per vedere come i topologies lavorano insieme. |
Remote Mode | in questa modalità, i topologies sono inviati allo Storm cluster che sarà costituito da più processi eseguiti su macchine differenti. In questa modalità non vengono fornite informazioni di debbugging in quanto viene considerata come una modalità di produzione. Tuttavia, è possibile creare uno Storm cluster su una singola macchina di sviluppo ed effettuare il deploy del progetto che integra Storm, simulando una modalità di produzione. |