importante rilascio del sistema di elaborazione distribuita degli eventi , caratterizzato da una transizione verso una nuova architettura realizzata in Java, invece del precedente linguaggio Clojure.
Il progetto consente di organizzare un'elaborazione garantita di vari eventi in tempo reale. Ad esempio, Storm può essere utilizzato per analizzare flussi di dati in tempo reale, eseguire compiti di machine learning, organizzare calcoli continui, implementare RPC, ETL, ecc. Il sistema supporta la clustering, la creazione di configurazioni a prova di guasto, la modalità di elaborazione garantita dei dati e offre alte prestazioni, sufficienti a gestire oltre un milione di richieste al secondo su un singolo nodo del cluster.
È supportata l'integrazione con vari sistemi di elaborazione delle code e tecnologie di database. L'architettura di Storm prevede l'accettazione e l'elaborazione di flussi di dati non strutturati, continuamente aggiornati, utilizzando complessi elaboratori arbitrari con capacità di partizionamento tra le diverse fasi di calcolo. Il progetto è stato trasferito alla comunità Apache dopo l'acquisizione di Twitter di BackType, l'azienda che originariamente ha sviluppato il framework. Nella pratica, Storm è stato utilizzato in BackType per analizzare il riflesso degli eventi nei microblog, confrontando al volo nuovi tweet e i link utilizzati in essi (ad esempio, veniva valutato come i link esterni o gli annunci pubblicati su Twitter venivano ripubblicati da altri partecipanti).
La funzionalità di Storm viene paragonata alla piattaforma Hadoop, con la differenza chiave che i dati non sono memorizzati in un repository, ma provengono dall'esterno e vengono elaborati in tempo reale. In Storm non esiste uno strato integrato per organizzare la memorizzazione, e la query analitica inizia ad essere applicata ai dati in arrivo finché non viene annullata (se in Hadoop vengono utilizzati lavori di MapReduce che occupano tempo finito, in Storm viene applicata l'idea delle "topologie" che vengono eseguite continuamente). L'esecuzione degli elaboratori può essere distribuita su più server: Storm parallelizza automaticamente il lavoro con i flussi su nodi diversi del cluster.
Inizialmente, il sistema era scritto in Clojure e viene eseguito all'interno della macchina virtuale JVM. Nel fondo Apache è stata avviata un'iniziativa per portare Storm su un nuovo nucleo, scritto in Java, i cui risultati sono presentati nella versione Apache Storm 2.0. Tutti i componenti di base della piattaforma sono stati riscritti in Java. Il supporto per la scrittura di gestori in Clojure è rimasto, ma ora è proposto sotto forma di binding. Per utilizzare Storm 2.0.0 è necessaria Java 8. È stata completamente ripensata la modellazione del trattamento multithreading, il che ha permesso un notevole incremento delle prestazioni (per alcune topologie, i ritardi sono stati ridotti del 50-80%).
Nella nuova versione è stato anche proposto un API Streams tipizzata, che consente di definire gestori utilizzando operazioni in stile programmazione funzionale. Il nuovo API è implementato sopra l'API di base standard ed è dotato di un raggruppamento automatico delle operazioni per ottimizzarne l'elaborazione. Nell'API Windowing per le operazioni a finestre è stata aggiunta la possibilità di salvare e ripristinare lo stato nel backend.
Nel pianificatore di avvio dei gestori è stato aggiunto il supporto per il conteggio di risorse aggiuntive nelle decisioni, non limitandosi
a CPU e memoria, ma comprendendo anche parametri di rete e GPU. Sono state apportate numerose migliorie relative all'integrazione con la piattaforma . È stato ampliato il sistema di controllo degli accessi, nel quale è stata introdotta la possibilità di creare gruppi di amministratori e delegare token. Sono stati aggiunti miglioramenti relativi al supporto per SQL e metriche. Nell'interfaccia dell'amministratore sono comparse nuove comandi per il debug dello stato del cluster.
Ambiti di applicazione di Storm:
- Elaborazione di flussi di nuovi dati o aggiornamenti del DB in tempo reale;
- Calcoli continui: Storm può eseguire query continue e elaborare flussi continui, inviando i risultati del trattamento al cliente in tempo reale.
- Chiamata a procedura remota distribuita (RPC): Storm può essere utilizzato per garantire il parallelismo nell'esecuzione di richieste ad alta intensità di risorse. Un compito («topologia») in Storm rappresenta una funzione distribuita su nodi, che attende l'arrivo di messaggi da elaborare. Dopo la ricezione del messaggio, la funzione lo elabora in un contesto locale e restituisce il risultato. Un esempio di utilizzo del RPC distribuito può essere l'elaborazione parallela di query di ricerca o l'esecuzione di operazioni su un ampio insieme di insiemi.
Caratteristiche di Storm:
- Modello di programmazione semplice, che semplifica notevolmente l'elaborazione dei dati in tempo reale;
- Supporto per qualsiasi linguaggio di programmazione. Sono disponibili moduli per i linguaggi Java, Ruby e Python; l'adattamento per altri linguaggi non presenta difficoltà grazie a un protocollo di comunicazione molto semplice, la cui implementazione richiede circa 100 righe di codice;
- Tolleranza agli errori: per avviare un compito di elaborazione dei dati è necessario creare un file jar con il codice. Storm distribuirà automaticamente questo file jar sui nodi del cluster, collegherà i gestori correlati e organizzerà il monitoraggio. Al termine del compito, il codice verrà automaticamente disattivato su tutti i nodi;
- Scalabilità orizzontale. Tutti i calcoli vengono eseguiti in parallelo e, con l'aumento del carico, basta semplicemente collegare nuovi nodi al cluster;
- Affidabilità. Storm garantisce che ogni messaggio in arrivo venga completamente elaborato almeno una volta. Un messaggio verrà elaborato una sola volta in assenza di errori durante il passaggio attraverso tutti i gestori; in caso di problemi, i tentativi di elaborazione non riusciti verranno ripetuti.
- Velocità. Il codice di Storm è stato scritto tenendo presente l'alta performance e utilizza un sistema per uno scambio di messaggi veloce e asincrono. .
Fonte: opennet.ru
