Vai al contenuto
Matteo Fiameni
← Note dal campo

A · Dal campo

La rete cade, la linea no

Come progetto un middleware di fabbrica che continua a lavorare quando la rete o i servizi esterni non ci sono, e cosa deve dichiarare quando non può.

· 4 min di lettura

  • offline-first
  • edge
  • MQTT
  • buffer
Una piccola fabbrica con le finestre illuminate e, davanti, uno scavo stradale recintato con un cavo in fibra ottica tranciato
Illustrazione generata con AI

In fabbrica la rete cade spesso. Una volta è rimasta giù per diversi giorni: un cantiere aveva danneggiato la fibra in strada. Lo stabilimento era tagliato fuori dal gestionale in cloud, da cui arrivano gli ordini.

La produzione non si è fermata. Il buffer ha retto senza problemi. E per le interruzioni lunghe era già prevista una modalità manuale: gli ordini e le altre informazioni che non potevano arrivare dal gestionale si inserivano a mano, in locale. Quando la fibra è tornata, i dati sono ripartiti verso il cloud.

Non è stata fortuna. Era stato deciso prima.

Quando progetto un middleware industriale parto da un presupposto: la rete cadrà, e prima o poi un servizio esterno non risponderà. Non è un'eccezione da gestire, è uno stato normale del sistema. Va progettato come gli altri, decidendo tre cose: cosa continua, cosa si ferma e come si rimettono in ordine i dati quando la rete torna.

01Cosa continua, cosa si ferma

Continua

In locale, senza rete

  • L'acquisizione dai PLC.
  • Le logiche che non hanno bisogno di informazioni esterne.
  • La registrazione degli eventi, nel buffer.
  • Il lavoro manuale previsto per le interruzioni lunghe.

Si ferma, dichiarandolo

Quello che dipende da altri

  • Un nuovo ordine dal gestionale.
  • Una rischedulazione.
  • Le conferme che solo un sistema esterno può dare.

Se aspetto un nuovo ordine o una rischedulazione dal sistema centrale, non posso inventarmeli. In quel caso il sistema deve dire che l'operazione non è disponibile, oppure passare la decisione a una persona, come nei giorni senza fibra. La cosa peggiore è un sistema che sembra funzionare quando non può.

02Il buffer non dura per sempre

Il buffer lo dimensiono su tre cose: quanto a lungo il sistema deve poter lavorare senza connessione, quanti dati genera in quel tempo e quanto spazio c'è davvero sull'edge.

Poi decido cosa succede quando si riempie, perché non posso scrivere fino a esaurire il disco. A seconda del dato posso ridurre la frequenza di acquisizione, scartare i campioni meno importanti, o smettere di accettare operazioni che richiedono una registrazione affidabile.

Un computer industriale su guida DIN, sopra un contenitore trasparente pieno per tre quarti di blocchi luminosi
Illustrazione generata con AI
Un buffer che promette di durare all'infinito è una promessa falsa.

03Non tutti i dati valgono uguale

Si può diradare

Telemetria

Per una temperatura letta ogni secondo può bastare l'ultimo valore, o una frequenza ridotta durante un'interruzione lunga.

Va conservato tutto

Pezzi, scarti, eventi

Coda persistente, integrale: sono i dati che servono alla tracciabilità e al conteggio.

Va dichiarato

Eventi critici

Una politica di conservazione esplicita, e un segnale quando non posso più garantirla.

Non è una scelta tecnica. È una decisione sui requisiti del processo: prima si stabilisce cosa si può perdere, aggregare o recuperare e cosa va conservato. Poi si scrive il codice.

04Quando la rete torna

Reinviare i messaggi accumulati non basta. Ogni evento deve avere un identificativo univoco e il momento in cui è nato.

Duplicati. Con MQTT a QoS 1 la consegna è garantita «almeno una volta» (OASIS, MQTT 5.0): lo stesso messaggio può arrivare due volte. Chi riceve deve riconoscere gli eventi già elaborati, con l'identificativo e un registro persistente di ciò che ha già processato. Altrimenti un pezzo prodotto viene contato due volte.

Tempi. Distinguo tre momenti, e con tutti e tre si ricostruisce cosa è successo durante l'interruzione.

Tre timestamp per ogni evento

SorgenteAcquisito
  • quando la macchina l'ha prodotto
EdgeRegistrato
  • quando il middleware l'ha messo nel buffer
CentraleRicevuto
  • quando il sistema centrale l'ha elaborato

Ordine. L'ordine di arrivo non è sempre quello reale. Per un evento di produzione devo poter ricostruire la sequenza. Per una misura aggiornata spesso conta di più sapere qual è il valore più recente e attendibile.

05Chi vince, il locale o il cloud?

Non c'è una regola unica. Dipende dal dato e da chi ne è responsabile. Lo stato di una macchina si decide in locale; un ordine di produzione può appartenere al sistema centrale.

Per questo separo i dati che si possono aggiornare in locale da quelli che richiedono un'autorizzazione o una conferma esterna. Al ritorno della rete il sistema riconcilia secondo queste regole. Un'informazione non vince solo perché è arrivata per ultima.

06Cosa vede l'operatore

L'operatore non deve trovarsi davanti a uno schermo che mostra dati vecchi come se fossero attuali. L'interfaccia deve mostrare lo stato della connessione e distinguere i dati aggiornati da quelli che non arrivano più. Se un'operazione non è disponibile, deve dirlo.

Se si possa lavorare a mano dipende dal processo e dalle procedure dello stabilimento. A volte si continua a produrre e si registra in locale, per recuperare dopo. Altre volte certe operazioni vanno sospese, perché mancano informazioni o autorizzazioni.

07L'errore più comune

Un sistema che sembra offline-first ma dipende ancora da servizi esterni per le operazioni fondamentali. L'acquisizione dai PLC continua, ma alla prima chiamata a un servizio irraggiungibile il worker si blocca. Oppure un errore ferma anche i messaggi che di quel servizio non avevano bisogno.

Il rimedio
Separare le operazioni locali da quelle che richiedono una risposta esterna, gestire gli errori senza bloccare il resto, e decidere prima cosa succede quando una dipendenza non c'è.

Prima del rilascio

Le quattro prove che faccio in collaudo

  • Il backend o il broker che non rispondono.
  • La rete che cade e torna.
  • Un'interruzione lunga, fino a riempire il buffer.
  • Un riavvio dell'edge con dati ancora da inviare.

Il test non è «si riconnette». È «dopo il ripristino i dati e lo stato applicativo sono ancora coerenti, senza duplicati». Prevedere la riconnessione è la parte facile; il lavoro vero è progettare come si comporta tutto il sistema mentre la rete non c'è.

Condividi questa nota