SlideShare une entreprise Scribd logo
1  sur  64
@AlexPshul
When IoT Meets Serverless
From Design to Production and Monitoring
Alex Pshul
Software Architect & Consultant
@AlexPshul
alex@pshul.com
http://pshul.com
http://codevalue.net
@AlexPshul
About Me
Alex Pshul
 Architect, Consultant and lecturer
 More than 9 years of hands on experience
 Talk to me about:
 Software Development
 Hardware and Gadgets
 Gaming
 Animals
@AlexPshul
CodeValue is great! But…
@AlexPshul
Free Spots
32
@AlexPshul
Traditional Architecture
Devices communicators
WebApp
Service A
Load balancer
Service B Service C
Backend Services
Storage
@AlexPshul
How About Serverless? WebApp
@AlexPshul
Serverless
Save time and money
@AlexPshul
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
@AlexPshul
When to Serverless
 Logic can be disassembled into small modules
 Irregular Workloads
 Hard to predict load peaks
 Run closer to the user
 Kyiv to USA
 Kyiv to China
@AlexPshul
When not to Serverless
 Latency 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.
@AlexPshul
Migrating to Serverless WebApp
@AlexPshul
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
@AlexPshul
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
@AlexPshul
FaaS – Azure Functions
@AlexPshul
FaaS - Azure Functions
[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);
}
@AlexPshul
FaaS – Azure Functions - Deployment
 Different ways to deploy your functions
 Visual Studio
 Using FTP
 Uploading a zip
 Continues deployment
 GitHub
 Dropbox
 Azure DevOps
 More…
@AlexPshul
Migrating to Serverless WebApp
@AlexPshul
Events
 Process a high number of events per second
 Decouple communication between components
 Store and transform events
 Integrate with other services
@AlexPshul
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
@AlexPshul
Events – Azure EventHub
@AlexPshul
Migrating to Serverless WebApp
@AlexPshul
Communication
 Real-time
 Bi-directional
 Scale
 Secure
@AlexPshul
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
@AlexPshul
Integration
[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 }
});
}
@AlexPshul
Migrating to Serverless WebApp
@AlexPshul
IoT
Avoid reinventing the wheel
@AlexPshul
Do Not Reinvent the Wheel
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
@AlexPshul
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
@AlexPshul
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)
@AlexPshul
Do Not Reinvent the Wheel
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
@AlexPshul
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
@AlexPshul
Device to Cloud Messages
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);
}
@AlexPshul
Do Not Reinvent the Wheel
D2C
Messages
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
@AlexPshul
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
@AlexPshul
Cloud to Device Messages
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
@AlexPshul
Cloud to Device Messages
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
@AlexPshul
Cloud to Device Messages – Direct Methods
 Initiate an action on the device
 Receive immediate response
 Response contains
 Status Code
 Payload
@AlexPshul
Cloud to Device Messages
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
@AlexPshul
Cloud to Device Messages
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
@AlexPshul
Do Not Reinvent the Wheel
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
C2D
Messages
@AlexPshul
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
@AlexPshul
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
@AlexPshul
Devices Management – Device Provisioning Service
 Zero-Touch Provisioning
 Single IoT Hub
 Multitenancy
 Solution Isolation
 Geo-Sharding
 Much more scenarios…
@AlexPshul
Devices Management – Device Provisioning Service
Enrollment List
Device Provisioning ServiceDevice IoT Hub
@AlexPshul
Do Not Reinvent the Wheel
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Devices
Management
@AlexPshul
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
@AlexPshul
Security – Custom device authentication
 Use the identity registry to configure credentials
@AlexPshul
Do Not Reinvent the Wheel
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Security
@AlexPshul
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
@AlexPshul
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
@AlexPshul
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
@AlexPshul
Message Routing – Service Bus Queues and Topics
 Session and Duplicate Detection must be disabled
 Endpoint will appear as unreachable if above is not met
@AlexPshul
Do Not Reinvent the Wheel
C2D
Messages
Devices
Management
Security
Message
Routing
Deployment
D2C
Messages
Message
Routing
@AlexPshul
Demo
IoT Hub
Device Deployment
*Show a picture of IoT Hub*
@AlexPshul
Monitoring
Full Solution
@AlexPshul
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
@AlexPshul
Monitor – Azure Functions
 Logging is your friend
 An ILogger object can be injected to your function
 Use Application Insights to view logs
@AlexPshul
Integration
[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 }
});
}
@AlexPshul
Demo
End-to-end
scenario
@AlexPshul
Summary
@AlexPshul
Traditional Architecture
Devices communicators
WebApp
Service A
Load balancer
Service B Service C
Backend Services
Storage
@AlexPshul
Serverless Architecture WebApp
@AlexPshul
Summary
 Exists on all major cloud providers
 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
Alex Pshul
Software Architect & Consultant
@AlexPshul
alex@pshul.com
http://pshul.com
http://codevalue.net

Contenu connexe

Tendances

Tendances (19)

Event-Driven Serverless Apps - Pop-up Loft Tel Aviv
Event-Driven Serverless Apps - Pop-up Loft Tel AvivEvent-Driven Serverless Apps - Pop-up Loft Tel Aviv
Event-Driven Serverless Apps - Pop-up Loft Tel Aviv
 
IoT Hack Day: AWS Pop-up Loft Hack Series Sponsored by Intel
IoT Hack Day: AWS Pop-up Loft Hack Series Sponsored by IntelIoT Hack Day: AWS Pop-up Loft Hack Series Sponsored by Intel
IoT Hack Day: AWS Pop-up Loft Hack Series Sponsored by Intel
 
Connecting to AWS IoT
Connecting to AWS IoTConnecting to AWS IoT
Connecting to AWS IoT
 
(MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices
(MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices(MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices
(MBL303) Build Mobile Apps for IoT Devices and IoT Apps for Devices
 
Firebase overview
Firebase overviewFirebase overview
Firebase overview
 
Custom Distributed Tracing in Azure Functions (2021-02-27)
Custom Distributed Tracing in Azure Functions (2021-02-27)Custom Distributed Tracing in Azure Functions (2021-02-27)
Custom Distributed Tracing in Azure Functions (2021-02-27)
 
Lessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure codeLessons learned from writing over 300,000 lines of infrastructure code
Lessons learned from writing over 300,000 lines of infrastructure code
 
e-KTP Information Extraction with Google Cloud Function & Google Cloud Vision
e-KTP Information Extraction with Google Cloud Function & Google Cloud Visione-KTP Information Extraction with Google Cloud Function & Google Cloud Vision
e-KTP Information Extraction with Google Cloud Function & Google Cloud Vision
 
Event Sourcing in less than 20 minutes - With Akka and Java 8
Event Sourcing in less than 20 minutes - With Akka and Java 8Event Sourcing in less than 20 minutes - With Akka and Java 8
Event Sourcing in less than 20 minutes - With Akka and Java 8
 
What is Google Cloud Platform - GDG DevFest 18 Depok
What is Google Cloud Platform - GDG DevFest 18 DepokWhat is Google Cloud Platform - GDG DevFest 18 Depok
What is Google Cloud Platform - GDG DevFest 18 Depok
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
February 2016 Webinar Series - Best Practices for IoT Security in the Cloud
February 2016 Webinar Series - Best Practices for IoT Security in the CloudFebruary 2016 Webinar Series - Best Practices for IoT Security in the Cloud
February 2016 Webinar Series - Best Practices for IoT Security in the Cloud
 
AWS IoT introduction
AWS IoT introductionAWS IoT introduction
AWS IoT introduction
 
CQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDDCQRS and Event Sourcing, An Alternative Architecture for DDD
CQRS and Event Sourcing, An Alternative Architecture for DDD
 
Google Cloud Platform Kubernetes Workshop IYTE
Google Cloud Platform Kubernetes Workshop IYTEGoogle Cloud Platform Kubernetes Workshop IYTE
Google Cloud Platform Kubernetes Workshop IYTE
 
AWS Re:Invent - Securing HIPAA Compliant Apps in AWS
AWS Re:Invent - Securing HIPAA Compliant Apps in AWSAWS Re:Invent - Securing HIPAA Compliant Apps in AWS
AWS Re:Invent - Securing HIPAA Compliant Apps in AWS
 
Getting Started with AWS IoT, Devices & SDKs
Getting Started with AWS IoT, Devices & SDKsGetting Started with AWS IoT, Devices & SDKs
Getting Started with AWS IoT, Devices & SDKs
 
AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015
AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015
AWS IoT 및 Mobile Hub 서비스 소개 (김일호) :: re:Invent re:Cap Webinar 2015
 
OpenStack- A ringside view of Services and Architecture
OpenStack- A ringside view of Services and ArchitectureOpenStack- A ringside view of Services and Architecture
OpenStack- A ringside view of Services and Architecture
 

Similaire à .NET Fest 2019. Alex Pshul. When IoT Meets Serverless

Similaire à .NET Fest 2019. Alex Pshul. When IoT Meets Serverless (20)

A serverless IoT Story From Design to Production and Monitoring
A serverless IoT Story From Design to Production and MonitoringA serverless IoT Story From Design to Production and Monitoring
A serverless IoT Story From Design to Production and Monitoring
 
Azure Internet of Things
Azure Internet of ThingsAzure Internet of Things
Azure Internet of Things
 
What Is Happening At The Edge
What Is Happening At The EdgeWhat Is Happening At The Edge
What Is Happening At The Edge
 
Creating a Java Internet of Things Gateway
Creating a Java Internet of Things GatewayCreating a Java Internet of Things Gateway
Creating a Java Internet of Things Gateway
 
Essential Capabilities of an IoT Platform
Essential Capabilities of an IoT PlatformEssential Capabilities of an IoT Platform
Essential Capabilities of an IoT Platform
 
Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)
Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)
Microsoft Azure IoT Hub (Sam Vanhoutte @TechdaysNL 2017)
 
Blazor and Azure Functions - a serverless approach
Blazor and Azure Functions - a serverless approachBlazor and Azure Functions - a serverless approach
Blazor and Azure Functions - a serverless approach
 
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
Stephane Lapointe, Frank Boucher & Alexandre Brisebois: Les micro-services et...
 
Implementare e gestire soluzioni per l'Internet of Things (IoT) in modo rapid...
Implementare e gestire soluzioni per l'Internet of Things (IoT) in modo rapid...Implementare e gestire soluzioni per l'Internet of Things (IoT) in modo rapid...
Implementare e gestire soluzioni per l'Internet of Things (IoT) in modo rapid...
 
Architecting IoT solutions with Microsoft Azure
Architecting IoT solutions with Microsoft AzureArchitecting IoT solutions with Microsoft Azure
Architecting IoT solutions with Microsoft Azure
 
AWS IoT Webinar
AWS IoT WebinarAWS IoT Webinar
AWS IoT Webinar
 
AWS IoT - Introduction - Pop-up Loft
AWS IoT - Introduction - Pop-up LoftAWS IoT - Introduction - Pop-up Loft
AWS IoT - Introduction - Pop-up Loft
 
OSCON 2013 - Planning an OpenStack Cloud - Tom Fifield
OSCON 2013 - Planning an OpenStack Cloud - Tom FifieldOSCON 2013 - Planning an OpenStack Cloud - Tom Fifield
OSCON 2013 - Planning an OpenStack Cloud - Tom Fifield
 
AWS IoT Deep Dive
AWS IoT Deep DiveAWS IoT Deep Dive
AWS IoT Deep Dive
 
MongoDB IoT City Tour STUTTGART: The Microsoft Azure Platform for IoT
MongoDB IoT City Tour STUTTGART: The Microsoft Azure Platform for IoTMongoDB IoT City Tour STUTTGART: The Microsoft Azure Platform for IoT
MongoDB IoT City Tour STUTTGART: The Microsoft Azure Platform for IoT
 
Azure Digital Twins.pdf
Azure Digital Twins.pdfAzure Digital Twins.pdf
Azure Digital Twins.pdf
 
Winning the Lottery with Spring: A Microservices Case Study for the Dutch Lot...
Winning the Lottery with Spring: A Microservices Case Study for the Dutch Lot...Winning the Lottery with Spring: A Microservices Case Study for the Dutch Lot...
Winning the Lottery with Spring: A Microservices Case Study for the Dutch Lot...
 
IoT on azure
IoT on azureIoT on azure
IoT on azure
 
Azure Service Fabric: The road ahead for microservices
Azure Service Fabric: The road ahead for microservicesAzure Service Fabric: The road ahead for microservices
Azure Service Fabric: The road ahead for microservices
 
Introducing AWS IoT - Interfacing with the Physical World - Technical 101
Introducing AWS IoT - Interfacing with the Physical World - Technical 101Introducing AWS IoT - Interfacing with the Physical World - Technical 101
Introducing AWS IoT - Interfacing with the Physical World - Technical 101
 

Plus de NETFest

Plus de NETFest (20)

.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NET
.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NET.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NET
.NET Fest 2019. Николай Балакин. Микрооптимизации в мире .NET
 
.NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE...
.NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE....NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE...
.NET Fest 2019. Сергей Калинец. Efficient Microservice Communication with .NE...
 
.NET Fest 2019. Оля Гавриш. .NET Core 3.0 и будущее .NET
.NET Fest 2019. Оля Гавриш. .NET Core 3.0 и будущее .NET.NET Fest 2019. Оля Гавриш. .NET Core 3.0 и будущее .NET
.NET Fest 2019. Оля Гавриш. .NET Core 3.0 и будущее .NET
 
.NET Fest 2019. Оля Гавриш. Машинное обучение для .NET программистов
.NET Fest 2019. Оля Гавриш. Машинное обучение для .NET программистов.NET Fest 2019. Оля Гавриш. Машинное обучение для .NET программистов
.NET Fest 2019. Оля Гавриш. Машинное обучение для .NET программистов
 
.NET Fest 2019. Roberto Freato. Provisioning Azure PaaS fluently with Managem...
.NET Fest 2019. Roberto Freato. Provisioning Azure PaaS fluently with Managem....NET Fest 2019. Roberto Freato. Provisioning Azure PaaS fluently with Managem...
.NET Fest 2019. Roberto Freato. Provisioning Azure PaaS fluently with Managem...
 
.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven Design
.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven Design.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven Design
.NET Fest 2019. Halil Ibrahim Kalkan. Implementing Domain Driven Design
 
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
 
.NET Fest 2019. Michael Staib. Hot Chocolate: GraphQL Schema Stitching with A...
.NET Fest 2019. Michael Staib. Hot Chocolate: GraphQL Schema Stitching with A....NET Fest 2019. Michael Staib. Hot Chocolate: GraphQL Schema Stitching with A...
.NET Fest 2019. Michael Staib. Hot Chocolate: GraphQL Schema Stitching with A...
 
.NET Fest 2019. Андрей Литвинов. Async lifetime tests with xUnit and AutoFixture
.NET Fest 2019. Андрей Литвинов. Async lifetime tests with xUnit and AutoFixture.NET Fest 2019. Андрей Литвинов. Async lifetime tests with xUnit and AutoFixture
.NET Fest 2019. Андрей Литвинов. Async lifetime tests with xUnit and AutoFixture
 
.NET Fest 2019. Анатолий Колесник. Love, Death & F# Tests
.NET Fest 2019. Анатолий Колесник. Love, Death & F# Tests.NET Fest 2019. Анатолий Колесник. Love, Death & F# Tests
.NET Fest 2019. Анатолий Колесник. Love, Death & F# Tests
 
.NET Fest 2019. Алексей Голуб. Монадные парсер-комбинаторы в C# (простой спос...
.NET Fest 2019. Алексей Голуб. Монадные парсер-комбинаторы в C# (простой спос....NET Fest 2019. Алексей Голуб. Монадные парсер-комбинаторы в C# (простой спос...
.NET Fest 2019. Алексей Голуб. Монадные парсер-комбинаторы в C# (простой спос...
 
.NET Fest 2019. Roberto Freato. Azure App Service deep dive
.NET Fest 2019. Roberto Freato. Azure App Service deep dive.NET Fest 2019. Roberto Freato. Azure App Service deep dive
.NET Fest 2019. Roberto Freato. Azure App Service deep dive
 
.NET Fest 2019. Леонид Молотиевский. DotNet Core in production
.NET Fest 2019. Леонид Молотиевский. DotNet Core in production.NET Fest 2019. Леонид Молотиевский. DotNet Core in production
.NET Fest 2019. Леонид Молотиевский. DotNet Core in production
 
.NET Fest 2019. Александр Демчук. How to measure relationships within the Com...
.NET Fest 2019. Александр Демчук. How to measure relationships within the Com....NET Fest 2019. Александр Демчук. How to measure relationships within the Com...
.NET Fest 2019. Александр Демчук. How to measure relationships within the Com...
 
.NET Fest 2019. Anna Melashkina та Philipp Bauknecht. Dragons in a Mixed Real...
.NET Fest 2019. Anna Melashkina та Philipp Bauknecht. Dragons in a Mixed Real....NET Fest 2019. Anna Melashkina та Philipp Bauknecht. Dragons in a Mixed Real...
.NET Fest 2019. Anna Melashkina та Philipp Bauknecht. Dragons in a Mixed Real...
 
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
.NET Fest 2019. Alex Thissen. Architecting .NET solutions in a Docker ecosystem
 
.NET Fest 2019. Stas Lebedenko. Practical serverless use cases in Azure with ...
.NET Fest 2019. Stas Lebedenko. Practical serverless use cases in Azure with ....NET Fest 2019. Stas Lebedenko. Practical serverless use cases in Azure with ...
.NET Fest 2019. Stas Lebedenko. Practical serverless use cases in Azure with ...
 
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali....NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
.NET Fest 2019. Сергей Медведев. How serverless makes Integration TDD a reali...
 
.NET Fest 2019. Сергей Корж. Natural Language Processing in .NET
.NET Fest 2019. Сергей Корж. Natural Language Processing in .NET.NET Fest 2019. Сергей Корж. Natural Language Processing in .NET
.NET Fest 2019. Сергей Корж. Natural Language Processing in .NET
 
.NET Fest 2019. Eran Stiller. Create Your Own Serverless PKI with .NET & Azur...
.NET Fest 2019. Eran Stiller. Create Your Own Serverless PKI with .NET & Azur....NET Fest 2019. Eran Stiller. Create Your Own Serverless PKI with .NET & Azur...
.NET Fest 2019. Eran Stiller. Create Your Own Serverless PKI with .NET & Azur...
 

Dernier

Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
AnaAcapella
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
QucHHunhnh
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 

Dernier (20)

Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
PROCESS RECORDING FORMAT.docx
PROCESS      RECORDING        FORMAT.docxPROCESS      RECORDING        FORMAT.docx
PROCESS RECORDING FORMAT.docx
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Third Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptxThird Battle of Panipat detailed notes.pptx
Third Battle of Panipat detailed notes.pptx
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
 
Magic bus Group work1and 2 (Team 3).pptx
Magic bus Group work1and 2 (Team 3).pptxMagic bus Group work1and 2 (Team 3).pptx
Magic bus Group work1and 2 (Team 3).pptx
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docx
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 

.NET Fest 2019. Alex Pshul. When IoT Meets Serverless

  • 1. @AlexPshul When IoT Meets Serverless From Design to Production and Monitoring Alex Pshul Software Architect & Consultant @AlexPshul alex@pshul.com http://pshul.com http://codevalue.net
  • 2. @AlexPshul About Me Alex Pshul  Architect, Consultant and lecturer  More than 9 years of hands on experience  Talk to me about:  Software Development  Hardware and Gadgets  Gaming  Animals
  • 5. @AlexPshul Traditional Architecture Devices communicators WebApp Service A Load balancer Service B Service C Backend Services Storage
  • 8. @AlexPshul 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
  • 9. @AlexPshul When to Serverless  Logic can be disassembled into small modules  Irregular Workloads  Hard to predict load peaks  Run closer to the user  Kyiv to USA  Kyiv to China
  • 10. @AlexPshul When not to Serverless  Latency 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.
  • 12. @AlexPshul 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
  • 13. @AlexPshul 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
  • 15. @AlexPshul FaaS - Azure Functions [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); }
  • 16. @AlexPshul FaaS – Azure Functions - Deployment  Different ways to deploy your functions  Visual Studio  Using FTP  Uploading a zip  Continues deployment  GitHub  Dropbox  Azure DevOps  More…
  • 18. @AlexPshul Events  Process a high number of events per second  Decouple communication between components  Store and transform events  Integrate with other services
  • 19. @AlexPshul 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
  • 23. @AlexPshul 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
  • 24. @AlexPshul Integration [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 } }); }
  • 27. @AlexPshul Do Not Reinvent the Wheel D2C Messages C2D Messages Devices Management Security Message Routing Deployment
  • 28. @AlexPshul 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
  • 29. @AlexPshul 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)
  • 30. @AlexPshul Do Not Reinvent the Wheel D2C Messages C2D Messages Devices Management Security Message Routing Deployment
  • 31. @AlexPshul 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
  • 32. @AlexPshul Device to Cloud Messages 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); }
  • 33. @AlexPshul Do Not Reinvent the Wheel D2C Messages C2D Messages Devices Management Security Message Routing Deployment D2C Messages
  • 34. @AlexPshul 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
  • 35. @AlexPshul Cloud to Device Messages 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
  • 36. @AlexPshul Cloud to Device Messages 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
  • 37. @AlexPshul Cloud to Device Messages – Direct Methods  Initiate an action on the device  Receive immediate response  Response contains  Status Code  Payload
  • 38. @AlexPshul Cloud to Device Messages 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
  • 39. @AlexPshul Cloud to Device Messages 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
  • 40. @AlexPshul Do Not Reinvent the Wheel C2D Messages Devices Management Security Message Routing Deployment D2C Messages C2D Messages
  • 41. @AlexPshul 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
  • 42. @AlexPshul 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
  • 43. @AlexPshul Devices Management – Device Provisioning Service  Zero-Touch Provisioning  Single IoT Hub  Multitenancy  Solution Isolation  Geo-Sharding  Much more scenarios…
  • 44. @AlexPshul Devices Management – Device Provisioning Service Enrollment List Device Provisioning ServiceDevice IoT Hub
  • 45. @AlexPshul Do Not Reinvent the Wheel C2D Messages Devices Management Security Message Routing Deployment D2C Messages Devices Management
  • 46. @AlexPshul 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
  • 47. @AlexPshul Security – Custom device authentication  Use the identity registry to configure credentials
  • 48. @AlexPshul Do Not Reinvent the Wheel C2D Messages Devices Management Security Message Routing Deployment D2C Messages Security
  • 49. @AlexPshul 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
  • 50. @AlexPshul 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
  • 51. @AlexPshul 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
  • 52. @AlexPshul Message Routing – Service Bus Queues and Topics  Session and Duplicate Detection must be disabled  Endpoint will appear as unreachable if above is not met
  • 53. @AlexPshul Do Not Reinvent the Wheel C2D Messages Devices Management Security Message Routing Deployment D2C Messages Message Routing
  • 56. @AlexPshul 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
  • 57. @AlexPshul Monitor – Azure Functions  Logging is your friend  An ILogger object can be injected to your function  Use Application Insights to view logs
  • 58. @AlexPshul Integration [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 } }); }
  • 61. @AlexPshul Traditional Architecture Devices communicators WebApp Service A Load balancer Service B Service C Backend Services Storage
  • 63. @AlexPshul Summary  Exists on all major cloud providers  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
  • 64. Alex Pshul Software Architect & Consultant @AlexPshul alex@pshul.com http://pshul.com http://codevalue.net