Articoli

Azure Stream Analytics

Agganciandoci direttamente a “QUALCOSA DI STRANO SU QUEL SENSORE? CHI CHIAMERAI?” proseguiamo il nostro viaggio insieme con il dato, dal sensore al motore di intelligenza artificiale, illustrando il componente successivo nella nostra semplice infrastruttura che abbiamo ipotizzato: Azure Stream Analytics.

Per fare un riassunto della situazione in cui ci troviamo alla fine dello scorso articolo: abbiamo rilevato un evento da un sensore (o un qualsiasi altro apparato) che ha generato un dato preso in consegna da Azure Iot Hub o da Azure Event Hub, che si è occupato di confezionare il dato e mandarlo al sistema che è preposto per la sua analisi.

Che cos’è Azure Stream Analytics

Azure Stream Analytics è un servizio Azure che costituisce di fatto un motore per l’analisi; analizza dati in tempo reale, progettato per analizzare ed elaborare contemporaneamente ingenti volumi di dati in streaming veloce da più origini.

Producer di eventi

Consente di analizzare i dati ricevuti per innescare diversi flussi di lavoro: analisi avanzate per l’IoT (utilizzando Azure IoT Edge), dispacciare informazioni, archiviarle, eseguire calcoli o implementazioni, aggiornare sistemi di reportistica oppure chiamare API.

Tra i fari scenari in cui Azure Stream Analytics può essere utilizzato abbiamo:

  • Analisi di flussi dati di telemetria in tempo reale da dispositivi IoT.
  • Monitoraggio remoto e manutenzione predittiva.
  • Analisi in reale di dati di punti vendita.
  • Controllo degli inventari e rilevamento delle anomalie.
  • Analisi geospaziale per la gestione di flotte di veicoli (anche senza conducente).
  • Analisi di log/clickstream.

Sostanzialmente abbiamo 3 parti: input, query e output, con la parte query basata su linguaggio SQL, che può essere usata per filtrare, ordinare e aggregare, inoltre con la possibilità di integrare al linguaggio SQL anche JavaScript e con funzioni in C# consente praticamente qualsiasi tipo di manipolazione del dato e di integrazione con altri componenti di Azure come Service Bus, Azure Function, API, l’archiviazione dei dati (con Azure Data Lake, Cosmos DB o SQL DB) piuttosto che l’invio a Azure Synapse Analytics.

Quindi un componente estremamente versatile che permette l’integrazione con un ecosistema ampio, che di fatto lo rende quasi indispensabile in qualunque disegno di architettura di gestione dati, in particolar modo per la parte IoT o di intelligenza artificiale sia per le analisi predittive che non.

Configurare Azure Stream Analytics

Procediamo quindi ad illustrare un esempio di configurazione di Azure Stream Analytics:

dal portale Azure (link), selezionare Crea Risorsa (nell’angolo superiore a sinistra), quindi selezionare Stream Analytics Job, e completare le seguenti informazioni:

  1. Nome: immettere un nome identificativo per il processo che si sta creando.
  2. Subscription: la sottoscrizione Azure in uso.
  3. Resouce Goup: selezionare il gruppo risorse che si desidera utilizzare, che ovviamente dovrà essere lo stesso del servizio da cui provengono i dati.
  4. Location: l’area geografica che deve ospitare il processo. Solitamente, al fine di ottenere prestazione migliori si consiglia sempre di utilizzare l’area geografica più vicina all’utente (ma alle volte i servizi hanno prezzi diversi a seconda dell’area geografica che si seleziona).
  5. Unità di streaming: che rappresentano le risorse di calcolo che potrà utilizzare il processo. Influenza anche il prezzo che il processo di Stream Analytics oltre che le prestazioni, motivo per cui faremo un approfondimento successivo. Il portale di base assegna 3.

quindi su Crea per procedere con la creazione del servizio.

Configurare Azure Stream Analytics

Continuando quindi il percorso iniziato con l’articolo precedente, sarà necessario collegare il servizio alla fonte dati di input, Azure IoT Hub, quindi dal menu a colonna sulla sinistra, selezionare Inputs, Aggiungi input del flusso, quindi IoT Hub.

Configurare Azure Stream Analytics

E quindi finalizzare la creazione del flusso di input inserendo i seguenti dati:

  1. Alias input: nome che indentifica l’input di processo.
  2. Subscription: la sottoscrizione Azure che include l’account di archiviazione creato.
  3. Hub IoT: selezionare l’IoT Hub desiderato fra quelli disponibili.

A questo punto colleghiamo l’input al servizio; per completare la configurazione dobbiamo configurare l’output ed eventualmente la query.

Dallo stesso menu dal quale abbiamo scelto Input, output selezioniamo il tipo di output che vogliamo. Le selezioni sono molteplici e dipendono dalla posizione che l’Azure Stream Analytics occupa nel nostro disegno, infatti possiamo selezionare:

  • Event Hub
  • Archiviazione BLOB
  • Archivio tabelle
  • Service bus
  • Cosmos DB
  • Power BI
  • Data Lake Storage
  • SQL DB

Quindi a seconda della funzionalità che l’output dovrà avere sarà necessario selezionare uno di questi componenti. Tuttavia, la tipologia di output è influenzato dalle lavorazioni che i dati che riceviamo devono subire, per impostare queste lavorazioni sempre dal menu utilizziamo Query.

Immaginiamo quindi di voler inserire in un blob storage tutte le misurazioni di temperature superiori ai 27 gradi, ci basterà inserire la query

SELECT *
INTO BlobOutput
FROM IoTHubInput
WHERE Temperature > 27

Configurare Azure Stream Analytics

 

Con questi pochi passaggi abbiamo configurato un Azure Stream Analytics, anche se con una query molto semplice nel quale ci limitiamo a filtrare un dato in ingresso; facciamo tuttavia un piccolo passo indietro per analizzare meglio le Unità di Streaming.

Le Unità di Streaming (SU) sono le risorse di calcolo che vengono assegnate al processo in termini di risorse hardware, più alto è il numero, maggiori saranno le risorse assegnate sia in termini di memoria che in termini di CPU. Se il processo (la query in particolar modo) non ha abbastanza risorse (quindi la metrica della SU è 100%) fallisce.

Un processo in produzione è consigliabile che non superi mai l’80% e il monitoraggio è possibile dal portale Microsoft Azure, mentre dal menu sotto la voce Scale è possibile intervenire sul numero di SU.

Dimensionare correttamente e al primo colpo il numero di SU è estremamente complesso e sono molti i fattori della query che influenzano questo dimensionamento, la prassi comune è allocare inizialmente un numero di SU elevato (intorno a sei per procedura, non troppo complesse che non abbiamo un eccessivo numero di join) e poi ottimizzare utilizzando il monitoraggio. La fase di ottimizzazione è resa necessaria dall’ovvia necessità di contenere i costi del servizio Azure Streamig Analytics, costo che comunque dipende dal numero di SU e dal tempo di esecuzione del servizio. Questa necessità, tuttavia, è anche in  funzione del numero di Streaming Analytics attivi sul progetto e questo numero è fortemente variabile a seconda della funzione che il servizio è chiamato a svolgere all’interno del progetto vista l’incredibile versatilità di utilizzo che questo servizio di Azure presenta.

 

Microsoft Azure è una piattaforma di Cloud Computing accessibile tramite un portale online che consente di accedere e gestire i servizi e le risorse cloud forniti da Microsoft

 

Innovation Manager Nebula