#iotsatpn
saturday 2019
Internet of Things
Un PoC IoT in 1 ora
#disatpn#iotsatpn
Alessio Biasiutti
Azure Solution Architect
alessiobiasiutti
abiasiutti@altitudo.com
@biasiuttiale
#iotsatpn
Cosa serve per una soluzione IoT?
Cold Path Analytics
Find insights over historical data
Hot Path Analytics
Real-time monitoringIoT Hub
Event HubField
Gateway
Things Insights Actions
Manage
View and manage
solutions
Business Integration
Connect to business
process
Storage
#iotsatpn
PoC
#disatpn#iotsatpn
Ingestion
#iotsatpn
Event Hub
▪ Dimensione messaggio 256K-1M
(dedicated)
▪ Protocolli
▪ HTTPS: overhead ogni invio dati (TLS)
migliore per invio dati non frequente.
▪ AMQP: inizializzazione sessione pesante ma
performance migliori per invio dati frequenti
▪ Capture file su Storage Account o su Data
Lake Store
▪ Streaming Unit
▪ Ingress Fino a 1MB/sec o 1000 eventi/sec
▪ Egress Fino a 2MB/sec o 4096 eventi/sec
▪ Retention: 1-7 giorni
#iotsatpn
Event Hub
• Partitions:
• Permettano di scalare orizzontalmente.
• Un event receiver per ogni partizione
• Numero fisso alla creazione tra 2 e 32
• Impostazione solo in fase di creazione
• Partition key:
• Assegnato dal publisher viene utilizzato per inviare i dati
sempre alla stessa partizione
• Nessun valore Round Robin
• Consumer Group:
• Uno per applicazione receiver
• Checkpoint
• Responsabilità del receiver eseguire commit dell’ultima
posizione letta
#iotsatpn
Event Hub - Novità
#iotsatpn
IoT Hub
Bi-directional communication
• Millions of devices
AMQP/MQTT
• Receive commands
• Device twins
Enterprise scale and integration End-to-end security
• Per device enable/disable
#disatpn#iotsatpn
Come scegliere?
• EventHub
• Numero device conosciuto e/o
scenario industriale
• HTTPS/AMQP
• Comunicazione monodirezionale
• Sostituzione di Kafka
• Pricing per milioni di
messaggi/bandwith
• IoT Hub
• Numero di Device Elevato
• Identificazione certa device
• Scenario Edge
• Firmware Upgrade
• Necessità di inviare comandi
• HTTPS/AMQP/MQTT
• Device/module twin
• Pricing per «messaggio»
#disatpn#iotsatpn
Insights
#iotsatpn
Stream Analytics
▪ Event-processing engine
▪ PaaS – Serverless / Edge
▪ SQL Like programming
language
▪ JavaScript per UDF/UDA
▪ Availability 99,9%
▪ Scale-Up/Down (Min 1 -
Max 192 SU)
#disatpn#iotsatpn
Inputs
EventHub
EventProcessedUtcTime, EventEnqueuedUtcTime, PartitionId
IoT Hub
IoTHub.MessageId, IoTHub.CorrelationId…..
BlobStorage
Blob vengono presi in considerazione ogni secondo e solo una volta
Pattern cluster1/logs/{date}/{time}/{partition}
• Format: CSV / JSON / Avro
• Compression: Gzip, Deflate
• Encoding: UTF-8
• Max 60 inputs
#disatpn#iotsatpn
Reference Data
• Servono per correlare i dati in input con anagrafiche / tabelle e sono blob
caricati in memoria una sola volta
• Pattern devices/{date}/{time}/device-list.csv
• Il file viene preso in considerazione non prima di date / time specificati
• Ci sono modifiche -> nuovo blob
• CSV / JSON (UTF-8)
• Max 300MB per 6 SU
• Attenzione:
• Deve esiste un file di reference valido / non vuoto quando lo stream parte
• Vengono considerate come date / time quelle specificate nel nome del blob
• Un nuovo blob deve avere un date time maggior del precedente
• Quando create un file usate un tempo futuro
#iotsatpn
Reference data SQL Database (preview)
• Al posto di blob possono essere usate tabelle (vivamente consigliate le temporali)
• Query Snapshot
• Query delta (opzionale)
• I dati (inserted e deleted) vengono uniti allo snapshot precedente
• Aggiornamento:
• Once
• Periodico
• Periodico con delta
• È necessario associare uno storage account al Job
• Gli snapshots di fatto sono dei reference data di tipo blob creati da StreamAnalytics
• Non servono unit aggiuntive
• Vanno bene qualunque versione di SQL Database
#disatpn#iotsatpn
Job
• Si possono definire più query nello
stesso job (attenzione alla scalabilità)
• Ogni query può combinare più input e
inviare dati ad un output
• È possibile dividere query complesse in
step (WITH)
• Massimo 100kb di query
• JOIN, LEFT JOIN, UNION, GROUP BY
SELECT
Make,
System.TimeStamp AS Time,
COUNT(*) AS [Count]
INTO
AlertOutput
FROM
Input TIMESTAMP BY Time
GROUP BY
Make,
TumblingWindow(second, 10)
HAVING
[Count] >= 3
#disatpn#iotsatpn
Output
Data Lake Store
SQL Database (NO SQL Server su VM)
Blob Storage
Table Storage
Cosmos DB
ServiceBus Queue / Topic
Event Hub
Functions
Power BI Max 60 outputs
IngestionActionPres.
#iotsatpn
Novità - Repartitioning
• Permette di partizionare flussi che
non sono partizionati naturalmente
secondo schemi ottimali
(PartitionId)
• Funziona moltobene quando si
partiziona per una chiave
• Molto indicato per output su SQL
Database (8 writers sono l’ideale)
SELECT * INTO [output] FROM [input] PARTITION BY DeviceID INTO 10
#iotsatpn
Novità – Custom Deserializer (Private preview)
• Standard Serilizer
• Format: CSV / JSON / Avro
• Compression: Gzip, Deflate
• Encoding: UTF-8
• Se non bastasse? Formati binari? Codifiche diverse?
• In Visual Studio saranno disponibili (solo per chi ha la preview abilitata)
• un nuovo template progetto
• un SDK installabile tramite nuget
• La DLL generata dovrà essere caricata nello storage account (e impacchetta secondo
uno schema di directory predefinito)
• L’input dovrà dichiarare il nome libreria e il nome classe
• Run locally di Visual Studio funziona già da subito
#iotsatpn
Novità - Formato Parquet (Private preview)
• Output Blob Storage anche in formato
Parquet
• Formato colonnare
• Ottimo per analisi big data con Hive e
Spark
• Batch 2000-10.000 righe
• Timeout (1 minuto – 2 ore)
• Limiti durante questa preview
• No compression
• Alcuni tipi non supportati (array of array…)
• Solo Cloud No Edge
#iotsatpn
Alarm Detection - Window threshold
T On
T Off
#iotsatpn
Alarm detection - Lag
• Recuperare valori / eventi passati
• offset: quale evento nel passato recuperare
• partition by: chiave di aggregazzione dei dati
• limit duration: finestra temporale massima da considerare
• when: condizioni di filtro
LAG(<scalar_expression >, [<offset >], [<default>])
OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>)
[WHEN boolean_expression])
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1)
WHEN devicetype = 'thermostat')
#iotsatpn
Device Heartbeat
• Il mio device sta mandando dati?
• Problemi
• Finestre temporali ampie
• Frequenze diverse tra i vari dispositivi
• Stream Analytics supporta left join solo verso reference data (a noi servirebbe il contrario)
• Soluzione
• Salvare «abbastanza» frequentemente (finestre temporali piccole) chi sta inviando dati
• Salvare i dati all’interno di SQL Database (Output solo in Insert!)
• Query che confronta chi non sta mandando dati
• Schedulazione query con Logic Apps
• Alternative a SQL Database
• Table Storage o Cosmos DB UPSERT Nativo
• Tabelle in memory di SQL Database (solo dal tier Premium)
#disatpn#iotsatpn
Action
#iotsatpn
Service Bus (Topic)
• Preferibile usare Topic e non queue
• Il Bus può ricevere dati da Stream
Analytics ma anche da l’altre
(future) applicazioni
• La gestione dell’evento può essere
fatta anche da altri applicazioni
aziendali: CRM, ERP, …
• Supporta AMQP
• Messaggi sono filtrabili
#iotsatpn
Azure Logic Apps
• Visual design delle
integrazioni
• Orchestrazione di workflow
di integrazioni anche
complessi
• Monitorare l’avanzamento
dei processi
• Reagire ad eventi
• Reagire a messaggi
• Gestire le ricorrenze
#iotsatpn
Concetti Base
▪ Triggers
▪ Polling
▪ Push
▪ Recurrence
▪ Actions
Built-ins
Control
Manipulation
Managed
#iotsatpn
Integrazione
• Più di 200 connettori
• Logic Apps
• Azure Services
• Dynamics 365
• SQL Server
• SQL Database
• Office 365
• SharePoint On Premises / Cloud
• Google
• Notification Services (mail, sms…)
• Cognitive Services
• Social Services
#disatpn#iotsatpn
Reporting
#iotsatpn
Power BI
• Power BI Pro per visualizzare dati all’interno dell’azienda
• Pricing per utente
• Power BI Embedded per fornire dati all’esterno (no società del gruppo)
• Pricing per potenza di calcolo nodo
• Streaming Dataset
• Dataset creato alla prima ricezione di un dato
• 1,000,000 rows per ora
• 15KB per pacchetto
• 1 una chiamata all’API per secondo
#iotsatpn
Desktop / Mobile
#iotsatpn
Considerazioni finali
• Un po’di codice SQL
• qualche stored procedure, trigger, ASA Stream Job
• Una manciata di C#
• Gateway
• Costi della soluzione
Componente Costo mensile
Azure Stream Analytics 73,87
Azure SQL Database 4,13
Azure Service Bus Standard 8,27
Azure Logic Apps (stima) 1,00
Power BI Pro (per utente) 8,40
95,67
#disatpn#iotsatpn
Question Time
#disatpn#iotsatpn
Grazie!

PoC IoT in 1 ora

  • 1.
    #iotsatpn saturday 2019 Internet ofThings Un PoC IoT in 1 ora
  • 2.
    #disatpn#iotsatpn Alessio Biasiutti Azure SolutionArchitect alessiobiasiutti abiasiutti@altitudo.com @biasiuttiale
  • 3.
    #iotsatpn Cosa serve peruna soluzione IoT? Cold Path Analytics Find insights over historical data Hot Path Analytics Real-time monitoringIoT Hub Event HubField Gateway Things Insights Actions Manage View and manage solutions Business Integration Connect to business process Storage
  • 4.
  • 5.
  • 6.
    #iotsatpn Event Hub ▪ Dimensionemessaggio 256K-1M (dedicated) ▪ Protocolli ▪ HTTPS: overhead ogni invio dati (TLS) migliore per invio dati non frequente. ▪ AMQP: inizializzazione sessione pesante ma performance migliori per invio dati frequenti ▪ Capture file su Storage Account o su Data Lake Store ▪ Streaming Unit ▪ Ingress Fino a 1MB/sec o 1000 eventi/sec ▪ Egress Fino a 2MB/sec o 4096 eventi/sec ▪ Retention: 1-7 giorni
  • 7.
    #iotsatpn Event Hub • Partitions: •Permettano di scalare orizzontalmente. • Un event receiver per ogni partizione • Numero fisso alla creazione tra 2 e 32 • Impostazione solo in fase di creazione • Partition key: • Assegnato dal publisher viene utilizzato per inviare i dati sempre alla stessa partizione • Nessun valore Round Robin • Consumer Group: • Uno per applicazione receiver • Checkpoint • Responsabilità del receiver eseguire commit dell’ultima posizione letta
  • 8.
  • 9.
    #iotsatpn IoT Hub Bi-directional communication •Millions of devices AMQP/MQTT • Receive commands • Device twins Enterprise scale and integration End-to-end security • Per device enable/disable
  • 10.
    #disatpn#iotsatpn Come scegliere? • EventHub •Numero device conosciuto e/o scenario industriale • HTTPS/AMQP • Comunicazione monodirezionale • Sostituzione di Kafka • Pricing per milioni di messaggi/bandwith • IoT Hub • Numero di Device Elevato • Identificazione certa device • Scenario Edge • Firmware Upgrade • Necessità di inviare comandi • HTTPS/AMQP/MQTT • Device/module twin • Pricing per «messaggio»
  • 11.
  • 12.
    #iotsatpn Stream Analytics ▪ Event-processingengine ▪ PaaS – Serverless / Edge ▪ SQL Like programming language ▪ JavaScript per UDF/UDA ▪ Availability 99,9% ▪ Scale-Up/Down (Min 1 - Max 192 SU)
  • 13.
    #disatpn#iotsatpn Inputs EventHub EventProcessedUtcTime, EventEnqueuedUtcTime, PartitionId IoTHub IoTHub.MessageId, IoTHub.CorrelationId….. BlobStorage Blob vengono presi in considerazione ogni secondo e solo una volta Pattern cluster1/logs/{date}/{time}/{partition} • Format: CSV / JSON / Avro • Compression: Gzip, Deflate • Encoding: UTF-8 • Max 60 inputs
  • 14.
    #disatpn#iotsatpn Reference Data • Servonoper correlare i dati in input con anagrafiche / tabelle e sono blob caricati in memoria una sola volta • Pattern devices/{date}/{time}/device-list.csv • Il file viene preso in considerazione non prima di date / time specificati • Ci sono modifiche -> nuovo blob • CSV / JSON (UTF-8) • Max 300MB per 6 SU • Attenzione: • Deve esiste un file di reference valido / non vuoto quando lo stream parte • Vengono considerate come date / time quelle specificate nel nome del blob • Un nuovo blob deve avere un date time maggior del precedente • Quando create un file usate un tempo futuro
  • 15.
    #iotsatpn Reference data SQLDatabase (preview) • Al posto di blob possono essere usate tabelle (vivamente consigliate le temporali) • Query Snapshot • Query delta (opzionale) • I dati (inserted e deleted) vengono uniti allo snapshot precedente • Aggiornamento: • Once • Periodico • Periodico con delta • È necessario associare uno storage account al Job • Gli snapshots di fatto sono dei reference data di tipo blob creati da StreamAnalytics • Non servono unit aggiuntive • Vanno bene qualunque versione di SQL Database
  • 16.
    #disatpn#iotsatpn Job • Si possonodefinire più query nello stesso job (attenzione alla scalabilità) • Ogni query può combinare più input e inviare dati ad un output • È possibile dividere query complesse in step (WITH) • Massimo 100kb di query • JOIN, LEFT JOIN, UNION, GROUP BY SELECT Make, System.TimeStamp AS Time, COUNT(*) AS [Count] INTO AlertOutput FROM Input TIMESTAMP BY Time GROUP BY Make, TumblingWindow(second, 10) HAVING [Count] >= 3
  • 17.
    #disatpn#iotsatpn Output Data Lake Store SQLDatabase (NO SQL Server su VM) Blob Storage Table Storage Cosmos DB ServiceBus Queue / Topic Event Hub Functions Power BI Max 60 outputs IngestionActionPres.
  • 18.
    #iotsatpn Novità - Repartitioning •Permette di partizionare flussi che non sono partizionati naturalmente secondo schemi ottimali (PartitionId) • Funziona moltobene quando si partiziona per una chiave • Molto indicato per output su SQL Database (8 writers sono l’ideale) SELECT * INTO [output] FROM [input] PARTITION BY DeviceID INTO 10
  • 19.
    #iotsatpn Novità – CustomDeserializer (Private preview) • Standard Serilizer • Format: CSV / JSON / Avro • Compression: Gzip, Deflate • Encoding: UTF-8 • Se non bastasse? Formati binari? Codifiche diverse? • In Visual Studio saranno disponibili (solo per chi ha la preview abilitata) • un nuovo template progetto • un SDK installabile tramite nuget • La DLL generata dovrà essere caricata nello storage account (e impacchetta secondo uno schema di directory predefinito) • L’input dovrà dichiarare il nome libreria e il nome classe • Run locally di Visual Studio funziona già da subito
  • 20.
    #iotsatpn Novità - FormatoParquet (Private preview) • Output Blob Storage anche in formato Parquet • Formato colonnare • Ottimo per analisi big data con Hive e Spark • Batch 2000-10.000 righe • Timeout (1 minuto – 2 ore) • Limiti durante questa preview • No compression • Alcuni tipi non supportati (array of array…) • Solo Cloud No Edge
  • 21.
    #iotsatpn Alarm Detection -Window threshold T On T Off
  • 22.
    #iotsatpn Alarm detection -Lag • Recuperare valori / eventi passati • offset: quale evento nel passato recuperare • partition by: chiave di aggregazzione dei dati • limit duration: finestra temporale massima da considerare • when: condizioni di filtro LAG(<scalar_expression >, [<offset >], [<default>]) OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression]) LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat')
  • 23.
    #iotsatpn Device Heartbeat • Ilmio device sta mandando dati? • Problemi • Finestre temporali ampie • Frequenze diverse tra i vari dispositivi • Stream Analytics supporta left join solo verso reference data (a noi servirebbe il contrario) • Soluzione • Salvare «abbastanza» frequentemente (finestre temporali piccole) chi sta inviando dati • Salvare i dati all’interno di SQL Database (Output solo in Insert!) • Query che confronta chi non sta mandando dati • Schedulazione query con Logic Apps • Alternative a SQL Database • Table Storage o Cosmos DB UPSERT Nativo • Tabelle in memory di SQL Database (solo dal tier Premium)
  • 24.
  • 25.
    #iotsatpn Service Bus (Topic) •Preferibile usare Topic e non queue • Il Bus può ricevere dati da Stream Analytics ma anche da l’altre (future) applicazioni • La gestione dell’evento può essere fatta anche da altri applicazioni aziendali: CRM, ERP, … • Supporta AMQP • Messaggi sono filtrabili
  • 26.
    #iotsatpn Azure Logic Apps •Visual design delle integrazioni • Orchestrazione di workflow di integrazioni anche complessi • Monitorare l’avanzamento dei processi • Reagire ad eventi • Reagire a messaggi • Gestire le ricorrenze
  • 27.
    #iotsatpn Concetti Base ▪ Triggers ▪Polling ▪ Push ▪ Recurrence ▪ Actions Built-ins Control Manipulation Managed
  • 28.
    #iotsatpn Integrazione • Più di200 connettori • Logic Apps • Azure Services • Dynamics 365 • SQL Server • SQL Database • Office 365 • SharePoint On Premises / Cloud • Google • Notification Services (mail, sms…) • Cognitive Services • Social Services
  • 29.
  • 30.
    #iotsatpn Power BI • PowerBI Pro per visualizzare dati all’interno dell’azienda • Pricing per utente • Power BI Embedded per fornire dati all’esterno (no società del gruppo) • Pricing per potenza di calcolo nodo • Streaming Dataset • Dataset creato alla prima ricezione di un dato • 1,000,000 rows per ora • 15KB per pacchetto • 1 una chiamata all’API per secondo
  • 31.
  • 32.
    #iotsatpn Considerazioni finali • Unpo’di codice SQL • qualche stored procedure, trigger, ASA Stream Job • Una manciata di C# • Gateway • Costi della soluzione Componente Costo mensile Azure Stream Analytics 73,87 Azure SQL Database 4,13 Azure Service Bus Standard 8,27 Azure Logic Apps (stima) 1,00 Power BI Pro (per utente) 8,40 95,67
  • 33.
  • 34.