Costruire un PoC IoT completo: gestione allarmi, device heartbeat, real-time e batch analysis e integrazione con Dynamics 365. L'intera soluzione sarà costruita utilizzando la piattaforma Cloud Microsoft (Stream Analytics, Logic Apps, SQL Database, Power BI, Dynamics 365).
Il tutto in 1 ora e come sempre scrivendo meno codice possibile!
3. #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
6. #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
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
14. #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
15. #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
16. #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
17. #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.
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à – 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
20. #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
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
• 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)
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
30. #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
32. #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