Flow
Un flusso dati (data flow) rappresenta una connessione logica tra due piattaforme all’interno di Flowlyze.
Il collegamento avviene tramite una Source (sorgente dei dati) e una Destination (destinazione dei dati).
Comprendere il funzionamento dei flussi dati richiede familiarità con tre concetti fondamentali: Message, Source e Destination — a cui si aggiunge il concetto operativo di Flow.
Message
Un Message è l’unità elementare di informazione che transita all’interno di Flowlyze, indipendentemente dal tipo di dato o dal formato di origine.
Può rappresentare, ad esempio:
- una riga di un file CSV,
- un record estratto da un database relazionale,
- o il risultato di una chiamata HTTP a un’API.
Ogni Message è strutturato come un oggetto annidato (nested object) e può essere assimilato a un documento JSON (JavaScript Object Notation).
Questo formato consente a Flowlyze di gestire dati complessi in modo flessibile e standardizzato.
Source
La Source è la sorgente del dato, ovvero il punto da cui Flowlyze riceve o estrae le informazioni.
Può assumere diverse forme:
- API (Application Programming Interface),
- Database (relazionali),
- Flat file (come CSV o XML).
Le sorgenti possono essere gestite in modalità:
- attiva, quando Flowlyze interroga direttamente la sorgente per ottenere i dati;
- passiva, quando è la sorgente stessa a inviare i dati a Flowlyze (ad esempio tramite webhook).
🔎 Per maggiori dettagli, consulta la sezione "Source" della documentazione.
Destination
La Destination rappresenta la destinazione dei dati elaborati da Flowlyze.
Anche in questo caso può trattarsi di API, database o file system, gestiti in modalità attiva o passiva a seconda delle esigenze di integrazione.
Flowlyze si occupa di garantire che i dati vengano consegnati correttamente, adattandoli al formato richiesto dalla piattaforma di destinazione.
🔎 Per approfondire, consulta la sezione "Destination" della documentazione.
Flow
Il Flow è l’elemento operativo che collega una Source a una Destination.
All’interno del flusso vengono definite e implementate le logiche di trasformazione, interconnessione e adattamento dei dati, assicurando la compatibilità tra sistemi con strutture e protocolli differenti.
Gestione e Monitoraggio dei Flussi
I dati ingeriti da una Source vengono memorizzati e gestiti attivamente all’interno di Flowlyze.
Questo approccio consente al sistema di:
- monitorare la consegna dei dati alle rispettive destinazioni;gestire automaticamente le notifiche di errore e i tentativi di retry in caso di anomalie;
- garantire la tracciabilità completa del dato lungo l’intero percorso di integrazione.
Attraverso l’interfaccia di gestione, è possibile:
- visualizzare l’elenco dei messaggi transitati e in transito,
- correggere e reinviare eventuali dati non consegnati,
- e consultare le statistiche di trasferimento per ogni singolo flusso.
Politiche di Retry
Flowlyze implementa due politiche di retry (ritrasmissione automatica) per la gestione dei messaggi non consegnati alla piattaforma di destinazione.
Queste logiche garantiscono la resilienza dei flussi dati anche in presenza di errori temporanei o downtime dei sistemi integrati.
1. Retry Lineare
La gestione lineare prevede un numero fisso di tentativi di consegna (N) effettuati a intervalli regolari e costanti.
È la modalità più semplice e prevedibile, consigliata quando la causa dell’errore è generalmente temporanea e di breve durata.
Un nuovo tentativo ogni 5 minuti, per un massimo di 10 tentativi.
Caratteristiche principali:
- Intervallo costante tra un retry e l’altro.
- Maggiore prevedibilità nei tempi di completamento del flusso.
- Ideale per sistemi stabili o con bassa probabilità di downtime prolungato.
2. Retry Esponenziale
La gestione esponenziale adatta dinamicamente l’intervallo tra i tentativi di consegna, aumentandolo progressivamente dopo ogni errore.
Questo approccio consente di ridurre la pressione sul sistema ricevente e di concedergli il tempo necessario per ripristinare il proprio stato di salute.
Primo retry dopo 2 minuti, poi dopo 4, 16 e 32 minuti.
Caratteristiche principali:
-
Intervallo crescente tra i tentativi di ritrasmissione.
-
Maggiore tolleranza ai downtime prolungati.
-
Particolarmente utile in contesti con carichi variabili o integrazioni esterne non sempre disponibili.
Entrambe le modalità di retry possono essere configurate a livello di Flow o di Destination, in base alle esigenze specifiche del progetto di integrazione.
Ordine di gestione dei messaggi e sincronia
Flowlyze è una piattaforma iPaaS (Integration Platform as a Service) basata su un’architettura completamente asincrona, progettata per garantire affidabilità, scalabilità e alte prestazioni nell’elaborazione dei dati tra sistemi eterogenei.
La piattaforma assicura la corretta consegna dei messaggi ai sistemi di destinazione, ma non garantisce l’ordine temporale di invio o ricezione degli stessi.
Questo approccio consente di massimizzare le prestazioni e di mantenere una gestione efficiente delle code di elaborazione anche in scenari di elevato carico o di temporanei errori di rete.
Idempotenza dei Dati
Poiché l’ordine dei messaggi non è garantito, è fondamentale che i sistemi di destinazione implementino meccanismi di idempotenza, ossia strategie che consentano di gestire in modo corretto messaggi duplicati o fuori sequenza.
Esempi di approcci idempotenti includono:
- Scarto dei dati obsoleti: il sistema ricevente verifica la data di ultima modifica o un identificativo univoco e ignora i messaggi non più attuali.
- Upsert intelligenti: le operazioni di scrittura combinano insert e update, aggiornando solo se il dato ricevuto è più recente rispetto a quello già presente.
- Controlli basati su timestamp o versioni: ogni record include un campo di versione o un timestamp utilizzato per determinare la validità del messaggio.
Questi accorgimenti assicurano che il flusso dati resti coerente anche in presenza di esecuzioni parallele o messaggi ritardati.
Parallelismo ed Elaborazione Non Cronologica
Per motivi di performance e scalabilità, Flowlyze può processare i messaggi in parallelo o in ordine non cronologico.
Questo significa che:
- I dati possono essere elaborati da più worker contemporaneamente, riducendo i tempi complessivi di processamento
- In caso di errore su un messaggio, l’elaborazione della coda non viene bloccata: i messaggi successivi continuano a essere elaborati senza interruzioni.
- I messaggi in errore vengono gestiti tramite i meccanismi di retry, permettendo un recupero controllato senza impattare sul flusso generale.
Vantaggi dell’approccio asincrono
- Alta affidabilità: ogni messaggio viene garantito in consegna, anche in caso di errori temporanei.
- Scalabilità orizzontale: il carico può essere distribuito tra più worker o nodi di elaborazione.
- Resilienza: il sistema resta operativo anche in presenza di messaggi problematici.
- Efficienza: l’elaborazione parallela riduce la latenza complessiva.
Gestione del buffer
Flowlyze gestisce l’invio dei dati verso le piattaforme di destinazione tramite elaborazione in batch (batch processing), una modalità che consente di ottimizzare le performance e ridurre il numero di chiamate tra i sistemi.
L’invio in batch può avvenire, ad esempio:
- attraverso una singola transazione verso un database, oppure
- tramite una chiamata HTTP unica verso un sistema esterno.
Questo approccio è essenziale per ridurre il round trip — cioè il tempo complessivo di richiesta e risposta tra due sistemi — e aumentare l’efficienza complessiva dell’integrazione.
Configurazione
Ogni Flow (flusso dati) può essere configurato per gestire dinamicamente il comportamento dell ’invio in batch.
Attraverso i parametri di configurazione è possibile definire:
- Numero massimo di elementi per batch:
determina la quantità di messaggi da accumulare prima di procedere all’invio verso la destinazione. - Tempo massimo di accumulo dei dati:
stabilisce per quanto tempo i messaggi possono rimanere in attesa prima di essere inviati, anche se non è stata raggiunta la dimensione massima del batch. - Numero massimo di invii paralleli:
indica il numero di processi di invio simultanei che il sistema di destinazione può gestire, utile per bilanciare il carico e prevenire saturazioni.
Logica di Funzionamento
Flowlyze accumula i messaggi provenienti dalla Source e li invia raggruppati per ottimizzare le performance. I dati vengono inviati una volta che:
- viene raggiunto il numero massimo di elementi per batch, oppure
- decorre il tempo massimo di accumulo configurato.
Allo scadere di una delle due condizioni, il sistema avvia automaticamente la procedura di invio verso la piattaforma di destinazione. Il numero di messaggi da raggiungere e il tempo massimo di attesa per il raggruppamento sono configurabili.
Esempio di Configurazione
Scenario: invio di massimo 1.000 messaggi con un timeout di 30 secondi.
Risultato: Flowlyze invierà i dati non appena:
- viene raggiunto il numero di 1.000 messaggi, oppure
- trascorrono 30 secondi dall’ultimo invio, indipendentemente dal numero di messaggi raccolti.
Flusso di stato dei messaggi
Durante il loro percorso operativo, i messaggi elaborati da Flowlyze attraversano una serie di stati che ne descrivono l’evoluzione, dalla ricezione iniziale fino alla consegna (o al loro eventuale scarto).
Questa gestione a stati consente di monitorare con precisione l’avanzamento dei flussi dati e di intervenire tempestivamente in caso di errori o blocchi operativi.
New
Il messaggio è stato ricevuto dal sistema ma non ancora elaborato.
In questo stato, il dato è in attesa di essere preso in carico dal motore di invio.
Processing
Il messaggio è in fase di elaborazione.
È stato preso in carico dal motore di invio ma non è ancora stato trasmesso alla piattaforma di destinazione.
Sent
Il messaggio è stato inoltrato alla destinazione ed è in attesa di feedback.
Flowlyze attende la conferma di ricezione o l’esito della richiesta (successo o errore).
Success
Il messaggio è stato correttamente consegnato alla piattaforma di destinazione.
Questo rappresenta uno stato finale e positivo del flusso.
Error
Il messaggio non è stato consegnato a causa di un errore lato destinazione (ad esempio, un endpoint HTTP non raggiungibile o un errore di validazione).
In presenza di politiche di retry attive, Flowlyze tenterà nuove consegne automatiche secondo la logica configurata (lineare o esponenziale).
Aborted
Il messaggio è stato preso in carico ma non inviato a causa di un errore interno di sistema o di configurazione.
Anche in questo caso, il messaggio viene tracciato e reso disponibile per analisi o ri-elaborazione manuale.
Ignored
Il messaggio è stato ignorato intenzionalmente e non sarà elaborato.
Ciò può avvenire, ad esempio, quando:
- il messaggio risulta superato rispetto a un altro (vedi meccanismi di correlazione tra messaggi), oppure
- è stato marcato manualmente come da ignorare da parte dell’utente.
Monitoraggio del Ciclo Operativo
Tutti gli stati dei messaggi sono tracciati e monitorabili tramite il pannello di amministrazione di Flowlyze.
L’interfaccia consente di:
- visualizzare l’elenco dei messaggi in ciascuno stato,
- analizzare le cause di errore,
- reinviare o ignorare manualmente i messaggi,
- e consultare le statistiche complessive di consegna e throughput.
Batch
Nel caso di lettura attiva dei messaggi, ad esempio durante l’importazione di un file CSV o la lettura di record da una tabella di database, l’esecuzione del flow genera automaticamente un batch di dati.
Il batch rappresenta l’insieme dei messaggi importati nel corso di una singola esecuzione del flusso.
In altre parole, ogni volta che un flow viene attivato — manualmente o secondo una schedulazione — Flowlyze raccoglie tutti i messaggi elaborati in quella sessione e li associa a un batch univoco.
Esempio di utilizzo
Un caso tipico è quello di un flusso notturno pianificato per l’esecuzione a mezzanotte:
tutti i messaggi letti durante quella sessione vengono raggruppati in un unico batch, consentendo di:
-
analizzare statistiche per singola esecuzione (es. numero di messaggi in Success o in Error),
-
monitorare lo stato di avanzamento del processo,
-
e verificare l’esito complessivo dell’importazione.
Azioni collegate all’esecuzione
Ad ogni esecuzione di batch possono essere associate azioni automatiche, configurabili prima o dopo l’avvio del flusso.
Queste azioni consentono, ad esempio, di:
- inviare notifiche email al termine dell’elaborazione,
- generare e distribuire report statistici,
- o eseguire procedure di post-processing personalizzate.
Grazie a questa gestione strutturata, Flowlyze offre visibilità completa sull’esecuzione dei flussi attivi, facilitando il controllo operativo e l’analisi dei risultati per singola sessione.
Correlazione tra messaggi
Per ogni Flow è possibile definire un criterio di correlazione che consente di identificare e gestire in modo ordinato i messaggi correlati tra loro.
La correlazione si basa su un identificativo univoco estratto dal contenuto del messaggio tramite un selettore JsonPath, che punta a uno specifico campo del payload (ad esempio un ID ordine, codice prodotto o riferimento documento). Grazie a questo meccanismo, Flowlyze è in grado di riconoscere versioni multiple dello stesso dato e di mantenere soltanto la copia più recente, evitando duplicazioni o invii non necessari alla piattaforma di destinazione.
Finalità della correlazione
La correlazione è particolarmente utile nei casi in cui:
- lo stesso record può essere ricevuto più volte (ad esempio aggiornamenti successivi di un ordine o di un’anagrafica),
- è necessario garantire la coerenza dei dati inviati,
- e si desidera che solo la versione più aggiornata del messaggio venga elaborata e consegnata.
Configurazione
Il meccanismo di correlazione si basa su due impostazioni principali, configurabili a livello di flusso:
- Correlation Json Path
Selettore in formato JsonPath che individua l’identificativo univoco del messaggio proveniente dalla sorgente. Esempio:$.order.idper identificare i messaggi relativi allo stesso ordine. - Correlation Priority Path
Selettore JsonPath che indica il campo di priorità da utilizzare per confrontare più versioni dello stesso messaggio.
Può trattarsi, ad esempio, della data dell’ultima modifica o di un numero di versione incrementale. Esempio:$.order.lastUpdatedo$.version.
In sintesi, la correlazione consente a Flowlyze di mantenere l’ordine logico dei dati e di ottimizzare il processo di consegna, assicurando che la destinazione riceva sempre l’informazione più aggiornata e coerente disponibile.