Architettura orientata ai servizi (SOA)

Cosa si intende con architettura orientata ai servizi?

Una SOA è un paradigma moderno di architettura software che consente di costruire applicazioni come un insieme di unità software modulari chiamate servizi. In una SOA i servizi sono completi, modulari e debolmente accoppiati. Questo approccio consente di costruire applicazioni complesse e distribuite nelle quali è possibile aggiornare i singoli componenti, a differenza delle applicazioni completamente monolitiche. Un tipico stack di software SOA include un software dell’applicazione che comprende servizi, servizi della piattaforma e middleware. Questi servizi sono in esecuzione su hardware a prestazioni elevate o macchine virtuali.

Stack di software SOA generico con vari livelli dall’alto in basso (software dell’applicazione, middleware, software di base) che sono in esecuzione su hardware a prestazioni elevate.

Stack di software SOA generico.

Comunicazione orientata ai servizi (SOC)

Le applicazioni basate su SOA utilizzano interfacce orientate ai servizi per la comunicazione orientata ai servizi al fine di fornire e utilizzare funzionalità per scambiare informazioni tramite messaggi. I servizi svolgono il ruolo di client o server in una SOA. Ogni servizio client o server è implementato nel software come un componente. I punti di connessione tra i componenti client e server sono definiti porte client/server, che costituiscono le interfacce orientate ai servizi.

Due applicazioni orientate ai servizi comunicano tra loro tramite messaggi.

Comunicazione orientata ai servizi tramite messaggi.

Per facilitare lo scambio di informazioni, i componenti client e server utilizzano vari pattern di comunicazione orientati ai servizi, tra cui pubblicazione-sottoscrizione, richiesta-risposta e fire-forget. Questi pattern possono essere asincroni o sincroni, una caratteristica fondamentale di SOC. La modellazione event-based può essere effettuata con Stateflow® e SimEvents®. Inoltre, la libreria Messaggi ed Eventi in Simulink® consente di modellare, simulare e generare codice C++ per le applicazioni che utilizzano una comunicazione basata su messaggi.

Pattern di interfaccia della comunicazione orientata ai servizi, compresi metodi (richiesta/risposta e fire/forget), eventi e campi.

Pattern di interfaccia della comunicazione orientata ai servizi.

Workflow di una SOA

Con un workflow di progettazione Model-Based è possibile costruire delle applicazioni orientate ai servizi mediante:

  • Specificazione dei requisiti con Requirements Toolbox™
  • Authoring di SOA con System Composer™
  • Modellazione e simulazione di servizi e componenti in Simulink
  • Importazione di servizi e componenti esistenti affinché possano essere riutilizzati
  • Generazione di codice di produzione C++ con Embedded Coder®
  • Integrazione dell’intera applicazione SOA
  • Distribuzione delle applicazioni SOA su dispositivi edge e sul Cloud

Estensibilità delle SOA

I servizi possono essere riutilizzati e aggiornati. Consentono agli ingegneri software di costruire applicazioni scalabili orientate ai servizi utilizzando i principi della metodologia agile, compresi sistemi che supportano aggiornamenti over-the-air (OTA) in modo che siano sempre aggiornati.

Workflow di un veicolo definito dal software che mostra la sequenza di passaggi e strumenti associati per accelerare il tempo di ripresa dagli incidenti.

Workflow di un veicolo definito dal software per accelerare il tempo di ripresa dagli incidenti.

Casi d’uso per SOA

Per i sistemi definiti dal software che integrano autonomia, connettività ed elettrificazione, l’architettura orientata ai servizi svolge un ruolo essenziale in quanto framework di base. Le SOA vengono quindi utilizzate anche per costruire sistemi di sistemi, sistemi multiagente, sistemi ad eventi discreti e sistemi distribuiti nel settore automotive, aerospaziale, dell’automazione industriale e IoT, dei dispositivi medici e della robotica.

Per supportare questi settori sono stati sviluppati framework per architetture software, standard middleware e protocolli di comunicazione basati sull’architettura orientata ai servizi e sulla comunicazione orientata ai servizi. Tra gli esempi di questi framework e standard figurano AUTOSAR Adaptive, DDS, ROS/ROS2, FACE, SOME/IP, MOSA, MQTT e OPC UA.

SOA nel settore automotive

Le SOA sono maggiormente diffuse nel settore automotive con l’avvento dei veicoli definiti dal software (SDV). I SDV integrano applicazioni basate sui segnali e orientate ai servizi in architetture EE con computer di veicoli e controller di zona. Con System Composer e Simulink gli sviluppatori possono modellare le SOA, simularle e generare codice di produzione C++ prima di distribuirle come servizi modulari su dispositivi edge e sul Cloud. Nel settore automobilistico, AUTOSAR è uno standard comune che utilizza la metodologia SOA per piattaforme Adaptive. Con AUTOSAR Blockset è possibile modellare e simulare applicazioni AUTOSAR Classic e Adaptive, quindi generare codice C/C++ e verificarlo con Embedded Coder. Inoltre, questi servizi possono essere aggiornati con aggiornamenti software over-the-air durante il ciclo di vita del veicolo per migliorare l’esperienza del cliente. Le SOA sono state integrate negli standard industriali indicati sopra e nei framework in-house.

Un esempio nel settore automotive che mostra uno stack di software AUTOSAR Classic e uno stack di software AUTOSAR Adaptive connesso al Cloud.

Esempio nel settore automotive: stack di software AUTOSAR Classic e Adaptive.

SOA nel settore aerospaziale e della difesa

Nel settore aerospaziale e della difesa, la SOA figura nello standard Future Airborne Capability Environment (FACE™), che è parte dell’iniziativa per la standardizzazione Modular Open Systems Approach (MOSA). FACE utilizza Transport Services Segments (TSS) per la comunicazione orientata ai servizi. Con Simulink e DDS Blockset è possibile modellare e simulare applicazioni per lo standard FACE, importare FACE IDL per DDS TSS, simulare la comunicazione FACE TSS, generare codice di produzione C++ e poi distribuirlo per le applicazioni FACE.

Workflow basato su FACE IDL che mostra l’importazione di IDL, la visualizzazione e la modifica del dizionario dati di interfaccia, la modellazione degli algoritmi, la generazione di codice C++ e la sua distribuzione per le applicazioni FACE.

Workflow basato su FACE IDL dall’importazione alla distribuzione.

Vedere anche: System Composer, Simulink, Stateflow, Embedded Coder, AUTOSAR Blockset, DDS Blockset