Sintesi tecnica
Punti chiave:
  • Questo articolo tratta i principali aspetti della sicurezza.

La domanda se una REST API sia adatta all’industria oggi non riguarda più una preferenza sullo stile di integrazione, ma una decisione su dove il progetto assorbirà costi, ritardi e responsabilità operative. In ambito industriale, l’interfaccia di comunicazione smette molto rapidamente di essere un semplice “livello tecnico” e inizia a incidere sulla continuità del processo, sulla ripetibilità delle operazioni, sulla possibilità di audit e sulle modalità di risposta ai guasti. REST funziona bene quando ci si aspetta una chiamata semplice, una risposta univoca e un controllo chiaro sullo stato della richiesta. Il problema emerge quando il sistema deve continuare a funzionare nonostante l’indisponibilità temporanea di uno dei soggetti coinvolti, quando i messaggi devono essere consegnati con conferma, oppure quando un singolo evento deve produrre effetti in più ambiti indipendenti. In questi casi, la scelta tra richiesta sincrona e coda, broker e comunicazione event-driven non è più tecnicamente neutra.

Questo aspetto è particolarmente rilevante proprio ora, perché un numero crescente di progetti industriali collega il controllo, la manutenzione, i sistemi qualità, la reportistica di produzione e i servizi esterni in un’unica catena di dipendenze. Se l’architettura si basa esclusivamente su chiamate sincrone, il team si ritrova spesso con un sistema apparentemente semplice, ma fragile quando aumenta il numero di integrazioni, quando la rete è instabile o quando è richiesto un tracciamento rigoroso degli eventi. Il costo di questa decisione non emerge nella fase di dimostrazione delle funzionalità, ma più avanti: nel blocco dei processi causato da un componente non disponibile, nella difficoltà di ricostruire la dinamica di un incidente, nella riconciliazione manuale degli stati tra sistemi e nelle contestazioni sul fatto che un’operazione sia stata realmente eseguita o soltanto richiesta. Per il product owner e il project manager, il criterio pratico è semplice: bisogna stabilire se un determinato scambio di dati abbia la natura di “domanda-risposta qui e ora” oppure piuttosto di “registra il fatto e garantiscine la successiva gestione anche in presenza di anomalie”. Da questa risposta dipendono non solo la tecnologia, ma anche il modello di responsabilità tra i team.

Nella pratica, questo si vede bene nei sistemi macchina in cui una singola azione dell’operatore o un singolo evento di processo devono essere registrati, trasmessi e confermati in più punti. Se l’applicazione di supervisione invia una richiesta sincrona ai servizi successivi e attende l’insieme completo delle risposte, un problema temporaneo di un solo elemento può arrestare l’intera sequenza, anche se parte degli effetti operativi dovrebbe verificarsi comunque in modo indipendente. Un broker o una coda, invece, consentono di separare il momento di acquisizione dell’informazione da quello della sua elaborazione, mantenere la traccia dell’evento e controllare più facilmente il nuovo tentativo in caso di errore. Questo non significa che la comunicazione event-driven sia sempre migliore: se serve una decisione immediata che blocchi l’ulteriore movimento della macchina oppure se l’operatore deve ricevere subito una risposta vincolante, un modello asincrono privo di stati intermedi ben progettati può aumentare l’incertezza. Per questo, già all’inizio del progetto conviene misurare non solo il tempo di risposta, ma anche il numero di messaggi persi o duplicati, il tempo necessario per riconciliare stati divergenti e la possibilità di ricostruire la sequenza degli eventi dopo un incidente.

Questo tema si collega in modo naturale alla valutazione del rischio nei progetti industriali, perché la scelta della modalità di comunicazione influisce sulle conseguenze dell’errore, sulla rilevabilità delle anomalie e sulla possibilità di introdurre misure efficaci di riduzione del rischio. Se attraverso l’interfaccia transitano funzioni il cui errato funzionamento può portare a un avviamento non intenzionale, a una pericolosa variazione di stato oppure alla perdita di controllo dell’energia, il tema cessa di essere esclusivamente informatico e rientra nell’ambito della progettazione del sistema macchina e della valutazione delle misure di protezione. È proprio a questo punto che si delinea anche il confine oltre il quale occorre considerare temi correlati, tra cui la protezione contro l’avviamento inatteso e la valutazione del rischio secondo la ISO 12100 secondo la metodologia adottata. In altre parole: la decisione tra REST, coda o broker dovrebbe essere presa non dopo una demo di integrazione, ma quando il team è in grado di definire le conseguenze di un messaggio errato o ritardato per il processo, la sicurezza e la tracciabilità delle operazioni.

Dove più spesso aumentano costi o rischio

La maggior parte delle decisioni sbagliate non deriva dalla scelta della “tecnologia sbagliata”, ma dall’assegnare una REST API a compiti per i quali non è stata progettata. Nell’industria, i costi aumentano quando un’interfaccia richiesta-risposta deve gestire una comunicazione sensibile all’indisponibilità temporanea, all’ordine degli eventi o alla necessità di una conferma affidabile dell’esecuzione. Se il sistema deve solo leggere lo stato corrente di un dispositivo oppure ricevere un comando la cui mancata esecuzione può essere facilmente rilevata e ripetuta senza effetti collaterali, REST può essere sufficiente. Se però il risultato dipende dal fatto che il messaggio arrivi esattamente una volta, nel giusto ordine e con la possibilità di ricostruire la cronologia dopo un incidente, il costo necessario per aggirare i limiti di REST supera rapidamente l’apparente semplicità dell’implementazione. In pratica, questo significa logiche aggiuntive di ritentativo, meccanismi proprietari di buffering, riconciliazione di stati divergenti e maggiore difficoltà nell’accertare le responsabilità quando il dispositivo ha eseguito l’operazione più tardi del previsto oppure l’ha eseguita due volte.

In fase di progettazione il problema di solito appare innocuo: il team presume una rete stabile, la disponibilità costante dei servizi e uno stato univoco su entrambi i lati dell’integrazione. Nell’ambiente industriale queste ipotesi raramente restano valide a lungo. Si verificano interruzioni di connettività, riavvii dei dispositivi, aggiornamenti del sistema intermedio e talvolta semplicemente sovraccarichi durante il cambio turno produttivo. In quel momento un’architettura basata esclusivamente su chiamate sincrone comincia a trasferire il rischio sulle applicazioni e sugli operatori. Il costo del progetto cresce non solo per le correzioni software, ma anche per i test di ripristino, le procedure operative aggiuntive e le contestazioni su quale parte “avrebbe dovuto sapere” che la richiesta non era stata eseguita. Il criterio pratico per decidere è semplice: se l’indisponibilità del destinatario non può fermare il mittente e il messaggio deve essere conservato in modo sicuro e gestito in un secondo momento, occorre valutare seriamente una coda, un broker o una comunicazione a eventi invece di un REST puro.

Un buon esempio è l’integrazione di un sistema di supervisione con una linea, in cui un sistema ordina il cambio ricetta e diversi altri devono recepire tale modifica, confermarla e applicarla nel momento corretto del ciclo. Con REST è facile costruire una chiamata del tipo “imposta parametri”, ma è più difficile garantire che tutti gli elementi interessati abbiano ricevuto la stessa informazione, che un messaggio più vecchio non sovrascriva uno più recente e che, dopo un guasto, sia possibile stabilire chi abbia visto quale comando. Un broker di eventi o una coda affrontano il problema in modo diverso: il messaggio diventa un fatto persistente nel sistema, tracciabile, riprocessabile e acquisibile in modo indipendente da più destinatari. Non si tratta di una scelta soltanto tecnica. Da essa dipende la possibilità, in caso di reclamo su un lotto, fermo impianto o incidente, di dimostrare la sequenza delle decisioni del sistema e quindi anche di attribuire le responsabilità contrattuali, operative o interne. Dove la tracciabilità delle responsabilità è importante, conviene misurare non solo il ritardo della risposta, ma anche il numero di messaggi che richiedono un nuovo invio, il tempo necessario per riallineare lo stato dopo un guasto e la possibilità di ricostruire la sequenza degli eventi senza una ricostruzione manuale a partire da più registri.

Questo tema entra nell’ambito della valutazione del rischio secondo la ISO 12100 quando un messaggio errato o tardivo può modificare il comportamento della macchina, del processo o di una misura di protezione. In questo caso non basta più chiedersi quanto sia comoda l’integrazione; occorre valutare l’effetto, la rilevabilità e la possibilità di limitare le conseguenze, in coerenza con la prassi nota dalla ISO 12100. Se la comunicazione riguarda funzioni legate alla sicurezza, interblocchi, condizioni di avviamento o conferme dello stato dell’energia, il confine della responsabilità progettuale si sposta dal livello dell’applicazione a quello dell’intero sistema macchina. Analogamente, anche negli attuatori, compresi quelli idraulici, un’ipotesi errata sulla consegna tempestiva dell’informazione può entrare in conflitto con i principi di progettazione delle misure di protezione e degli stati sicuri, portando naturalmente a questioni associate alla UNI EN ISO 4413. In altre parole, code e broker non sono “migliori per definizione”, ma diventano la scelta corretta laddove il progetto deve resistere a un guasto di comunicazione senza perdere controllo, storico e responsabilità delle azioni eseguite.

Come affrontare il tema nella pratica

In pratica la domanda non è se una REST API sia buona o cattiva, ma se sia adatta alle conseguenze di un errore, di un ritardo o dell’assenza di risposta in un determinato processo industriale. Se la comunicazione serve soprattutto a leggere dati, avviare attività amministrative o integrare sistemi aziendali, un’interfaccia richiesta-risposta può essere la soluzione più semplice ed economica. Il problema inizia quando il progetto richiede continuità nello scambio di informazioni nonostante la temporanea indisponibilità di una delle parti, la necessità di un’elaborazione ordinata degli eventi oppure l’obbligo di ricostruire chi, quando e su quale base abbia provocato una determinata variazione di stato. In una configurazione di questo tipo, scegliere REST come meccanismo predefinito spesso riduce il costo iniziale, ma aumenta il costo della gestione dei guasti, del riallineamento dello stato dopo un’interruzione e dell’analisi di un incidente. È questo il momento in cui code, broker e comunicazione a eventi smettono di essere un “elemento architetturale aggiuntivo” e diventano uno strumento per ridurre il rischio di progetto e la responsabilità operativa.

Per il team e per il manager questo significa dover prendere una decisione architetturale sulla base di alcune caratteristiche misurabili del processo, e non delle preferenze del fornitore. Il criterio più utile è semplice: bisogna stabilire che cosa debba accadere al messaggio quando il destinatario non risponde al momento dell’invio. Se la risposta corretta è “nulla di critico, l’operazione può essere ripetuta o scartata in sicurezza”, REST di solito è sufficiente. Se invece il messaggio deve essere conservato, consegnato alla ripresa dell’attività, elaborato una sola volta oppure in un ordine dimostrabile, allora l’architettura sincrona comincia a non essere più allineata ai requisiti del processo. Vale la pena fissarlo già nella fase dei presupposti come criteri di accettazione: tempo ammissibile di indisponibilità del partner, modalità di ritentativo, regole di deduplicazione, possibilità di tracciare la correlazione degli eventi e modalità di ripristino dello stato dopo un guasto. Senza queste definizioni il progetto sembra partire più rapidamente, ma in seguito si ripresenta sotto forma di costose modifiche di integrazione, controversie sull’ambito delle responsabilità e non conformità operative difficili da chiudere.

Un buon esempio è una linea o una cella in cui il sistema di supervisione trasmette gli ordini, mentre i controllori e le postazioni riportano l’esecuzione, gli scarti, i blocchi o i passaggi tra le modalità operative. Se ogni evento viene “interrogato” immediatamente via REST, una perdita anche temporanea della connettività genera molto rapidamente uno scostamento tra lo stato reale e quello visualizzato nell’applicazione. Dal punto di vista della produzione, questo si traduce in riconciliazioni manuali; dal punto di vista della qualità, in una lacuna nella storia del lotto; dal punto di vista della manutenzione, nell’incertezza se un determinato comando sia stato eseguito oppure soltanto inviato. Un broker con memorizzazione persistente dei messaggi non risolve tutto, ma mette ordine nelle responsabilità: il mittente ha trasmesso l’evento, il sistema intermedio lo ha conservato, il destinatario lo ha confermato oppure no. È una differenza sostanziale quando si analizzano le cause di un fermo e si deve accertare se l’errore derivi dalla logica di processo, da un guasto di rete o da una sequenza errata di azioni dell’operatore. Proprio per questo la scelta del modello di comunicazione incide non solo sul costo dell’implementazione, ma anche sui tempi di avviamento, assistenza e audit.

Questo tema entra nell’ambito della valutazione pratica del rischio quando il messaggio non è più soltanto un’informazione, ma una condizione per il funzionamento della macchina, del processo o di una misura di protezione. Se dalla corretta trasmissione dello stato dipende la possibilità di avviare, riprendere il lavoro dopo un arresto, sbloccare una sequenza oppure confermare lo stato sicuro dell’energia, allora la scelta di integrazione diventa parte di una decisione progettuale di maggiore rilievo. In questo caso occorre valutare non solo la disponibilità della comunicazione, ma anche le conseguenze della sua perdita, del ritardo, della duplicazione e dell’errata interpretazione; qui entra naturalmente in gioco la metodologia nota della valutazione del rischio secondo la ISO 12100. D’altra parte, quando la comunicazione incide sulle condizioni di prevenzione dell’avviamento inatteso, il livello informativo non può essere trattato come sostituto delle soluzioni previste per il sezionamento dell’energia e per lo stato sicuro. Questo è il limite oltre il quale il tema si collega già all’analisi della protezione contro l’avviamento inatteso e, più in generale, alla progettazione del sistema macchina che va oltre la sola funzionalità. In altre parole, REST è adatto all’industria quando i suoi limiti sono consapevolmente accettati dal processo; quando non lo sono, risultano più appropriati i meccanismi di accodamento e di comunicazione a eventi, perché rispondono meglio ai requisiti di continuità, tracciabilità e controllo degli effetti dei guasti.

A cosa prestare attenzione nell’implementazione

L’errore più frequente in fase di implementazione consiste nel considerare la scelta tra REST API e comunicazione a eventi come una decisione puramente tecnica, mentre nell’industria si tratta di una decisione con conseguenze operative e organizzative. REST non smette di funzionare solo perché viene introdotto in un reparto produttivo, ma mostra molto rapidamente i propri limiti laddove il sistema deve assorbire interruzioni di connettività, carichi non uniformi, indisponibilità temporanee dei servizi e la necessità di ricostruire in seguito la sequenza degli eventi. Se l’architettura presuppone che ogni risposta debba arrivare immediatamente e al primo tentativo, il progetto diventa fragile. La conseguenza è di solito prevedibile: aumenta il costo dell’integrazione, si moltiplicano i meccanismi di aggiramento e la responsabilità per uno stato errato del processo si disperde tra i fornitori dei sistemi. D’altra parte, code e broker non risolvono il problema in automatico; introducono rischi propri, come l’elaborazione ritardata, la duplicazione dei messaggi, la necessità di ordinare le sequenze e un monitoraggio più complesso. La domanda, quindi, non è se REST sia sempre adatto all’industria, ma se un determinato processo tolleri le caratteristiche di questa forma di comunicazione senza trasferire il rischio alla produzione, alla manutenzione e alla conformità.

In fase di progettazione conviene adottare un criterio di valutazione semplice: che cosa accade esattamente al processo se il messaggio non arriva, arriva due volte oppure arriva troppo tardi. Se l’effetto è soltanto un aggiornamento ritardato dei dati nel sistema di reporting, REST può essere sufficiente. Se invece la mancanza di risposta blocca una sequenza, impone un intervento manuale, comporta la perdita della storia di esecuzione delle operazioni oppure rende difficile stabilire chi abbia preso una decisione e su quale base, allora l’architettura sincrona inizia a generare costi già nella fase di avviamento. In una situazione del genere, una comunicazione basata su coda o broker di norma organizza meglio le responsabilità: il mittente conferma la trasmissione, il destinatario elabora secondo i propri tempi e il team può osservare arretrati, ritentativi ed errori. Per il project manager questo significa dover misurare non solo la disponibilità del servizio, ma anche indicatori come il tempo di giacenza del messaggio, la percentuale di ritentativi, il numero di messaggi non riconciliati e il tempo necessario per ricostruire la cronologia degli eventi dopo un incidente.

Nella pratica il problema emerge soprattutto quando una singola integrazione inizia a svolgere contemporaneamente più ruoli. Per esempio: il sistema di supervisione invia un ordine a una postazione, riceve la conferma di esecuzione e, nel frattempo, registra uno stato che condiziona il successivo avviamento della linea. Finché si parla di scambio di dati di business, un ritardo di alcuni secondi può essere accettabile. Se però lo stesso canale di comunicazione inizia a influire su una decisione esecutiva nel processo, smette di essere un’aggiunta informatica neutra. A quel punto una scelta errata del meccanismo si traduce non solo nel costo dei fermi, ma anche nella responsabilità rispetto al fatto che il sistema reagisca in modo prevedibile alla mancanza di connettività, al riavvio del servizio o al duplicato di un messaggio. È il momento in cui il tema passa naturalmente nell’ambito della progettazione del sistema macchina oltre la sola funzionalità: occorre stabilire quali effetti del guasto siano tollerabili e quali, invece, richiedano di essere separati dal livello di integrazione.

Questo confine diventa ancora più importante quando la comunicazione inizia a riguardare condizioni legate alla sicurezza funzionale o alla valutazione del rischio. Se dal corretto scambio dei dati dipendono il rispetto di una condizione di stato sicuro, l’autorizzazione alla ripresa del funzionamento, la conferma dell’assenza di energia pericolosa oppure un’altra funzione con rilevanza protettiva, la sola buona pratica di integrazione non basta. A questo punto occorre stabilire con chiarezza se l’elemento considerato rimane esclusivamente a livello informativo oppure rientra già nella progettazione delle parti dei sistemi di comando responsabili delle funzioni di sicurezza. È qui che emergono le domande pertinenti nell’ambito della UNI EN ISO 13849-1 e della valutazione del rischio secondo la ISO 12100, ma solo dopo aver definito la funzione e gli effetti del guasto. Per il team, questo significa dover separare ciò che può essere gestito tramite coda, broker o REST da ciò che non può basarsi esclusivamente su una comunicazione di uso generale. Se questo confine non viene definito fin dall’inizio, il costo si ripresenta in seguito sotto forma di modifiche al progetto, contestazioni in fase di collaudo e responsabilità decisionale difficile da sostenere.

Le API REST sono sempre adatte all’industria? Quando è meglio puntare su code, broker e comunicazione event-driven?

No. REST si adatta bene a un semplice modello domanda-risposta, ma è meno adatto nelle situazioni in cui il messaggio deve resistere a un’indisponibilità temporanea del destinatario oppure essere elaborato in un secondo momento.

Quando è necessario leggere lo stato in tempo reale oppure inviare un comando univoco con risposta immediata. È adatta anche nei casi in cui la mancata esecuzione possa essere rilevata facilmente e ripetuta in sicurezza, senza effetti collaterali.

Quando il mittente non può attendere il destinatario e il messaggio deve essere conservato ed elaborato nonostante eventuali interruzioni. È importante anche quando un singolo evento deve produrre effetti in più sistemi indipendenti.

Sono in aumento i problemi legati ai tentativi ripetuti, all’allineamento di stati incoerenti e alla ricostruzione della cronologia dopo un incidente. In pratica, l’indisponibilità temporanea di un singolo componente può bloccare l’intera sequenza delle operazioni.

No. Se è necessaria una risposta immediata e vincolante, oppure una decisione che blocchi l’ulteriore movimento della macchina, un modello asincrono può aumentare l’incertezza se gli stati intermedi non sono stati progettati correttamente.

Condividi: LinkedIn Facebook