SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
Paco de la Cruz
Durable Functions
Serverless and Stateful Orchestrations on Azure
@pacodelacruz
Global Azure Bootcamp 2019, Melbourne
@pacodelacruz
linkedin.com/in/pacodelacruz
pacodelacruzag.wordpress.com
slideshare.net/pacodelac/presentations
Agenda
Durable
Cloud compute spectrum
Azure compute spectrum
Azure compute spectrum
“Serverless” and its benefits
Event-driven scaling
not resource-driven
Pay only for what
you use
Server abstraction
Focus on value
Azure Functions in a nutshell
Event Triggers Code Outputs
React and get inputs from
a growing list of services
(triggers and input
bindings)
C#, F#,
Node.js, Java,
Python (Preview)
Send results to a
growing list of services
(output bindings)
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Manageable Sequencing
+ Error Handling / Compensation
Some limitations/challenges of Azure Functions
Fanning-out & Fanning-in
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Fanning-out & Fanning-in
Async Long-Running Http APIs
(Status polling)
Start
Get Status
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Fanning-out & Fanning-in Async Long-Running Http APIs
(Status polling)
Start
Get Status
Long-Running Stateful
Repeating Process
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Fanning-out & Fanning-in
Long-Running Stateful
Repeating Process
Async Long-Running Http APIs
(Status polling)
Start
Get Status
Human Interaction
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Fanning-out & Fanning-in
Human InteractionLong-Running Stateful
Repeating Process
Async Long-Running Http APIs
(Status polling)
Start
Get Status
External Events Correlation
Some limitations/challenges of Azure Functions
Manageable Sequencing
+ Error Handling / Compensation
Fanning-out & Fanning-in
Human InteractionLong-Running Stateful
Repeating Process
Async Long-Running Http APIs
(Status polling)
Start
Get Status
External Events Correlation
Durable Function Patterns
Function Chaining Fanning-out & Fanning-in Async HTTP APIs
Human InteractionMonitoring External Events Correlation
Start
Get Status
Durable Functions in a nutshell
Based on
Durable Task Framework
Persistence on Azure Storage
(Fully Managed and Abstracted)
To Implement stateful
workflows-as-code
(C#, F#, Java and Node.js)
Azure Functions
Extension
Durable Functions Components
Activity Function Activity Function Activity Function
Orchestrator Function
Orchestration Client
Durable Functions Components
Activity Function Activity Function Activity Function
Orchestrator Function
Orchestration Client
Stateful
Process Manager
Call Activity Functions
Advanced Retries
Error Handling
Fall Back / Compensation
Checkpointing
Dehydrates during activities
Rehydrates at responses / events
Durable Functions Components
Activity Function Activity Function Activity Function
Orchestrator Function
Orchestration Client
Stateless
Single Step
Inputs and Outputs
Stateful
Process Manager
Call Activity Functions
Advanced Retries
Error Handling
Fall Back / Compensation
Checkpointing
Dehydrates during activities
Rehydrates at responses / events
Durable Functions Components
Activity Function Activity Function Activity Function
Orchestrator Function
Orchestration Client
Start
Get Status
Send Event
Wait for Completion
Terminate
Stateless
Single Step
Inputs and Outputs
Stateful
Process Manager
Call Activity Functions
Advanced Retries
Error Handling
Fall Back / Compensation
Checkpointing
Dehydrates during activities
Rehydrates at responses / events
Orchestration Function Limitations
Orchestration code must
• Be deterministic
(e.g. no NewGuid(), Random, DateTime.Now(), Http calls, etc.)
• Be non-blocking: (no I/O, Thread.Sleep(), etc.)
• Never initiate any async operations: without using its
context
• Avoid infinite loops
There are workarounds
Orchestration Considerations
Activity function calls and responses are sent via queues
Async calls persist the orchestration state into a storage table
Activity function outputs are persisted (Event Sourcing)
Activity function responses, timer or external events will recover
the persisted orchestration state into memory
The orchestration is replayed up-to the last persisted point
Activity Functions are not replayed
Function Chaining Pattern
public static async Task<object> Run(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
try
{
var x = await ctx.CallActivityAsync<object>("F1");
var y = await ctx.CallActivityAsync<object>("F2", x);
return await ctx.CallActivityAsync<object>("F3", y);
}
catch (Exception ex)
{
// error handling / fall back / compensation
}
}
Function Chaining Pattern
public static async Task<object> Run(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
try
{
var x = await ctx.CallActivityAsync<object>("F1");
var y = await ctx.CallActivityAsync<object>("F2", x);
return await ctx.CallActivityAsync<object>("F3", y);
}
catch (Exception ex)
{
// error handling / fall back / compensation
}
}
Function Chaining Pattern
public static async Task<object> Run(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
try
{
var x = await ctx.CallActivityAsync<object>("F1");
var y = await ctx.CallActivityAsync<object>("F2", x);
return await ctx.CallActivityAsync<object>("F3", y);
}
catch (Exception ex)
{
// error handling / fall back / compensation
}
}
Fan-out & Fan-In Pattern
public static async Task<int> Run(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
object[] workBatch = await ctx.CallActivityAsync<object[]>("F1");
var tasks = new Task<long>[workBatch.Length];
for (int i = 0; i < workBatch.Length; i++)
{
tasks[i] = ctx.CallActivityAsync<int>("F2", workBatch[i]);
}
await Task.WhenAll(tasks);
long sum = tasks.Sum(t => t.Result);
return sum;
}
Fan-out & Fan-In Pattern
public static async Task<int> Run(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
object[] workBatch = await ctx.CallActivityAsync<object[]>("F1");
var tasks = new Task<long>[workBatch.Length];
for (int i = 0; i < workBatch.Length; i++)
{
tasks[i] = ctx.CallActivityAsync<int>("F2", workBatch[i]);
}
await Task.WhenAll(tasks);
long sum = tasks.Sum(t => t.Result);
return sum;
}
CallActivityWithRetryAsync
Orchestration Client
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post",
Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log)
{
// Function input comes from the request content.
dynamic eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync("myOrchestrator", eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var res = starter.CreateCheckStatusResponse(req, instanceId);
return res;
}
Orchestration Client
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post",
Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log)
{
// Function input comes from the request content.
dynamic eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync("myOrchestrator", eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var res = starter.CreateCheckStatusResponse(req, instanceId);
return res;
}
Orchestration Client
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post",
Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log)
{
// Function input comes from the request content.
dynamic eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync("myOrchestrator", eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
var res = starter.CreateCheckStatusResponse(req, instanceId);
return res;
}
Durable Functions vs Logic Apps?
vs
Durable Functions Logic Apps
Both allow implementing advanced workflow patterns
C#, F#, Java, JavaScript Visual designer and WDL
Bindings (~ 20 supported) 250+ connectors
Portable Runtime Runs only on Azure
Monitoring based on App Insights & APIs Rich monitoring & management tools
Serverless + dedicated & isolated Serverless + dedicated & isolated (ISE)
platform.deloitte.com.au/articles/azure-durable-functions-vs-logic-apps
Additional Resources
Twitter @azurefunctions
Documentation aka.ms/durablefunctions
Live Web Cast aka.ms/azurefunctionslive
Repos github.com/Azure/azure-functions-durable-extension
github.com/Azure/azure-functions-durable-js
Samples github.com/Azure/azure-functions-durable-
extension/tree/master/samples
Pluralsight course app.pluralsight.com/library/courses/
azure-durable-functions-fundamentals
Any questions so far?
Let’s have
some fun!
Demo 1
Development and Debugging
Furry Models
Cat Application Approval via email
Orchestration
Function
Start
Send Approval
Request via Email
Create Timer
External
Event
Timer
Expires
WhenAny
Move Blob to
Corresponding Container
End
(Requests
blob container)
(Approved or Rejected
blob container)
Orchestration
Function
Start
Send Approval
Request via Email
Create Timer
External
Event
Timer
Expires
WhenAny
Move Blob to
Corresponding Container
End
BlobTrigger
Function
HttpTrigger
Process Approval
(Requests
blob container)
(Approved or Rejected
blob container)
Orchestration Client Activity Functions
ActivityTrigger
Send Approval
Request via Email
ActivityTrigger
Move Blob to
Corresponding Container
HttpTrigger
Check Status
Demo 2
Execution & Monitoring on Azure
Furry Models
Cat Application Approval via Slack
Orchestration
Function
Start
Send Approval
Request via Slack
Create Timer
External
Event
Timer
Expires
WhenAny
Move Blob to
Corresponding Container
End
BlobTrigger
Function
HttpTrigger
Process Approval
(Requests
blob container)
(Approved or Rejected
blob container)
Orchestration Client Activity Functions
ActivityTrigger
Send Approval
Request via Slack
ActivityTrigger
Move Blob to
Corresponding Container
HttpTrigger
Check Status
Let your Cat apply!
Great opportunity to get famous!
Send to: …@...com
Subject: I want to be a Furry Model!
Attach your cat best picture
Details about the demos:
platform.deloitte.com.au/articles/azure-durable-functions-approval-workflow-with-sendgrid
platform.deloitte.com.au/articles/azure-durable-functions-approval-workflow-with-slack
github.com/pacodelacruz/durable-functions-furry-models
Q & A
Thanks!
@pacodelacruz
linkedin.com/in/pacodelacruz
pacodelacruzag.wordpress.com
slideshare.net/pacodelac/presentations

Contenu connexe

Tendances

JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsKonrad Malawski
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaKasun Indrasiri
 
Vertx - Reactive & Distributed
Vertx - Reactive & DistributedVertx - Reactive & Distributed
Vertx - Reactive & DistributedOrkhan Gasimov
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadDavid Gómez García
 
End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaBabacar NIANG
 
Beyond Profilers: Tracing Node.js Transactions
Beyond Profilers: Tracing Node.js TransactionsBeyond Profilers: Tracing Node.js Transactions
Beyond Profilers: Tracing Node.js TransactionsTerral R Jordan
 
Sane Sharding with Akka Cluster
Sane Sharding with Akka ClusterSane Sharding with Akka Cluster
Sane Sharding with Akka Clustermiciek
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass SlidesNir Kaufman
 
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018Loiane Groner
 
Kogito: cloud native business automation
Kogito: cloud native business automationKogito: cloud native business automation
Kogito: cloud native business automationMario Fusco
 
Introduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaIntroduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaFabio Collini
 
Biz Talk Demo slideshare
Biz Talk Demo slideshareBiz Talk Demo slideshare
Biz Talk Demo slideshareerios
 
Retrofit
RetrofitRetrofit
Retrofitbresiu
 
Client server part 12
Client server part 12Client server part 12
Client server part 12fadlihulopi
 
Protocol-Oriented Networking
Protocol-Oriented NetworkingProtocol-Oriented Networking
Protocol-Oriented NetworkingMostafa Amer
 
Why You Should Use TAPIs
Why You Should Use TAPIsWhy You Should Use TAPIs
Why You Should Use TAPIsJeffrey Kemp
 
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConf
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConfFull-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConf
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConfLoiane Groner
 

Tendances (20)

JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good Parts
 
Typescript barcelona
Typescript barcelonaTypescript barcelona
Typescript barcelona
 
Reactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-JavaReactive Programming in Java 8 with Rx-Java
Reactive Programming in Java 8 with Rx-Java
 
Vertx - Reactive & Distributed
Vertx - Reactive & DistributedVertx - Reactive & Distributed
Vertx - Reactive & Distributed
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
 
End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux Saga
 
Parse Advanced
Parse AdvancedParse Advanced
Parse Advanced
 
Full Stack Unit Testing
Full Stack Unit TestingFull Stack Unit Testing
Full Stack Unit Testing
 
Beyond Profilers: Tracing Node.js Transactions
Beyond Profilers: Tracing Node.js TransactionsBeyond Profilers: Tracing Node.js Transactions
Beyond Profilers: Tracing Node.js Transactions
 
Sane Sharding with Akka Cluster
Sane Sharding with Akka ClusterSane Sharding with Akka Cluster
Sane Sharding with Akka Cluster
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018
Full-Stack Reactive with Spring WebFlux + Angular - Oracle Code One 2018
 
Kogito: cloud native business automation
Kogito: cloud native business automationKogito: cloud native business automation
Kogito: cloud native business automation
 
Introduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaIntroduction to Retrofit and RxJava
Introduction to Retrofit and RxJava
 
Biz Talk Demo slideshare
Biz Talk Demo slideshareBiz Talk Demo slideshare
Biz Talk Demo slideshare
 
Retrofit
RetrofitRetrofit
Retrofit
 
Client server part 12
Client server part 12Client server part 12
Client server part 12
 
Protocol-Oriented Networking
Protocol-Oriented NetworkingProtocol-Oriented Networking
Protocol-Oriented Networking
 
Why You Should Use TAPIs
Why You Should Use TAPIsWhy You Should Use TAPIs
Why You Should Use TAPIs
 
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConf
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConfFull-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConf
Full-Stack Reativo com Spring WebFlux + Angular - FiqueEmCasaConf
 

Similaire à Azure Durable Functions (2019-04-27)

[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade Serverless[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade ServerlessKatyShimizu
 
Architecting Alive Apps
Architecting Alive AppsArchitecting Alive Apps
Architecting Alive AppsJorge Ortiz
 
Building workflow solution with Microsoft Azure and Cloud | Integration Monday
Building workflow solution with Microsoft Azure and Cloud | Integration MondayBuilding workflow solution with Microsoft Azure and Cloud | Integration Monday
Building workflow solution with Microsoft Azure and Cloud | Integration MondayBizTalk360
 
Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play FrameworkKnoldus Inc.
 
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-FunctionsIntegration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-FunctionsBizTalk360
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdfStephanie Locke
 
ADF Gold Nuggets (Oracle Open World 2011)
ADF Gold Nuggets (Oracle Open World 2011)ADF Gold Nuggets (Oracle Open World 2011)
ADF Gold Nuggets (Oracle Open World 2011)Lucas Jellema
 
Inversion Of Control
Inversion Of ControlInversion Of Control
Inversion Of ControlChad Hietala
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every dayVadym Khondar
 
Avoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jsAvoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jscacois
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in reactBOSC Tech Labs
 
Event Sourcing - what could go wrong - Devoxx BE
Event Sourcing - what could go wrong - Devoxx BEEvent Sourcing - what could go wrong - Devoxx BE
Event Sourcing - what could go wrong - Devoxx BEAndrzej Ludwikowski
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Red Hat Developers
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSam Brannen
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaRick Warren
 
Flask patterns
Flask patternsFlask patterns
Flask patternsit-people
 
DWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A TutorialDWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A Tutorialjbarciauskas
 

Similaire à Azure Durable Functions (2019-04-27) (20)

[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade Serverless[NDC 2019] Enterprise-Grade Serverless
[NDC 2019] Enterprise-Grade Serverless
 
Architecting Alive Apps
Architecting Alive AppsArchitecting Alive Apps
Architecting Alive Apps
 
Building workflow solution with Microsoft Azure and Cloud | Integration Monday
Building workflow solution with Microsoft Azure and Cloud | Integration MondayBuilding workflow solution with Microsoft Azure and Cloud | Integration Monday
Building workflow solution with Microsoft Azure and Cloud | Integration Monday
 
Intoduction to Play Framework
Intoduction to Play FrameworkIntoduction to Play Framework
Intoduction to Play Framework
 
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-FunctionsIntegration-Monday-Stateful-Programming-Models-Serverless-Functions
Integration-Monday-Stateful-Programming-Models-Serverless-Functions
 
Intro to Node
Intro to NodeIntro to Node
Intro to Node
 
Working with data using Azure Functions.pdf
Working with data using Azure Functions.pdfWorking with data using Azure Functions.pdf
Working with data using Azure Functions.pdf
 
ADF Gold Nuggets (Oracle Open World 2011)
ADF Gold Nuggets (Oracle Open World 2011)ADF Gold Nuggets (Oracle Open World 2011)
ADF Gold Nuggets (Oracle Open World 2011)
 
Inversion Of Control
Inversion Of ControlInversion Of Control
Inversion Of Control
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 
Avoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jsAvoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.js
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
Event Sourcing - what could go wrong - Devoxx BE
Event Sourcing - what could go wrong - Devoxx BEEvent Sourcing - what could go wrong - Devoxx BE
Event Sourcing - what could go wrong - Devoxx BE
 
Durable Functions
Durable FunctionsDurable Functions
Durable Functions
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
 
Struts2 - 101
Struts2 - 101Struts2 - 101
Struts2 - 101
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. REST
 
Building Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJavaBuilding Scalable Stateless Applications with RxJava
Building Scalable Stateless Applications with RxJava
 
Flask patterns
Flask patternsFlask patterns
Flask patterns
 
DWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A TutorialDWR, Hibernate and Dojo.E - A Tutorial
DWR, Hibernate and Dojo.E - A Tutorial
 

Plus de Paco de la Cruz

Mi experiencia en AU IT.pdf
Mi experiencia en AU IT.pdfMi experiencia en AU IT.pdf
Mi experiencia en AU IT.pdfPaco de la Cruz
 
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)Paco de la Cruz
 
Serverless: The Good, the Bad and the Ugly (2019-11-19)
Serverless: The Good, the Bad and the Ugly (2019-11-19) Serverless: The Good, the Bad and the Ugly (2019-11-19)
Serverless: The Good, the Bad and the Ugly (2019-11-19) Paco de la Cruz
 
Azure Event Grid Lighting Talk (2017-10-05)
Azure Event Grid Lighting Talk (2017-10-05)Azure Event Grid Lighting Talk (2017-10-05)
Azure Event Grid Lighting Talk (2017-10-05)Paco de la Cruz
 
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)Paco de la Cruz
 
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)Logic Apps and Azure Functions for Serverless Integration (2017-03-25)
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)Paco de la Cruz
 
Microsoft Azure iPaaS Overview and What's New (2018-03-24)
Microsoft Azure iPaaS Overview and What's New (2018-03-24)Microsoft Azure iPaaS Overview and What's New (2018-03-24)
Microsoft Azure iPaaS Overview and What's New (2018-03-24)Paco de la Cruz
 
Building Serverless Integration Solutions with Logic Apps (2017-04-22)
Building Serverless Integration Solutions with Logic Apps (2017-04-22)Building Serverless Integration Solutions with Logic Apps (2017-04-22)
Building Serverless Integration Solutions with Logic Apps (2017-04-22)Paco de la Cruz
 
Love at First Sight with Azure Logic Apps (2017-06-22)
Love at First Sight with Azure Logic Apps (2017-06-22)Love at First Sight with Azure Logic Apps (2017-06-22)
Love at First Sight with Azure Logic Apps (2017-06-22)Paco de la Cruz
 

Plus de Paco de la Cruz (9)

Mi experiencia en AU IT.pdf
Mi experiencia en AU IT.pdfMi experiencia en AU IT.pdf
Mi experiencia en AU IT.pdf
 
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)
 
Serverless: The Good, the Bad and the Ugly (2019-11-19)
Serverless: The Good, the Bad and the Ugly (2019-11-19) Serverless: The Good, the Bad and the Ugly (2019-11-19)
Serverless: The Good, the Bad and the Ugly (2019-11-19)
 
Azure Event Grid Lighting Talk (2017-10-05)
Azure Event Grid Lighting Talk (2017-10-05)Azure Event Grid Lighting Talk (2017-10-05)
Azure Event Grid Lighting Talk (2017-10-05)
 
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)
Building Serverless Event-Driven Apps with Azure Event Grid (2017-09-21)
 
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)Logic Apps and Azure Functions for Serverless Integration (2017-03-25)
Logic Apps and Azure Functions for Serverless Integration (2017-03-25)
 
Microsoft Azure iPaaS Overview and What's New (2018-03-24)
Microsoft Azure iPaaS Overview and What's New (2018-03-24)Microsoft Azure iPaaS Overview and What's New (2018-03-24)
Microsoft Azure iPaaS Overview and What's New (2018-03-24)
 
Building Serverless Integration Solutions with Logic Apps (2017-04-22)
Building Serverless Integration Solutions with Logic Apps (2017-04-22)Building Serverless Integration Solutions with Logic Apps (2017-04-22)
Building Serverless Integration Solutions with Logic Apps (2017-04-22)
 
Love at First Sight with Azure Logic Apps (2017-06-22)
Love at First Sight with Azure Logic Apps (2017-06-22)Love at First Sight with Azure Logic Apps (2017-06-22)
Love at First Sight with Azure Logic Apps (2017-06-22)
 

Dernier

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 

Dernier (20)

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 

Azure Durable Functions (2019-04-27)

  • 1. Paco de la Cruz Durable Functions Serverless and Stateful Orchestrations on Azure @pacodelacruz Global Azure Bootcamp 2019, Melbourne
  • 7. “Serverless” and its benefits Event-driven scaling not resource-driven Pay only for what you use Server abstraction Focus on value
  • 8. Azure Functions in a nutshell Event Triggers Code Outputs React and get inputs from a growing list of services (triggers and input bindings) C#, F#, Node.js, Java, Python (Preview) Send results to a growing list of services (output bindings)
  • 9. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation
  • 10. Manageable Sequencing + Error Handling / Compensation Some limitations/challenges of Azure Functions Fanning-out & Fanning-in
  • 11. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation Fanning-out & Fanning-in Async Long-Running Http APIs (Status polling) Start Get Status
  • 12. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation Fanning-out & Fanning-in Async Long-Running Http APIs (Status polling) Start Get Status Long-Running Stateful Repeating Process
  • 13. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation Fanning-out & Fanning-in Long-Running Stateful Repeating Process Async Long-Running Http APIs (Status polling) Start Get Status Human Interaction
  • 14. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation Fanning-out & Fanning-in Human InteractionLong-Running Stateful Repeating Process Async Long-Running Http APIs (Status polling) Start Get Status External Events Correlation
  • 15. Some limitations/challenges of Azure Functions Manageable Sequencing + Error Handling / Compensation Fanning-out & Fanning-in Human InteractionLong-Running Stateful Repeating Process Async Long-Running Http APIs (Status polling) Start Get Status External Events Correlation
  • 16. Durable Function Patterns Function Chaining Fanning-out & Fanning-in Async HTTP APIs Human InteractionMonitoring External Events Correlation Start Get Status
  • 17. Durable Functions in a nutshell Based on Durable Task Framework Persistence on Azure Storage (Fully Managed and Abstracted) To Implement stateful workflows-as-code (C#, F#, Java and Node.js) Azure Functions Extension
  • 18. Durable Functions Components Activity Function Activity Function Activity Function Orchestrator Function Orchestration Client
  • 19. Durable Functions Components Activity Function Activity Function Activity Function Orchestrator Function Orchestration Client Stateful Process Manager Call Activity Functions Advanced Retries Error Handling Fall Back / Compensation Checkpointing Dehydrates during activities Rehydrates at responses / events
  • 20. Durable Functions Components Activity Function Activity Function Activity Function Orchestrator Function Orchestration Client Stateless Single Step Inputs and Outputs Stateful Process Manager Call Activity Functions Advanced Retries Error Handling Fall Back / Compensation Checkpointing Dehydrates during activities Rehydrates at responses / events
  • 21. Durable Functions Components Activity Function Activity Function Activity Function Orchestrator Function Orchestration Client Start Get Status Send Event Wait for Completion Terminate Stateless Single Step Inputs and Outputs Stateful Process Manager Call Activity Functions Advanced Retries Error Handling Fall Back / Compensation Checkpointing Dehydrates during activities Rehydrates at responses / events
  • 22. Orchestration Function Limitations Orchestration code must • Be deterministic (e.g. no NewGuid(), Random, DateTime.Now(), Http calls, etc.) • Be non-blocking: (no I/O, Thread.Sleep(), etc.) • Never initiate any async operations: without using its context • Avoid infinite loops There are workarounds
  • 23. Orchestration Considerations Activity function calls and responses are sent via queues Async calls persist the orchestration state into a storage table Activity function outputs are persisted (Event Sourcing) Activity function responses, timer or external events will recover the persisted orchestration state into memory The orchestration is replayed up-to the last persisted point Activity Functions are not replayed
  • 24. Function Chaining Pattern public static async Task<object> Run( [OrchestrationTrigger] DurableOrchestrationContext ctx) { try { var x = await ctx.CallActivityAsync<object>("F1"); var y = await ctx.CallActivityAsync<object>("F2", x); return await ctx.CallActivityAsync<object>("F3", y); } catch (Exception ex) { // error handling / fall back / compensation } }
  • 25. Function Chaining Pattern public static async Task<object> Run( [OrchestrationTrigger] DurableOrchestrationContext ctx) { try { var x = await ctx.CallActivityAsync<object>("F1"); var y = await ctx.CallActivityAsync<object>("F2", x); return await ctx.CallActivityAsync<object>("F3", y); } catch (Exception ex) { // error handling / fall back / compensation } }
  • 26. Function Chaining Pattern public static async Task<object> Run( [OrchestrationTrigger] DurableOrchestrationContext ctx) { try { var x = await ctx.CallActivityAsync<object>("F1"); var y = await ctx.CallActivityAsync<object>("F2", x); return await ctx.CallActivityAsync<object>("F3", y); } catch (Exception ex) { // error handling / fall back / compensation } }
  • 27. Fan-out & Fan-In Pattern public static async Task<int> Run( [OrchestrationTrigger] DurableOrchestrationContext ctx) { object[] workBatch = await ctx.CallActivityAsync<object[]>("F1"); var tasks = new Task<long>[workBatch.Length]; for (int i = 0; i < workBatch.Length; i++) { tasks[i] = ctx.CallActivityAsync<int>("F2", workBatch[i]); } await Task.WhenAll(tasks); long sum = tasks.Sum(t => t.Result); return sum; }
  • 28. Fan-out & Fan-In Pattern public static async Task<int> Run( [OrchestrationTrigger] DurableOrchestrationContext ctx) { object[] workBatch = await ctx.CallActivityAsync<object[]>("F1"); var tasks = new Task<long>[workBatch.Length]; for (int i = 0; i < workBatch.Length; i++) { tasks[i] = ctx.CallActivityAsync<int>("F2", workBatch[i]); } await Task.WhenAll(tasks); long sum = tasks.Sum(t => t.Result); return sum; } CallActivityWithRetryAsync
  • 29. Orchestration Client public static async Task<HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log) { // Function input comes from the request content. dynamic eventData = await req.Content.ReadAsAsync<object>(); string instanceId = await starter.StartNewAsync("myOrchestrator", eventData); log.LogInformation($"Started orchestration with ID = '{instanceId}'."); var res = starter.CreateCheckStatusResponse(req, instanceId); return res; }
  • 30. Orchestration Client public static async Task<HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log) { // Function input comes from the request content. dynamic eventData = await req.Content.ReadAsAsync<object>(); string instanceId = await starter.StartNewAsync("myOrchestrator", eventData); log.LogInformation($"Started orchestration with ID = '{instanceId}'."); var res = starter.CreateCheckStatusResponse(req, instanceId); return res; }
  • 31. Orchestration Client public static async Task<HttpResponseMessage> Run( [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req, [OrchestrationClient] DurableOrchestrationClientBase starter, ILogger log) { // Function input comes from the request content. dynamic eventData = await req.Content.ReadAsAsync<object>(); string instanceId = await starter.StartNewAsync("myOrchestrator", eventData); log.LogInformation($"Started orchestration with ID = '{instanceId}'."); var res = starter.CreateCheckStatusResponse(req, instanceId); return res; }
  • 32. Durable Functions vs Logic Apps? vs Durable Functions Logic Apps Both allow implementing advanced workflow patterns C#, F#, Java, JavaScript Visual designer and WDL Bindings (~ 20 supported) 250+ connectors Portable Runtime Runs only on Azure Monitoring based on App Insights & APIs Rich monitoring & management tools Serverless + dedicated & isolated Serverless + dedicated & isolated (ISE) platform.deloitte.com.au/articles/azure-durable-functions-vs-logic-apps
  • 33. Additional Resources Twitter @azurefunctions Documentation aka.ms/durablefunctions Live Web Cast aka.ms/azurefunctionslive Repos github.com/Azure/azure-functions-durable-extension github.com/Azure/azure-functions-durable-js Samples github.com/Azure/azure-functions-durable- extension/tree/master/samples Pluralsight course app.pluralsight.com/library/courses/ azure-durable-functions-fundamentals
  • 36. Demo 1 Development and Debugging Furry Models Cat Application Approval via email
  • 37. Orchestration Function Start Send Approval Request via Email Create Timer External Event Timer Expires WhenAny Move Blob to Corresponding Container End (Requests blob container) (Approved or Rejected blob container)
  • 38. Orchestration Function Start Send Approval Request via Email Create Timer External Event Timer Expires WhenAny Move Blob to Corresponding Container End BlobTrigger Function HttpTrigger Process Approval (Requests blob container) (Approved or Rejected blob container) Orchestration Client Activity Functions ActivityTrigger Send Approval Request via Email ActivityTrigger Move Blob to Corresponding Container HttpTrigger Check Status
  • 39. Demo 2 Execution & Monitoring on Azure Furry Models Cat Application Approval via Slack
  • 40. Orchestration Function Start Send Approval Request via Slack Create Timer External Event Timer Expires WhenAny Move Blob to Corresponding Container End BlobTrigger Function HttpTrigger Process Approval (Requests blob container) (Approved or Rejected blob container) Orchestration Client Activity Functions ActivityTrigger Send Approval Request via Slack ActivityTrigger Move Blob to Corresponding Container HttpTrigger Check Status
  • 41. Let your Cat apply! Great opportunity to get famous! Send to: …@...com Subject: I want to be a Furry Model! Attach your cat best picture
  • 42. Details about the demos: platform.deloitte.com.au/articles/azure-durable-functions-approval-workflow-with-sendgrid platform.deloitte.com.au/articles/azure-durable-functions-approval-workflow-with-slack github.com/pacodelacruz/durable-functions-furry-models
  • 43. Q & A