(articolo redatto da Vito Carrozza)
Nel mondo digitale di oggi, i “big data” rappresentano un elemento fondamentale per l’innovazione tecnologica e il miglioramento dei processi aziendali. Ogni giorno, le aziende generano e raccolgono quantità massicce di dati da una varietà di fonti come dispositivi IoT, social media, transazioni finanziarie, sensori industriali e molto altro. Tuttavia, non basta raccogliere questi dati: bisogna saperli processare in modo efficace ed efficiente per estrarre valore da essi.
In questo articolo esploreremo in dettaglio cosa significa processare i big data, esaminando le principali tecniche e strategie utilizzate per farlo, come il batch processing e il real-time processing, e come l’architettura Lambda può aiutare a combinare questi approcci in modo efficiente.
Che cosa significa processare big data?
I big data sono caratterizzati da tre proprietà:
- volume: la quantità di dati che si vuole processare, analizzare e memorizzare. Il volume è considerato “big” quando è nell’ordine dei terabyte o petabyte;
- varietà: nel campo dei big data, i dati possono avere strutture eterogenee; ciò significa che nello stesso flusso di dati, potrebbero essere presenti diverse tipologie di dati strutturati in maniera diversa;
- velocità: i dati arrivano al sistema o come un flusso continuo o in modalità swarming. In entrambi i casi, il rate di arrivo è molto elevato.
Processare big data significa applicare tecniche e strumenti di calcolo avanzato per analizzare enormi quantità di dati, estrarre informazioni, eseguire analisi predittive, creare modelli di machine learning e produrre report, visualizzazioni o interrogazioni.
Sebbene le tecniche per processare big data possano essere molte, il processo di elaborazione generico può essere strutturato secondo queste fasi:
- acquisizione dei dati: raccolta dei dati grezzi da diverse fonti;
- preelaborazione: pulizia e preparazione dei dati, spesso coinvolgendo la rimozione di errori o la gestione di dati mancanti (ad esempio sfruttando tecniche di data augumentation);
- elaborazione: analisi dei dati per estrarre pattern, correlazioni e insights;
- visualizzazione: presentazione dei risultati in forma facilmente comprensibile ed interpretabile (es. dashboard, report, ecc…);
- memorizzazione: conservazione efficiente dei dati e dei risultati delle analisi fatte in fase di elaborazione per un accesso futuro;
Ma perché è importante processare i big data? Attraverso l’analisi di grosse quantità di dati è possibile:
- migliorare l’efficienza operativa dei processi aziendali: le aziende possono ottimizzare i loro processi attraverso l’analisi dei dati in tempo reale oppure guardando allo storico delle analisi di dati già analizzati;
- prendere decisioni basate sui dati: i big data consentono alle aziende di prendere decisioni più informate supportate da evidenze oggettive che i dati stessi mettono in risalto;
- crescita: l’analisi dei big data può portare a nuove scoperte e opportunità di business, in quanto i dati possono evidenziare pattern e trend di crescita positivi che possono far in modo da spingere la business unit ad affrontare sfide sempre più innovative.
Batch Processing
Definizione
Si consideri un flusso di dati massivo e continuo in arrivo nel sistema. Il batch processing è un approccio in cui i dati vengono elaborati in blocchi o “batch” (solitamente di dimensione fissa) a intervalli regolari.
In un sistema che utilizza batch processing, i dati non vengono mai modificati e vengono sempre accodati ai dati precedenti.
I’iter di processamento a blocchi avviene secondo questi passi:
- raccolta: i dati grezzi vengono raccolti da diverse fonti, ma non vengono elaborati immediatamente.
- stoccaggio: i dati vengono memorizzati temporaneamente in un data lake, in un database distribuito oppure in un DFS (i dettagli su queste modalità di memorizzazione qui).
- elaborazione dei batch: a intervalli prefissati, un job di batch processing utilizza i dati raccolti pulendoli, aumentandoli (per sopperire ad eventuali mancanze) e suddividendoli in blocchi; questi ultimi, poi, vengono processati uno alla volta generando delle viste specifiche per ogni blocco.
In seguito, queste viste vengono unite tramite join per generare un’unica grande vista che viene memorizzata in un read-only database, pronta per essere interrogata. - produzione di formati interpretabili: al termine del passo precedente, vengono generati dei format di facile consultazione, come report o dashboard ecc.

Questo metodo è particolarmente utile quando il sistema non richiede risposte immediate e può tollerare ritardi nell’elaborazione.
Vantaggi e svantaggi
Un algoritmo di batch processing risulta facile da manutenere, in quanto i tempi di esecuzione della logica del job di processamento, venendo eseguita periodicamente e con una tempistica molto lasca, lascia tutto il tempo necessario affinché possano essere effettuate le dovute modifiche. Inoltre, l’high availability è sempre assicurata, in quanto fintanto che il job è impegnato nella produzione di una nuova view del dataset, quella precedentemente generata è sempre disponibile per la consultazione.
Infine, un algoritmo di batch processing gode sempre di proprietà di fault tollerance: data la proprietà di immutabilità dei dati stessi, se si sbaglia a scrivere la logica di processamento, i dati originali non vengono modificati e quindi è possibile far girare di nuovo il job ed ottenere così la vista processata correttamente.
Per contro, siccome i dati vengono elaborati solo dopo essere stati raccolti, ciò introduce sempre un certo ritardo tra il momento in cui i dati vengono generati e quando sono disponibili per l’analisi. A causa di questa prerogativa, il batch processing non è idoneo per scenari in cui è necessario rispondere rapidamente ai cambiamenti nei dati.
Esempio pratico
Come esempio pratico di utilizzo del batch processing, si immagini un sistema di analisi delle vendite per un’azienda di e-commerce. Ogni giorno vengono raccolti dati sulle transazioni effettuate dai clienti. Con il batch processing, questi dati vengono raccolti durante la giornata, memorizzati e poi elaborati in un batch notturno. Al termine dell’elaborazione, l’azienda ottiene report dettagliati sul numero di transazioni, il valore medio degli acquisti e le tendenze di vendita.
Real-Time Processing
Definizione
Il real-time processing è un approccio che consente di elaborare i dati non appena vengono generati, con latenza minima. Questo tipo di elaborazione è fondamentale per scenari in cui è necessario reagire rapidamente agli eventi, come nel caso di sistemi di monitoraggio delle performance, trading finanziario, o analisi di flussi di dati da sensori.
Più nello specifico, i dati analizzati in modalità real-time subiscono il seguente iter di processamento:
- produzione degli eventi: i dati vengono generati da fonti in tempo reale, come sensori o transazioni online. Ogni volta che un nuovo dato viene prodotto, viene generato un nuovo evento di interesse per l’architettura, che incorpora il dato grezzo e una serie di informazioni (metadati) di supporto all’elaborazione;
- message brokening: questi eventi vengono poi smistati al job di processamento tramite un message broker (come ad esempio, Kafka, RabbitMQ) che si occupa di gestire il flusso dei dati in modo efficiente (per approfondimenti sui sistemi di brokening, è possibile riferirsi a questo link);
- elaborazione degli eventi: i dati vengono elaborati in tempo reale, un record alla volta non appena essi vengono smistati dal message broker, utilizzando algoritmi di streaming.
- azione immediata: i risultati dell’elaborazione vengono persistiti in strutture dati ad accesso veloce e vengono utilizzati per triggerare azioni immediate, come l’aggiornamento di una dashboard temporale o la generazione di alert.

Vantaggi e svantaggi
Il processamento in tempo reale è ideale in applicazioni in cui il tempo di produzione dei risultati da parte dell’elaborazione deve essere predicibile e i risultati disponibili in tempi molto piccoli. A causa di questa prerogativa, essa è perfetta per applicazioni interattive che richiedono feedback istantaneo, come ad esempio il monitoraggio della sensoristica da campo.
Tuttavia, questo tipo di elaborazione richiede infrastrutture hardware più complesse e costose. Inoltre, poiché ogni evento deve essere gestito immediatamente, la scalabilità non è garantita senza interferire con la continua fruizione del servizio.
Esempio pratico
Un’applicazione di monitoraggio in tempo reale dei veicoli di una flotta aziendale può ricevere dati GPS e di telemetria da ogni camion in tempo reale. Grazie al real-time processing, l’azienda è in grado di ricevere aggiornamenti istantanei sulla posizione di ogni veicolo, l’eventuale superamento dei limiti di velocità, o problemi meccanici. Se necessario, il sistema può inviare un alert al responsabile della flotta.
Architettura Lambda
Le sfide nella scelta di una strategia di processing dei big data
La scelta di una strategia di processing dei big data dipende da vari fattori, tra cui i requisiti di latenza, la complessità del processamento e i costi.
Nella maggior parte degli use-cases è necessario combinare entrambe le strategie di processamento descritti nei paragrafi precedenti: ad esempio in un sistema di gestione di veicoli di un sistema di car rental, è necessario conoscere la posizione in tempo reale dei veicoli in affitto, così come i dati storici di utilizzo del servizio da parte degli utenti per questioni di marketing.
Al fine di rendere possibile gli utilizzi di entrambi i vantaggi delle metodologie di processamento a real-time e a batch, è stata definita una specifica architettura che permetta di utilizzarle entrambe: l’architettura lambda.
Definizione dell’architettura Lambda
L’architettura Lambda è un’architettura di elaborazione dei dati progettata per gestire enormi quantità di dati sfruttando sia i metodi di elaborazione batch che quelli in real time. Questo approccio cerca di bilanciare la latenza, il throughput e la tolleranza ai guasti utilizzando l’elaborazione batch per fornire una visione completa e accurata dei dati batch e, contemporaneamente, l’elaborazione stream in tempo reale per fornire una visione dei dati recenti.
L’architettura prevede tre layer:
- Batch layer: gestisce grandi volumi di dati secondo la modalità di batch processing. Questo livello mira a una accuratezza di analisi perfetta, essendo in grado di elaborare tutti i dati disponibili quando genera le viste. Ciò significa che è in grado di correggere eventuali errori rielaborando nuovamente l’intero set di dati e aggiornando le viste esistenti. L’output è tipicamente memorizzato in un database di sola lettura e gli aggiornamenti sostituiscono completamente le viste precedenti.
- Speed layer: lo speed layer elabora i flussi di dati in tempo reale e senza requisiti di correttezza o completezza. Questo livello sacrifica il throughput, in quanto mira a minimizzare la latenza fornendo viste in tempo reale dei dati più recenti. In sostanza, lo speed layer è responsabile di colmare il “vuoto” causato dal ritardo del livello batch nel fornire viste basate sui dati più recenti. Le visualizzazioni di questo livello possono non essere accurate o complete come quelle prodotte dal livello batch, ma sono disponibili quasi immediatamente dopo la ricezione dei dati e possono essere sostituite quando le visualizzazioni del livello batch per gli stessi dati diventano disponibili.
- Serving layer: i risultati dei livelli batch e speed sono memorizzati nel livello serving, che risponde alle query ad hoc restituendo viste precalcolate o costruendo visualizzazioni a partire dai dati elaborati.
Quando i dati grezzi arrivano al sistema, il batch e lo speed layer vengono contemporaneamente idratati con gli stessi dati. In seguito, il serving layer unisce (tramite operazione di join) i risultati dell’elaborazione dei dati di questi due livelli e li rende disponibili per la consultazione.
È importante notare, infine, che il serving layer serve soprattutto come livello di combinazione dei risultati dello speed e del batch layer; tuttavia, l’esistenza di questo livello non vieta l’interrogazione diretta dei singoli layer di processamento: ad esempio, come la figura mostra, è possibile interrogare separatamente il serving e lo speed layer.

Esempio pratico dell’architettura Lambda
Immagina un sistema di monitoraggio in tempo reale per una rete di sensori industriali. I dati dei sensori vengono continuamente raccolti e analizzati in tempo reale tramite lo speed layer per rilevare anomalie e inviare notifiche tempestive agli operatori. Nel frattempo, i dati storici raccolti dai sensori vengono memorizzati nel batch layer, dove vengono elaborati per generare report settimanali o mensili sull’efficienza complessiva della macchina, sull’analisi delle tendenze, e su predizioni di manutenzione preventiva. Quando un operatore consulta il serving layer, otterrà una panoramica che combina i dati in tempo reale, come gli allarmi di malfunzionamento in corso, con analisi più approfondite basate sui dati storici, come l’analisi delle prestazioni nel tempo
Conclusioni
Il processing dei big data è una sfida complessa che richiede approcci diversificati in base alle specifiche esigenze del sistema. Il batch processing e il real-time processing sono due approcci fondamentali, ciascuno con i propri vantaggi e svantaggi. Mentre il batch processing è perfetto per analisi storiche complesse, il real-time processing è essenziale quando la velocità è un fattore critico. Per affrontare queste sfide in modo efficace, molte organizzazioni adottano l’architettura Lambda, che combina entrambi gli approcci per ottenere il meglio di entrambi i mondi, gestendo grandi volumi di dati e rispondendo rapidamente agli eventi in tempo reale.
L’adozione di un’architettura adatta alle proprie necessità di processing dei big data, come quella basata su Lambda, consente alle aziende non solo di ottenere insights immediati ma anche di migliorare l’analisi storica e predittiva, consentendo decisioni più informate e tempestive. In un mondo sempre più connesso e digitalizzato, la capacità di gestire e processare big data è la chiave per rimanere competitivi e innovativi.
Se anche tu vuoi far parte del team di sviluppo Nexsoft,
dai un’occhiata alle nostre opportunità di lavoro e conosciamoci subito!


