SlideShare a Scribd company logo
1 of 34
Download to read offline
#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!

More Related Content

What's hot

Costruisci il tuo device
Costruisci il tuo deviceCostruisci il tuo device
Costruisci il tuo deviceDotNetCampus
 
Power BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralPower BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralMarco Parenzan
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su LinuxMajong DevJfu
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTMarco Parenzan
 
Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Massimo Bonanni
 

What's hot (6)

Costruisci il tuo device
Costruisci il tuo deviceCostruisci il tuo device
Costruisci il tuo device
 
Akka.net & Actor Model
Akka.net & Actor ModelAkka.net & Actor Model
Akka.net & Actor Model
 
Power BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralPower BI data flow and Azure IoT Central
Power BI data flow and Azure IoT Central
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoT
 
Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2
 

Similar to PoC IoT in 1 ora

SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkAlessio Biasiutti
 
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAzure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAlessio Biasiutti
 
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biBig data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biMarco Pozzan
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databasesGianluca Hotz
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsMarco Parenzan
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017Gianluca Hotz
 
Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL ServerGianluca Hotz
 
Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Codemotion
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech LabUgo Landini
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Emanuele Zanchettin
 
ETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryLeonardo Marcucci
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL DatabaseEmanuele Zanchettin
 
Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseMarco Pozzan
 
Metadata Driven Pipeline with Microsoft Fabric
Metadata Driven Pipeline  with Microsoft FabricMetadata Driven Pipeline  with Microsoft Fabric
Metadata Driven Pipeline with Microsoft FabricMarco Pozzan
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload ProfilingGianluca Hotz
 

Similar to PoC IoT in 1 ora (20)

SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with Spark
 
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAzure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
 
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biBig data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
Azure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT SolutionsAzure Synapse Analytics for your IoT Solutions
Azure Synapse Analytics for your IoT Solutions
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017
 
Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL Server
 
Azure sql database
Azure sql databaseAzure sql database
Azure sql database
 
Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015Infinispan codemotion - Codemotion Rome 2015
Infinispan codemotion - Codemotion Rome 2015
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech Lab
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2
 
ETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data Factory
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Thingspeak: integrazione
Thingspeak: integrazioneThingspeak: integrazione
Thingspeak: integrazione
 
Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless Synapse
 
Microsoft Outlook for Domino (IMSMO)
Microsoft Outlook for Domino (IMSMO)Microsoft Outlook for Domino (IMSMO)
Microsoft Outlook for Domino (IMSMO)
 
Metadata Driven Pipeline with Microsoft Fabric
Metadata Driven Pipeline  with Microsoft FabricMetadata Driven Pipeline  with Microsoft Fabric
Metadata Driven Pipeline with Microsoft Fabric
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload Profiling
 

More from Alessio Biasiutti

Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...Alessio Biasiutti
 
Power Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AIPower Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AIAlessio Biasiutti
 
iot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraiot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraAlessio Biasiutti
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceAlessio Biasiutti
 
Azure day 2019 - Custom Vision on Edge device
Azure day 2019 - Custom Vision on Edge deviceAzure day 2019 - Custom Vision on Edge device
Azure day 2019 - Custom Vision on Edge deviceAlessio Biasiutti
 
XE - Azure in the real world
XE - Azure in the real worldXE - Azure in the real world
XE - Azure in the real worldAlessio Biasiutti
 
Visual Studio for IoT Solutions
Visual Studio for IoT SolutionsVisual Studio for IoT Solutions
Visual Studio for IoT SolutionsAlessio Biasiutti
 

More from Alessio Biasiutti (7)

Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
Tutto quello che non vi hanno mai detto su Azure Integration Services (Logic ...
 
Power Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AIPower Platform: AI Builder la democratizzazione di AI
Power Platform: AI Builder la democratizzazione di AI
 
iot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 oraiot Saturday 2019 - PoC iot in 1 ora
iot Saturday 2019 - PoC iot in 1 ora
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge device
 
Azure day 2019 - Custom Vision on Edge device
Azure day 2019 - Custom Vision on Edge deviceAzure day 2019 - Custom Vision on Edge device
Azure day 2019 - Custom Vision on Edge device
 
XE - Azure in the real world
XE - Azure in the real worldXE - Azure in the real world
XE - Azure in the real world
 
Visual Studio for IoT Solutions
Visual Studio for IoT SolutionsVisual Studio for IoT Solutions
Visual Studio for IoT Solutions
 

PoC IoT in 1 ora

  • 1. #iotsatpn saturday 2019 Internet of Things Un PoC IoT in 1 ora
  • 2. #disatpn#iotsatpn Alessio Biasiutti Azure Solution Architect alessiobiasiutti abiasiutti@altitudo.com @biasiuttiale
  • 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
  • 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»
  • 12. #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)
  • 13. #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
  • 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
  • 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 • 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
  • 27. #iotsatpn Concetti Base ▪ Triggers ▪ Polling ▪ Push ▪ Recurrence ▪ Actions Built-ins Control Manipulation Managed
  • 28. #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
  • 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