Tempesta o scintilla: scegli la tua arma in tempo reale

L'idea della business intelligence in tempo reale esiste da un po '(vedi la pagina di Wikipedia sull'argomento iniziato nel 2006). Ma mentre la gente parla dell'idea da anni, non ho visto molte aziende realmente abbracciare la visione, tanto meno rendersi conto dei vantaggi che essa offre.

Almeno una parte del motivo è stata la mancanza di strumenti per l'implementazione di BI e analisi in tempo reale. Gli ambienti di data warehousing tradizionali erano fortemente orientati verso operazioni batch con latenze estremamente elevate, erano incredibilmente costosi o entrambi.

Per cambiare questa situazione sono emerse numerose piattaforme open source potenti e facili da usare. Due dei più importanti sono Apache Storm e Apache Spark, che offrono funzionalità di elaborazione in tempo reale a una gamma molto più ampia di potenziali utenti. Entrambi sono progetti all'interno di Apache Software Foundation e, sebbene i due strumenti forniscano funzionalità sovrapposte, ciascuno di essi ha caratteristiche e ruoli distintivi da svolgere.

Storm: l'Hadoop dell'elaborazione in tempo reale

Storm, un framework di calcolo distribuito per l'elaborazione del flusso di eventi, è nato come progetto di BackType, una società di marketing intelligence acquistata da Twitter nel 2011. Twitter ha presto reso open source il progetto e lo ha messo su GitHub, ma Storm alla fine è passato all'incubatore Apache ed è diventato un progetto di primo livello Apache nel settembre 2014.

Storm è stato talvolta definito l'Hadoop dell'elaborazione in tempo reale. La documentazione di Storm sembra concordare: "Storm rende facile elaborare in modo affidabile flussi illimitati di dati, facendo per l'elaborazione in tempo reale ciò che Hadoop ha fatto per l'elaborazione in batch".

Per raggiungere questo scopo, Storm è progettato per un'elevata scalabilità, supporta la tolleranza agli errori con un approccio "fail fast, auto restart" ai processi e offre una forte garanzia che ogni tupla verrà elaborata. Storm utilizza per impostazione predefinita una garanzia "almeno una volta" per i messaggi, ma offre anche la possibilità di implementare l'elaborazione "esattamente una volta".

Storm è scritto principalmente in Clojure ed è progettato per supportare il cablaggio "spout" (pensa ai flussi di input) e "bolt" (moduli di elaborazione e output) insieme come un grafo diretto aciclico (DAG) chiamato topologia. Le topologie Storm vengono eseguite sui cluster e lo scheduler Storm distribuisce il lavoro ai nodi del cluster, in base alla configurazione della topologia.

Puoi pensare alle topologie come all'incirca analoghe a un lavoro MapReduce in Hadoop, tranne per il fatto che, data l'attenzione di Storm sull'elaborazione basata sul flusso in tempo reale, le topologie vengono eseguite per impostazione predefinita per sempre o fino a quando non vengono terminate manualmente. Una volta avviata una topologia, gli spout portano i dati nel sistema e li trasferiscono ai bulloni (che a loro volta possono trasferire i dati ai bulloni successivi) dove viene svolto il lavoro di calcolo principale. Man mano che l'elaborazione procede, uno o più bolt possono scrivere dati su un database o un file system, inviare un messaggio a un altro sistema esterno o rendere altrimenti disponibili agli utenti i risultati del calcolo.

Uno dei punti di forza dell'ecosistema Storm è una ricca gamma di spout disponibili specializzati per la ricezione di dati da tutti i tipi di fonti. Anche se potresti dover scrivere spout personalizzati per applicazioni altamente specializzate, ci sono buone probabilità che tu possa trovare uno spout esistente per una varietà incredibilmente ampia di fonti: dall'API di streaming di Twitter ad Apache Kafka ai broker JMS a tutto il resto.

Esistono adattatori per semplificare l'integrazione con i file system HDFS, il che significa che Storm può facilmente interagire con Hadoop se necessario. Un altro punto di forza di Storm è il supporto per la programmazione multilingua. Mentre Storm stesso è basato su Clojure e gira sulla JVM, gli spout e i bolt possono essere scritti in quasi tutte le lingue, inclusi i linguaggi non JVM che sfruttano un protocollo per la comunicazione tra i componenti utilizzando JSON su stdin / stdout.

In breve, Storm è un sistema open source molto scalabile, veloce e tollerante ai guasti per il calcolo distribuito, con una particolare attenzione all'elaborazione del flusso. Storm eccelle nell'elaborazione degli eventi e nel calcolo incrementale, calcolando le metriche di rotazione in tempo reale su flussi di dati. Sebbene Storm fornisca anche primitive per abilitare RPC distribuito generico e possa teoricamente essere utilizzato per assemblare quasi qualsiasi lavoro di calcolo distribuito, il suo punto di forza è chiaramente l'elaborazione del flusso di eventi.

Spark: elaborazione distribuita per tutti

Spark, un altro progetto adatto al calcolo distribuito in tempo reale, è iniziato come progetto di AMPLab presso l'Università della California a Berkeley prima di entrare a far parte dell'Apache Incubator e infine di laurearsi come progetto di primo livello nel febbraio 2014. Come Storm, Spark supporta lo streaming orientato all'elaborazione, ma è più una piattaforma di elaborazione distribuita per scopi generali.

In quanto tale, Spark può essere visto come un potenziale sostituto delle funzioni MapReduce di Hadoop, mentre Spark ha la capacità di essere eseguito su un cluster Hadoop esistente, facendo affidamento su YARN per la pianificazione delle risorse. Oltre a Hadoop YARN, Spark può sovrapporre Mesos per la pianificazione o essere eseguito come cluster autonomo utilizzando lo scheduler integrato. Tieni presente che se Spark non viene utilizzato con Hadoop, è comunque necessario un tipo di file system di rete / distribuito (NFS, AFS e così via) se in esecuzione su un cluster, quindi ogni nodo avrà accesso ai dati sottostanti.

Spark è scritto in Scala e, come Storm, supporta la programmazione multilingua, sebbene Spark fornisca un supporto API specifico solo per Scala, Java e Python. Spark non ha l'astrazione specifica di un "beccuccio", ma include adattatori per lavorare con i dati archiviati in numerose origini disparate, inclusi file HDFS, Cassandra, HBase e S3.

Dove Spark brilla è nel suo supporto per più paradigmi di elaborazione e le librerie di supporto. Sì, Spark supporta un modello di streaming, ma questo supporto è fornito solo da uno dei diversi moduli Spark, inclusi moduli appositamente creati per l'accesso SQL, operazioni con grafici e apprendimento automatico, insieme all'elaborazione del flusso.

Spark fornisce anche una shell interattiva estremamente pratica che consente la prototipazione rapida e sporca e l'analisi esplorativa dei dati in tempo reale utilizzando le API Scala o Python. Lavorando nella shell interattiva, si nota rapidamente un'altra grande differenza tra Spark e Storm: Spark ha più di un sapore "funzionale", dove lavorare con l'API è guidato maggiormente concatenando chiamate di metodo successive per invocare operazioni primitive, al contrario del Modello Storm, che tende a essere guidato dalla creazione di classi e dall'implementazione di interfacce. Nessuno dei due approcci è migliore o peggiore, ma lo stile che preferisci può influenzare la tua decisione su quale sistema è più adatto alle tue esigenze.

Come Storm, Spark è progettato per un'elevata scalabilità e il team di Spark ha documentato gli utenti del sistema che eseguono cluster di produzione con migliaia di nodi. Inoltre, Spark ha vinto il recente concorso Daytona GraySort 2014, ottenendo il momento migliore per un carico di lavoro sulle spalle costituito dallo smistamento di 100 TB di dati. Il team di Spark documenta anche le operazioni ETL di Spark con carichi di lavoro di produzione nell'intervallo di petabyte multiplo.

Spark è una piattaforma di elaborazione distribuita open source veloce, scalabile e flessibile, compatibile con Hadoop e Mesos, che supporta diversi modelli computazionali, tra cui streaming, operazioni incentrate sui grafici, accesso SQL e apprendimento automatico distribuito. Spark è stato documentato per scalare eccezionalmente bene e, come Storm, è un'ottima piattaforma su cui costruire un sistema di analisi e business intelligence in tempo reale.

Prendere la tua decisione

Come scegli tra Storm e Spark?

Se le tue esigenze si concentrano principalmente sull'elaborazione del flusso e sull'elaborazione in stile CEP e stai avviando un progetto greenfield con un cluster appositamente costruito per il progetto, probabilmente preferirei Storm, specialmente quando sono disponibili gli spout Storm esistenti che corrispondono ai tuoi requisiti di integrazione . Questa non è affatto una regola dura e veloce, ma tali fattori suggerirebbero almeno di iniziare con Storm.

D'altra parte, se stai sfruttando un cluster Hadoop o Mesos esistente e / o se le tue esigenze di elaborazione comportano requisiti sostanziali per l'elaborazione di grafici, l'accesso SQL o l'elaborazione in batch, potresti voler guardare prima Spark.

Un altro fattore da considerare è il supporto multilingua dei due sistemi. Ad esempio, se è necessario sfruttare il codice scritto in R o qualsiasi altro linguaggio non supportato in modo nativo da Spark, Storm ha il vantaggio di un supporto linguistico più ampio. Allo stesso modo, se devi avere una shell interattiva per l'esplorazione dei dati utilizzando le chiamate API, Spark ti offre una funzionalità che Storm non ha.

Alla fine, probabilmente vorrai eseguire un'analisi dettagliata di entrambe le piattaforme prima di prendere una decisione finale. Consiglio di utilizzare entrambe le piattaforme per creare una piccola prova di concetto, quindi eseguire i propri benchmark con un carico di lavoro che rispecchi i carichi di lavoro previsti il ​​più fedelmente possibile prima di impegnarsi completamente in entrambi.

Naturalmente, non è necessario prendere una decisione o / o. A seconda dei carichi di lavoro, dell'infrastruttura e dei requisiti, potresti scoprire che la soluzione ideale è una combinazione di Storm e Spark, insieme ad altri strumenti come Kafka, Hadoop, Flume e così via. Qui sta la bellezza dell'open source.

Qualunque percorso tu scelga, questi strumenti dimostrano che il gioco della BI in tempo reale è cambiato. Potenti opzioni una volta disponibili solo per pochi elite sono ora alla portata della maggior parte, se non di tutte, le organizzazioni di medie e grandi dimensioni. Approfittane.