SlideShare a Scribd company logo
A Serverless IoT Story
From Design to Production and Monitoring
Alex Pshul
Software Architect &
Consultant
@AlexPshul
alexp@codevalue.net
http://pshul.com
http://codevalue.net
Moaid Hathot
Senior Consultant
@MoaidHathot
moaidh@codevalue.net
http://www.moaid.codes
www.codevalue.net
Vision
 Manage a parking lot
 Know which parking spot is occupied
3
4
Free Spots
32
Traditional Architecture
5
Devices communicators
WebApp
Service A
Load balancer
Service B Service C
Backend Services
Storage
How About Serverless?
6
WebApp
About Us
7
Alex Pshul
 Architect, Consultant and lecturer
 More than 8 years of hands on experience
 Talk to me about:
 Software Development
 Hardware and Gadgets
 Gaming
 Animals
Moaid Hathot
 Software engineer, consultant and code Jedi
 Software Craftsmanship advocate
 Clean Coder
 OzCode Evangelist
Serverless
Save time and money
10
Time & Money
 Pay per use
 Don’t worry about server management
 Quicker time to release
 Faster to deploy new functionality
 Don’t have to manage scaling and load balancing
 Focus on business logic instead of servers and boilerplate.
 Inherent Auto-Scalability
11
When to Serverless
 Logic can be disassembled into small modules
 Irregular Workloads
 Hard to predict load peaks
 Run closer to the user
12
When not to Serverless
 Performance is important
 A consistently high and predictable workload
 Long running tasks that can’t be split into sub-tasks or multiple cycles
 Complex computing with high memory/CPU requirements.
13
Migrating to Serverless
14
WebApp
Compute - FaaS
 FaaS – Function as a Service
 First mentioned by D. J. Wheeler in 1952- ‘The use of sub-routines in programmes’.
 Event-Driven serverless compute
 Examples:
 Azure Functions
 AWS Lambda
 Google Cloud Functions
15
FaaS – Azure Functions
 Trigger Oriented
 Input & Output Binding
 Dependency Injection
 Tackle Cold-Start performance hits by leaving host loaded
 Premium Plan
 AppService Plan
 Supports several frameworks and languages
 C#, JavaScript, Java, Python, F#, PowerShell & TypeScript
18
FaaS - Azure Functions
19
[FunctionName("EchoFunc")]
public static Task<IActionResult> EchoFunc(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")]
HttpRequest request,
ILogger log)
{
string message = request.Query["message"];
//Do Something
var result = new OkObjectResult($"Message received: {message}");
return Task.FromResult((IActionResult) result);
}
FaaS – Azure Functions - Deployment
 Different ways to deploy your functions
 Visual Studio
 Using FTP
 Uploading a zip
 Continues deployment
 GitHub
 Dropbox
 Azure DevOps
 More…
21
Migrating to Serverless
23
WebApp
Events
 Process a high number of events per second
 Decouple communication between components
 Store and transform events
 Integrate with other services
24
Events – Azure EventHub
 Can receive and process millions of events per second
 Support Apache Kafka clients
 Integrate with other azure services
 Provide SDKs for several frameworks
 .Net, Node.js, Java, Python, Go, C, Apache Storm
 Enable capturing and storing events
 Partitioning
26
Events – Azure EventHub
27
Migrating to Serverless
30
WebApp
Communication
 Real-time
 Bi-directional
 Scale
 Secure
31
Communication – SignalR Service
 Fully managed
 Cross Platform
 Easily integrated with other Azure resources
 Such as Azure Functions
 Provides abstractions
 WebSockets, Long Polling or Server-sent events (SSE)
 Send message to all or to a subset of users
32
Integration
33
[FunctionName("UpdateUsers")]
public static Task OnDeviceUpdated(
[EventHubTrigger("device-updates", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage,
[SignalR(HubName = "updates")]IAsyncCollector<SignalRMessage> signalRMessages,
ILogger log)
{
string message = Encoding.UTF8.GetString(myEventHubMessage.Body);
//Do something
return signalRMessages.AddAsync(new SignalRMessage
{
Target = "updateReceived",
Arguments = new[] { message }
});
}
Migrating to Serverless
36
WebApp
IoT
Avoid reinventing the wheel
37
Do Not Reinvent the Wheel
38
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
IoT Hub
 One of Microsoft`s PaaS solutions for building IoT solutions
 Provides the infrastructure for working with devices
 Most of the work is defining the devices and coding
 SDKs for various languages (.NET, Java, Node.js, Python, C, iOS)
 Exposes various endpoints
 Integration with other Azure services
39
IoT Hub - Tiers
 Each tier has 3 paid editions
 Each tier provides higher throughput
 Makes the service more expensive
 Basic tier
 Limited features
 Cheaper (compared with same standard tier edition)
 Standard tier
 All features are available
 More expensive (compared with same basic tier edition)
 Contains a free edition
 Standard Free edition
 1 free IoT Hub allowed per subscription
 Encourages PoC projects
 Same features as the Standard tier (Not same throughput)
40
Do Not Reinvent the Wheel
41
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
Device to Cloud Messages
 Send device telemetry to the cloud
 Using an SDK
 Send a message directly using a protocol
 MQTT (+ over WebSocket)
 AMQP (+ over WebSocket)
 HTTPS
 Uses a connection string to identify the device in the IoT Hub
 Stored by IoT Hub, up to 7 days
 Up to 256-KB messages
 Frequency depends on the selected IoT Hub edition
42
Device to Cloud Messages
43
static async Task Main(string[] args)
{
// Initialize the device client object
DeviceClient deviceClient =
DeviceClient.CreateFromConnectionString("Device_Connection_String");
// Create the message
var data = new { Temperature = 30, Humidity = 37 };
var messageString = JsonConvert.SerializeObject(data);
Message message = new Message(Encoding.ASCII.GetBytes(messageString));
// Send the message
await deviceClient.SendEventAsync(message);
}
Do Not Reinvent the Wheel
44
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Cloud to Device Messages – Regular Messages
 Not awaited
 Stored in the device queue
 If queue is full (>50) - results in an error
 Can Reject or Abandon messages (unless MQTT)
 Can set feedback for each message
45
Cloud to Device Messages
46
static async Task Main(string[] args)
{
// Initialize the device client object
DeviceClient deviceClient =
DeviceClient.CreateFromConnectionString("Device_Connection_String");
// Read message
Message receivedMessage = await deviceClient.ReceiveAsync();
string messageString = Encoding.ASCII.GetString(receivedMessage.GetBytes());
Console.WriteLine($"Received message: {messageString}");
// Acknowledge completion
await deviceClient.CompleteAsync(receivedMessage);}
}
Device
Cloud to Device Messages
47
static async Task Main(string[] args)
{
// Initialize the service client object
ServiceClient serviceClient =
ServiceClient.CreateFromConnectionString("Service_Connection_String");
// Create the message
byte[] messageBytes = Encoding.ASCII.GetBytes("Cloud to device message.");
Message message = new Message(messageBytes);
// Send to a specific device
await serviceClient.SendAsync("myDeviceId", message);
}
Backend
Cloud to Device Messages – Direct Methods
 Initiate an action on the device
 Receive immediate response
 Response contains
 Status Code
 Payload
48
Cloud to Device Messages
49
static async Task Main(string[] args)
{
// Initialize the device client object
DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("Device_Connection_String");
// Register Method
await deviceClient.SetMethodHandlerAsync("GetData", GetData, null);
}
private static Task<MethodResponse> GetData(MethodRequest request, object userContext)
{
string someData = "My Cool Response!";
byte[] dataBytes = Encoding.ASCII.GetBytes(someData);
MethodResponse response = new MethodResponse(dataBytes, 200);
return Task.FromResult(response);
}
Device
Cloud to Device Messages
50
static async Task Main(string[] args)
{
// Initialize the service client object
ServiceClient serviceClient =
ServiceClient.CreateFromConnectionString("Service_Connection_String");
// Create method object
var methodInvocation = new CloudToDeviceMethod("GetData");
methodInvocation.SetPayloadJson("10");
// Invoke the direct method asynchronously and get the response from the simulated device.
CloudToDeviceMethodResult response =
await serviceClient.InvokeDeviceMethodAsync("MyDotnetDevice", methodInvocation);
Console.WriteLine($"Status: {response.Status}. Payload: {response.GetPayloadAsJson()}");
}
Backend
Do Not Reinvent the Wheel
51
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
C2D
Messages
Devices Management – Twin Properties
 Devices can have states
 No feedback, unless subscribing to IoT Hub messages
 Desired Properties
 C2D
 Shouldn’t represent device state
 Reported Properties
 D2C
 Should reflect the current device state
52
Devices Management – Query Devices
 Devices can be queried
 Example: Get only the devices that were installed today
 Supports queries by twin properties as well
 Built in functions that allow more complex scenarios
 Simple example
 SELECT * FROM devices
 Returns all devices and their data
53
Devices Management – Device Provisioning Service
 Zero-Touch Provisioning
 Single IoT Hub
 Multitenancy
 Solution Isolation
 Geo-Sharding
 Much more scenarios…
54
Devices Management – Device Provisioning Service
55
Enrollment List
Device Provisioning ServiceDevice IoT Hub
Do Not Reinvent the Wheel
56
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Devices
Management
Security
 Uses permissions to grant access to each IoT Hub endpoint
 RegistryRead
 RegistryReadWrite
 ServiceConnect
 DeviceConnect
 X.509 certificates
 Existing device certificate
 CA-signed certificate
 Self-generated and self-signed certificate
57
Security – Custom device authentication
 Use the identity registry to configure credentials
58
Do Not Reinvent the Wheel
59
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Security
Message Routing
 Messages have a common format across protocols
 Routes send messages to different endpoints based on a query
 IoT Hub handles routing duplication
 Supports various endpoint types
 Built-in endpoint
 Azure Blob Storage
 Service Bus Queues and Service Bus Topics
 Event Hubs
60
Message Routing – Built-in endpoint & Event Hubs
 The Build-in endpoint is just like any other Event Hub endpoint
 Monitor build-in endpoint messages using Azure IoT Hub Toolkit extension
for VS/VS Code
 Stops receiving messages when another route is created
 Unless a route to the default endpoint is created explicitly
 Can add other Event Hubs for different routes
61
Message Routing – Azure Blob Storage
 Writes batches of data to the blob storage
 When size is reached
 When a certain time windows has passed
 Supports AVRO format only
 JSON format available as a preview
(Not supported in East US, West US and West Europe)
 A file is created for each batch of data
62
Message Routing – Service Bus Queues and Topics
 Session and Duplicate Detection must be disabled
 Endpoint will appear as unreachable if above is not met
63
Do Not Reinvent the Wheel
64
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Message
Routing
Demo
IoT Hub
Device Deployment
65
*Show a picture of IoT Hub*
Monitoring
Full Solution
70
The Problem
 It is hard to debug remote resources
 Applications are built of small little modules
 Resources can be created and disposed of according to scale
 A monitoring approach is easier to achieve
 And is needed in any case
71
Monitor – Azure Functions
 Logging is your friend
 An ILogger object can be injected to your function
 Use Application Insights to view logs
72
Integration
73
[FunctionName("UpdateUsers")]
public static Task OnDeviceUpdated(
[EventHubTrigger("device-updates", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage,
[SignalR(HubName = "updates")]IAsyncCollector<SignalRMessage> signalRMessages,
ILogger log)
{
log.LogDebug($"Body received with {myEventHubMessage.Body.Count} bytes");
string message = Encoding.UTF8.GetString(myEventHubMessage.Body);
log.LogInformation($"Message Extracted: {message}");
//Do something
return signalRMessages.AddAsync(new SignalRMessage
{
Target = "updateReceived",
Arguments = new[] { message }
});
}
Demo
End-to-end
scenario
77
Summary
78
Traditional Architecture
79
Devices communicators
WebApp
Service A
Load balancer
Service B Service C
Backend Services
Storage
Serverless Architecture
80
WebApp
Summary
 Serverless is not always the option
 But very useful
 Saves money and time
 IoT solutions are available as PaaS
 Don’t reinvent the wheel
 Debugging is not easy, but it is possible
 Monitoring is your friend
81
Ales Pshul
Software Architect & Consultant
@AlexPshul
alexp@codevalue.net
http://pshul.com
http://codevalue.net
Moaid Hathot
Senior Consultant
@MoaidHathot
moaidh@codevalue.net
http://www.moaid.codes
www.codevalue.net

More Related Content

PPTX
When IoT meets Serverless - from design to production and monitoring
PPTX
Intellias CQRS Framework
PPTX
DEVNET-1140 InterCloud Mapreduce and Spark Workload Migration and Sharing: Fi...
PPTX
Reply Webinar Online - Mastering AWS - IoT Foundations
PDF
OpenStack- A ringside view of Services and Architecture
PPTX
Getting started with Azure Event Grid - Webinar with Steef-Jan Wiggers
PDF
Openstack_administration
PDF
IoT & Azure (EventHub)
When IoT meets Serverless - from design to production and monitoring
Intellias CQRS Framework
DEVNET-1140 InterCloud Mapreduce and Spark Workload Migration and Sharing: Fi...
Reply Webinar Online - Mastering AWS - IoT Foundations
OpenStack- A ringside view of Services and Architecture
Getting started with Azure Event Grid - Webinar with Steef-Jan Wiggers
Openstack_administration
IoT & Azure (EventHub)

What's hot (12)

PDF
Flowchain: A case study on building a Blockchain for the IoT
PPTX
OpenStack Administration by Mobarak Hossain Group Organizer Bangladesh
PDF
OpenStack - Infrastructure as a service
PPTX
Openstack Architecture
PPTX
How ddd, cqrs and event sourcing constitute the architecture of the future
PDF
Device Twins, Digital Twins and Device Shadow
PDF
PRIVATE CLOUD SERVER IMPLEMENTATIONS FOR DATA STORAGE
PDF
Introduction to OpenStack (Juno)
PDF
Custom Distributed Tracing in Azure Functions (2021-02-27)
PDF
IoT & Azure
PDF
Iot Toolkit and the Smart Object API - Architecture for Interoperability
PPTX
Reply Bootcamp Rome - Mastering AWS - IoT Bootcamp
Flowchain: A case study on building a Blockchain for the IoT
OpenStack Administration by Mobarak Hossain Group Organizer Bangladesh
OpenStack - Infrastructure as a service
Openstack Architecture
How ddd, cqrs and event sourcing constitute the architecture of the future
Device Twins, Digital Twins and Device Shadow
PRIVATE CLOUD SERVER IMPLEMENTATIONS FOR DATA STORAGE
Introduction to OpenStack (Juno)
Custom Distributed Tracing in Azure Functions (2021-02-27)
IoT & Azure
Iot Toolkit and the Smart Object API - Architecture for Interoperability
Reply Bootcamp Rome - Mastering AWS - IoT Bootcamp
Ad

Similar to A serverless IoT story from design to production and monitoring (20)

PPTX
.NET Fest 2019. Alex Pshul. When IoT Meets Serverless
PPTX
Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)
PPTX
Azure Internet of Things
PPTX
Architecting IoT solutions with Microsoft Azure
PPTX
Generating cross platform .NET based azure IoTdevice
PDF
Creating a Java Internet of Things Gateway
PPTX
Integration of Things (Sam Vanhoutte @Iglooconf 2017)
PPTX
Azure IoT suite - A look behind the curtain (Sam Vanhoutte @AZUG Event)
PPTX
2008 - TechDays PT: Building Software + Services with Volta
PDF
AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015
PPTX
Azure IoT Hub
PPTX
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
PDF
Can we build an Azure IoT controlled device in less than 40 minutes that cost...
PPTX
IoT on azure
PPTX
App Modernization with Microsoft Azure
PDF
Azure Digital Twins.pdf
PDF
Workshop AWS IoT @ IoT World Paris
PDF
PDF
OSCON 2013 - Planning an OpenStack Cloud - Tom Fifield
PPTX
Azure Service Fabric: The road ahead for microservices
.NET Fest 2019. Alex Pshul. When IoT Meets Serverless
Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)
Azure Internet of Things
Architecting IoT solutions with Microsoft Azure
Generating cross platform .NET based azure IoTdevice
Creating a Java Internet of Things Gateway
Integration of Things (Sam Vanhoutte @Iglooconf 2017)
Azure IoT suite - A look behind the curtain (Sam Vanhoutte @AZUG Event)
2008 - TechDays PT: Building Software + Services with Volta
AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015
Azure IoT Hub
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
Can we build an Azure IoT controlled device in less than 40 minutes that cost...
IoT on azure
App Modernization with Microsoft Azure
Azure Digital Twins.pdf
Workshop AWS IoT @ IoT World Paris
OSCON 2013 - Planning an OpenStack Cloud - Tom Fifield
Azure Service Fabric: The road ahead for microservices
Ad

More from CodeValue (20)

PPTX
Digital transformation buzzword or reality - Alon Fliess
PPTX
The IDF's journey to the cloud - Merav
PPTX
When your release plan is concluded at the HR office - Hanan Zakai
PPTX
We come in peace hybrid development with web assembly - Maayan Hanin
PPTX
The IoT Transformation and What it Means to You - Nir Dobovizky
PPTX
State in stateless serverless functions - Alex Pshul
PPTX
Will the Real Public API Please Stand Up? Amir Zuker
PPTX
How I built a ml human hybrid workflow using computer vision - Amir Shitrit
PDF
Application evolution strategy - Eran Stiller
PPTX
Designing products in the digital transformation era - Eyal Livne
PPTX
Eerez Pedro: Product thinking 101 - Architecture Next
PDF
Alon Fliess: APM – What Is It, and Why Do I Need It? - Architecture Next 20
PDF
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
PDF
Magnus Mårtensson: The Cloud challenge is more than just technical – people a...
PDF
Nir Doboviski: In Space No One Can Hear Microservices Scream – a Microservice...
PDF
Vered Flis: Because performance matters! Architecture Next 20
PPTX
Vitali zaidman Do You Need Server Side Rendering? What Are The Alternatives?
PDF
Ronen Levinson: Unified policy enforcement with opa - Architecture Next 20
PPTX
Moaid Hathot: Dapr the glue to your microservices - Architecture Next 20
PPTX
Eyal Ellenbogen: Building a UI Foundation for Scalability - Architecture Next 20
Digital transformation buzzword or reality - Alon Fliess
The IDF's journey to the cloud - Merav
When your release plan is concluded at the HR office - Hanan Zakai
We come in peace hybrid development with web assembly - Maayan Hanin
The IoT Transformation and What it Means to You - Nir Dobovizky
State in stateless serverless functions - Alex Pshul
Will the Real Public API Please Stand Up? Amir Zuker
How I built a ml human hybrid workflow using computer vision - Amir Shitrit
Application evolution strategy - Eran Stiller
Designing products in the digital transformation era - Eyal Livne
Eerez Pedro: Product thinking 101 - Architecture Next
Alon Fliess: APM – What Is It, and Why Do I Need It? - Architecture Next 20
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
Magnus Mårtensson: The Cloud challenge is more than just technical – people a...
Nir Doboviski: In Space No One Can Hear Microservices Scream – a Microservice...
Vered Flis: Because performance matters! Architecture Next 20
Vitali zaidman Do You Need Server Side Rendering? What Are The Alternatives?
Ronen Levinson: Unified policy enforcement with opa - Architecture Next 20
Moaid Hathot: Dapr the glue to your microservices - Architecture Next 20
Eyal Ellenbogen: Building a UI Foundation for Scalability - Architecture Next 20

Recently uploaded (20)

PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
L1 - Introduction to python Backend.pptx
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Introduction to Artificial Intelligence
PDF
System and Network Administration Chapter 2
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Digital Strategies for Manufacturing Companies
PDF
System and Network Administraation Chapter 3
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Wondershare Filmora 15 Crack With Activation Key [2025
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Operating system designcfffgfgggggggvggggggggg
L1 - Introduction to python Backend.pptx
Design an Analysis of Algorithms II-SECS-1021-03
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Which alternative to Crystal Reports is best for small or large businesses.pdf
VVF-Customer-Presentation2025-Ver1.9.pptx
Upgrade and Innovation Strategies for SAP ERP Customers
Introduction to Artificial Intelligence
System and Network Administration Chapter 2
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PTS Company Brochure 2025 (1).pdf.......
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
2025 Textile ERP Trends: SAP, Odoo & Oracle
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Digital Strategies for Manufacturing Companies
System and Network Administraation Chapter 3

A serverless IoT story from design to production and monitoring

  • 1. A Serverless IoT Story From Design to Production and Monitoring Alex Pshul Software Architect & Consultant @AlexPshul alexp@codevalue.net http://pshul.com http://codevalue.net Moaid Hathot Senior Consultant @MoaidHathot moaidh@codevalue.net http://www.moaid.codes www.codevalue.net
  • 2. Vision  Manage a parking lot  Know which parking spot is occupied 3
  • 4. Traditional Architecture 5 Devices communicators WebApp Service A Load balancer Service B Service C Backend Services Storage
  • 6. About Us 7 Alex Pshul  Architect, Consultant and lecturer  More than 8 years of hands on experience  Talk to me about:  Software Development  Hardware and Gadgets  Gaming  Animals Moaid Hathot  Software engineer, consultant and code Jedi  Software Craftsmanship advocate  Clean Coder  OzCode Evangelist
  • 8. Time & Money  Pay per use  Don’t worry about server management  Quicker time to release  Faster to deploy new functionality  Don’t have to manage scaling and load balancing  Focus on business logic instead of servers and boilerplate.  Inherent Auto-Scalability 11
  • 9. When to Serverless  Logic can be disassembled into small modules  Irregular Workloads  Hard to predict load peaks  Run closer to the user 12
  • 10. When not to Serverless  Performance is important  A consistently high and predictable workload  Long running tasks that can’t be split into sub-tasks or multiple cycles  Complex computing with high memory/CPU requirements. 13
  • 12. Compute - FaaS  FaaS – Function as a Service  First mentioned by D. J. Wheeler in 1952- ‘The use of sub-routines in programmes’.  Event-Driven serverless compute  Examples:  Azure Functions  AWS Lambda  Google Cloud Functions 15
  • 13. FaaS – Azure Functions  Trigger Oriented  Input & Output Binding  Dependency Injection  Tackle Cold-Start performance hits by leaving host loaded  Premium Plan  AppService Plan  Supports several frameworks and languages  C#, JavaScript, Java, Python, F#, PowerShell & TypeScript 18
  • 14. FaaS - Azure Functions 19 [FunctionName("EchoFunc")] public static Task<IActionResult> EchoFunc( [HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest request, ILogger log) { string message = request.Query["message"]; //Do Something var result = new OkObjectResult($"Message received: {message}"); return Task.FromResult((IActionResult) result); }
  • 15. FaaS – Azure Functions - Deployment  Different ways to deploy your functions  Visual Studio  Using FTP  Uploading a zip  Continues deployment  GitHub  Dropbox  Azure DevOps  More… 21
  • 17. Events  Process a high number of events per second  Decouple communication between components  Store and transform events  Integrate with other services 24
  • 18. Events – Azure EventHub  Can receive and process millions of events per second  Support Apache Kafka clients  Integrate with other azure services  Provide SDKs for several frameworks  .Net, Node.js, Java, Python, Go, C, Apache Storm  Enable capturing and storing events  Partitioning 26
  • 19. Events – Azure EventHub 27
  • 22. Communication – SignalR Service  Fully managed  Cross Platform  Easily integrated with other Azure resources  Such as Azure Functions  Provides abstractions  WebSockets, Long Polling or Server-sent events (SSE)  Send message to all or to a subset of users 32
  • 23. Integration 33 [FunctionName("UpdateUsers")] public static Task OnDeviceUpdated( [EventHubTrigger("device-updates", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage, [SignalR(HubName = "updates")]IAsyncCollector<SignalRMessage> signalRMessages, ILogger log) { string message = Encoding.UTF8.GetString(myEventHubMessage.Body); //Do something return signalRMessages.AddAsync(new SignalRMessage { Target = "updateReceived", Arguments = new[] { message } }); }
  • 26. Do Not Reinvent the Wheel 38 D2C Messages C2D Messages Devices Management Security Message Routing Deployment
  • 27. IoT Hub  One of Microsoft`s PaaS solutions for building IoT solutions  Provides the infrastructure for working with devices  Most of the work is defining the devices and coding  SDKs for various languages (.NET, Java, Node.js, Python, C, iOS)  Exposes various endpoints  Integration with other Azure services 39
  • 28. IoT Hub - Tiers  Each tier has 3 paid editions  Each tier provides higher throughput  Makes the service more expensive  Basic tier  Limited features  Cheaper (compared with same standard tier edition)  Standard tier  All features are available  More expensive (compared with same basic tier edition)  Contains a free edition  Standard Free edition  1 free IoT Hub allowed per subscription  Encourages PoC projects  Same features as the Standard tier (Not same throughput) 40
  • 29. Do Not Reinvent the Wheel 41 D2C Messages C2D Messages Devices Management Security Message Routing Deployment
  • 30. Device to Cloud Messages  Send device telemetry to the cloud  Using an SDK  Send a message directly using a protocol  MQTT (+ over WebSocket)  AMQP (+ over WebSocket)  HTTPS  Uses a connection string to identify the device in the IoT Hub  Stored by IoT Hub, up to 7 days  Up to 256-KB messages  Frequency depends on the selected IoT Hub edition 42
  • 31. Device to Cloud Messages 43 static async Task Main(string[] args) { // Initialize the device client object DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("Device_Connection_String"); // Create the message var data = new { Temperature = 30, Humidity = 37 }; var messageString = JsonConvert.SerializeObject(data); Message message = new Message(Encoding.ASCII.GetBytes(messageString)); // Send the message await deviceClient.SendEventAsync(message); }
  • 32. Do Not Reinvent the Wheel 44 D2C Messages C2D Messages Devices Management Security Message Routing Deployment D2C Messages
  • 33. Cloud to Device Messages – Regular Messages  Not awaited  Stored in the device queue  If queue is full (>50) - results in an error  Can Reject or Abandon messages (unless MQTT)  Can set feedback for each message 45
  • 34. Cloud to Device Messages 46 static async Task Main(string[] args) { // Initialize the device client object DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("Device_Connection_String"); // Read message Message receivedMessage = await deviceClient.ReceiveAsync(); string messageString = Encoding.ASCII.GetString(receivedMessage.GetBytes()); Console.WriteLine($"Received message: {messageString}"); // Acknowledge completion await deviceClient.CompleteAsync(receivedMessage);} } Device
  • 35. Cloud to Device Messages 47 static async Task Main(string[] args) { // Initialize the service client object ServiceClient serviceClient = ServiceClient.CreateFromConnectionString("Service_Connection_String"); // Create the message byte[] messageBytes = Encoding.ASCII.GetBytes("Cloud to device message."); Message message = new Message(messageBytes); // Send to a specific device await serviceClient.SendAsync("myDeviceId", message); } Backend
  • 36. Cloud to Device Messages – Direct Methods  Initiate an action on the device  Receive immediate response  Response contains  Status Code  Payload 48
  • 37. Cloud to Device Messages 49 static async Task Main(string[] args) { // Initialize the device client object DeviceClient deviceClient = DeviceClient.CreateFromConnectionString("Device_Connection_String"); // Register Method await deviceClient.SetMethodHandlerAsync("GetData", GetData, null); } private static Task<MethodResponse> GetData(MethodRequest request, object userContext) { string someData = "My Cool Response!"; byte[] dataBytes = Encoding.ASCII.GetBytes(someData); MethodResponse response = new MethodResponse(dataBytes, 200); return Task.FromResult(response); } Device
  • 38. Cloud to Device Messages 50 static async Task Main(string[] args) { // Initialize the service client object ServiceClient serviceClient = ServiceClient.CreateFromConnectionString("Service_Connection_String"); // Create method object var methodInvocation = new CloudToDeviceMethod("GetData"); methodInvocation.SetPayloadJson("10"); // Invoke the direct method asynchronously and get the response from the simulated device. CloudToDeviceMethodResult response = await serviceClient.InvokeDeviceMethodAsync("MyDotnetDevice", methodInvocation); Console.WriteLine($"Status: {response.Status}. Payload: {response.GetPayloadAsJson()}"); } Backend
  • 39. Do Not Reinvent the Wheel 51 C2D Messages Devices Management Security Message Routing Deployment D2C Messages C2D Messages
  • 40. Devices Management – Twin Properties  Devices can have states  No feedback, unless subscribing to IoT Hub messages  Desired Properties  C2D  Shouldn’t represent device state  Reported Properties  D2C  Should reflect the current device state 52
  • 41. Devices Management – Query Devices  Devices can be queried  Example: Get only the devices that were installed today  Supports queries by twin properties as well  Built in functions that allow more complex scenarios  Simple example  SELECT * FROM devices  Returns all devices and their data 53
  • 42. Devices Management – Device Provisioning Service  Zero-Touch Provisioning  Single IoT Hub  Multitenancy  Solution Isolation  Geo-Sharding  Much more scenarios… 54
  • 43. Devices Management – Device Provisioning Service 55 Enrollment List Device Provisioning ServiceDevice IoT Hub
  • 44. Do Not Reinvent the Wheel 56 C2D Messages Devices Management Security Message Routing Deployment D2C Messages Devices Management
  • 45. Security  Uses permissions to grant access to each IoT Hub endpoint  RegistryRead  RegistryReadWrite  ServiceConnect  DeviceConnect  X.509 certificates  Existing device certificate  CA-signed certificate  Self-generated and self-signed certificate 57
  • 46. Security – Custom device authentication  Use the identity registry to configure credentials 58
  • 47. Do Not Reinvent the Wheel 59 C2D Messages Devices Management Security Message Routing Deployment D2C Messages Security
  • 48. Message Routing  Messages have a common format across protocols  Routes send messages to different endpoints based on a query  IoT Hub handles routing duplication  Supports various endpoint types  Built-in endpoint  Azure Blob Storage  Service Bus Queues and Service Bus Topics  Event Hubs 60
  • 49. Message Routing – Built-in endpoint & Event Hubs  The Build-in endpoint is just like any other Event Hub endpoint  Monitor build-in endpoint messages using Azure IoT Hub Toolkit extension for VS/VS Code  Stops receiving messages when another route is created  Unless a route to the default endpoint is created explicitly  Can add other Event Hubs for different routes 61
  • 50. Message Routing – Azure Blob Storage  Writes batches of data to the blob storage  When size is reached  When a certain time windows has passed  Supports AVRO format only  JSON format available as a preview (Not supported in East US, West US and West Europe)  A file is created for each batch of data 62
  • 51. Message Routing – Service Bus Queues and Topics  Session and Duplicate Detection must be disabled  Endpoint will appear as unreachable if above is not met 63
  • 52. Do Not Reinvent the Wheel 64 C2D Messages Devices Management Security Message Routing Deployment D2C Messages Message Routing
  • 55. The Problem  It is hard to debug remote resources  Applications are built of small little modules  Resources can be created and disposed of according to scale  A monitoring approach is easier to achieve  And is needed in any case 71
  • 56. Monitor – Azure Functions  Logging is your friend  An ILogger object can be injected to your function  Use Application Insights to view logs 72
  • 57. Integration 73 [FunctionName("UpdateUsers")] public static Task OnDeviceUpdated( [EventHubTrigger("device-updates", Connection = "EventHubConnectionAppSetting")] EventData myEventHubMessage, [SignalR(HubName = "updates")]IAsyncCollector<SignalRMessage> signalRMessages, ILogger log) { log.LogDebug($"Body received with {myEventHubMessage.Body.Count} bytes"); string message = Encoding.UTF8.GetString(myEventHubMessage.Body); log.LogInformation($"Message Extracted: {message}"); //Do something return signalRMessages.AddAsync(new SignalRMessage { Target = "updateReceived", Arguments = new[] { message } }); }
  • 60. Traditional Architecture 79 Devices communicators WebApp Service A Load balancer Service B Service C Backend Services Storage
  • 62. Summary  Serverless is not always the option  But very useful  Saves money and time  IoT solutions are available as PaaS  Don’t reinvent the wheel  Debugging is not easy, but it is possible  Monitoring is your friend 81
  • 63. Ales Pshul Software Architect & Consultant @AlexPshul alexp@codevalue.net http://pshul.com http://codevalue.net Moaid Hathot Senior Consultant @MoaidHathot moaidh@codevalue.net http://www.moaid.codes www.codevalue.net