Durable functions offer an interesting programming model for building workflows. Whether you need to sometimes split and do multiple things or wait for user input, a lot of things are possible. They do present some challenges as well, and the limitations of orchestrator functions can make working with Durable seem very complicated.
In this talk we will go through the basics of Durable Functions along with strategies for deploying and monitoring them. A sample application will be presented where users can send documents for electronic signature. A Durable Functions workflow will power the signing process.
Basketball: Periodization of Biomotor Capabilities Adriano Vretaros
ABSTRACT
In the prescription of training programs aimed at basketball players,periodization is a tool of crucial importance. Knowing how to properly periodize the biomotor capabilities inherent in a sport is a skill that the strength and conditioning coach needs to develop. There are different models of periodization available in the scientific literature. Identifying the most appropriate periodization model and implementing it in the phases of the season is a complex task. In conjunction with periodization, we have systematic control of training loads that, if well distributed
and monitored, can guide the team's athletic performance. In this framework of processes, based on relevant scientific concepts and research, this presentation discusses how physical fitness and sports form can be adequately improved in
basketball players.
Keywords: basketball, periodization, biomotor capabilities, physical fitness, sport form
Basketball: Scientific Basis of Strength TrainingAdriano Vretaros
ABSTRACT
Muscle strength and power is present in various motor tasks performed by basketball players. Strength and conditioning coaches must have a deep understanding of the scientific basis of strength training to guide their work. Strength training is considered the foundation for the development of other biomotor capabilities. The manifestations of strength (anatomical adaptation, hypertrophy, maximum strength, power and power endurance) must be appropriately periodized to be able to monitor the control of training loads, minimizing fatigue and the risk of injury. Anatomical adaptation is a primary work that may perhaps be neglected. Muscle hypertrophy makes the basketball player stronger to withstand collisions and take advantage against smaller and weaker players. Maximum strength training is a prerequisite for greater power gains. Power allows the athlete to perform explosive actions efficiently. Power endurance training makes it possible that the muscle power can be maintained with lower fatigue levels. The particularities of each manifestation of strength are discussed in order to improve athletic performance in basketball.
Keywords: strength training, basketball, sport science, sports performance, athletic performance
Basketball: Periodization of Biomotor Capabilities Adriano Vretaros
ABSTRACT
In the prescription of training programs aimed at basketball players,periodization is a tool of crucial importance. Knowing how to properly periodize the biomotor capabilities inherent in a sport is a skill that the strength and conditioning coach needs to develop. There are different models of periodization available in the scientific literature. Identifying the most appropriate periodization model and implementing it in the phases of the season is a complex task. In conjunction with periodization, we have systematic control of training loads that, if well distributed
and monitored, can guide the team's athletic performance. In this framework of processes, based on relevant scientific concepts and research, this presentation discusses how physical fitness and sports form can be adequately improved in
basketball players.
Keywords: basketball, periodization, biomotor capabilities, physical fitness, sport form
Basketball: Scientific Basis of Strength TrainingAdriano Vretaros
ABSTRACT
Muscle strength and power is present in various motor tasks performed by basketball players. Strength and conditioning coaches must have a deep understanding of the scientific basis of strength training to guide their work. Strength training is considered the foundation for the development of other biomotor capabilities. The manifestations of strength (anatomical adaptation, hypertrophy, maximum strength, power and power endurance) must be appropriately periodized to be able to monitor the control of training loads, minimizing fatigue and the risk of injury. Anatomical adaptation is a primary work that may perhaps be neglected. Muscle hypertrophy makes the basketball player stronger to withstand collisions and take advantage against smaller and weaker players. Maximum strength training is a prerequisite for greater power gains. Power allows the athlete to perform explosive actions efficiently. Power endurance training makes it possible that the muscle power can be maintained with lower fatigue levels. The particularities of each manifestation of strength are discussed in order to improve athletic performance in basketball.
Keywords: strength training, basketball, sport science, sports performance, athletic performance
The Durable Functions extension to Azure Functions allows developers to build workflows using higher level abstractions. But what is really going on under the hood? It can be useful to know how all the pieces connect in case you are every trying to solve a trickier issue.
In this presentation, we will take a deep dive into the internals of the Durable Functions extension and the Durable Task framework. In addition to the default Azure Storage durability provider, we will look at the other officially supported providers and how they differ in their implementations.
The Durable Functions extension to Azure Functions allows developers to build workflows using higher level abstractions. But what is really going on under the hood? It can be useful to know how all the pieces connect in case you are every trying to solve a trickier issue.
In this presentation, we will take a deep dive into the internals of the Durable Functions extension and the Durable Task framework. In addition to the default Azure Storage durability provider, we will look at the other officially supported providers and how they differ in their implementations.
Come gestire workflow complessi con Azure Durable Functions, un nuovo framework che consente di gestire functions complesse e scalare le proprie applicazioni.
Thread vs Process
scheduling
synchronization
The thread begins execution with the C/C run-time library startup code.
The startup code calls your main or WinMain and execution continues until the main function returns and the C/C library code calls ExitProcess.
Reflection is the ability of a managed code to read its own metadata for the purpose of finding assemblies, modules and type information at runtime. The classes that give access to the metadata of a running program are in System.Reflection.
System.Reflection namespace defines the following types to analyze the module's metadata of an assembly:
Assembly, Module, Enum, ParameterInfo, MemberInfo, Type, MethodInfo, ConstructorInfo, FieldInfo, EventInfo, and PropertyInfo
Give your little scripts big wings: Using cron in the cloud with Amazon Simp...Amazon Web Services
Most developers write them and every company has them – a vast library of small and large scripts that are designed to run on a scheduled basis. These background angels help keep the lights on and the doors open. They’ve been built up over time and are forgotten little heroes that are only remembered when the machines they live on fail. They are scattered throughout a company’s IT infrastructure and do important things.
In this session, we will explain how to use Ruby on Simple Workflow to quickly build a system that schedules scripts, runs them on time, retries them if they fail, and stores the history of their execution. You will walk away from this session with an understanding of how Simple Workflow brings resiliency, concurrency, and tracking to your applications.
Reactive Development: Commands, Actors and Events. Oh My!!David Hoerster
Distributed applications are becoming more popular with the increasing popularity of microservices (however you want to define that term). But the principles of distributed application development are key if you want to build a system that is resilient, responsive, elastic and maintainable. In this workshop, we’ll review the principles of CQRS and the Reactive Manifesto, and how they complement each other. We’ll build an application that can handle a large stream of data, and allow users to still have a responsive experience while interacting with real-time and near-real-time data.
We’ll look at Akka.NET as the workhorse inside your services, and how the principles of CQRS can help with your service-to-service communications.
We’ll also look at how Event Sourcing can aid in managing your domain state, and how an event stream can be used to project data for your system for a number of different uses. We’ll build our own simple event store, but also look at commercially available stores, too.
This session will focus on using Akka.NET along with a few other tools and technologies, such as EventStore and MongoDB. The concepts learned in this session will be applicable to a number of different tools, technologies and languages.
Manage your devices with Azure IoT...and moreMarco Parenzan
Uno dei vantaggi nell'adottare il servizio Azure IoT Hub è quello di poter gestire il ciclo di vita dei dispositivi IoT.
Parleremo del registro dei dispositivi, dell'identità dei identità, con chiavi simmetriche o certificati, o TPM. E parleremo di moduli.
Parleremo di procedure di provisioning per gestire lotti di device da implementare.
E parleremo anche di device complessi quali i gateway per gestire elaborazione locale con Azure IoT Edge.
Serverless architectures let you build and deploy applications and services with infrastructure resources that require zero administration. In the past, you had to provision and scale servers to run your application code, install and operate distributed databases, and build and run custom software to handle API requests. Now, AWS provides a stack of scalable, fully-managed services that eliminates these operational complexities.
In this session, you will learn about the benefits of serverless architectures and the basics of the serverless stack AWS provides. We will also walk through how you can use serverless architectures for everything from data processing to mobile and web backends.
AWS DevDay San Francisco, June 21, 2016.
Presenter: Jeremy Edberg, Co-Founder, CloudNative, & AWS Community Hero
You can find the first part of this presentation here: https://www.slideshare.net/secret/pAvK8Qd9f07oa
This presentation takes a deep dive into how the Million Song Library, a microservices-based application, was built using the Netflix Stack, Cassandra and Datastax.
To learn more about Million Song Library and its components visit the project on GitHub: https://github.com/kenzanlabs/million-song-library
Lea
Using feature flags in an ASP.NET Core app on AzureJoonas Westlin
Larger features may take a long time to develop, but you still want to deploy production updates during development. Or maybe you want the users to be able to preview upcoming features? Either way, feature flags can resolve the issue.
In this presentation we take a look at using feature flags in an ASP.NET Core application running in Azure App Service. We use the Microsoft.FeatureManagement library to support both development-time feature flags and user-specific preview feature flags. The Azure App Configuration service's feature flag support is also explored.
Zero Credential Development with Managed IdentitiesJoonas Westlin
Keys are always needed to access services in Azure and beyond. Storing and managing keys presents many problems, for example rotating and disabling them. Keys often also allow blanket access to the service with no way to limit it. Sometimes there is only one key that needs to be shared by services, so you won't have any way to disable access from one individually.
In this talk we will go through Managed Identities for Azure Resources, how they work, and how you can use them to use Azure services in a secure way without having to manage any keys yourself.
We will go through a demo application which uses various Azure services through a managed identity, removing the need to use keys entirely. The source code will be available to the audience so they have samples that they can use to implement managed identities in their own applications.
More Related Content
Similar to Building a document e-signing workflow with Azure Durable Functions
The Durable Functions extension to Azure Functions allows developers to build workflows using higher level abstractions. But what is really going on under the hood? It can be useful to know how all the pieces connect in case you are every trying to solve a trickier issue.
In this presentation, we will take a deep dive into the internals of the Durable Functions extension and the Durable Task framework. In addition to the default Azure Storage durability provider, we will look at the other officially supported providers and how they differ in their implementations.
The Durable Functions extension to Azure Functions allows developers to build workflows using higher level abstractions. But what is really going on under the hood? It can be useful to know how all the pieces connect in case you are every trying to solve a trickier issue.
In this presentation, we will take a deep dive into the internals of the Durable Functions extension and the Durable Task framework. In addition to the default Azure Storage durability provider, we will look at the other officially supported providers and how they differ in their implementations.
Come gestire workflow complessi con Azure Durable Functions, un nuovo framework che consente di gestire functions complesse e scalare le proprie applicazioni.
Thread vs Process
scheduling
synchronization
The thread begins execution with the C/C run-time library startup code.
The startup code calls your main or WinMain and execution continues until the main function returns and the C/C library code calls ExitProcess.
Reflection is the ability of a managed code to read its own metadata for the purpose of finding assemblies, modules and type information at runtime. The classes that give access to the metadata of a running program are in System.Reflection.
System.Reflection namespace defines the following types to analyze the module's metadata of an assembly:
Assembly, Module, Enum, ParameterInfo, MemberInfo, Type, MethodInfo, ConstructorInfo, FieldInfo, EventInfo, and PropertyInfo
Give your little scripts big wings: Using cron in the cloud with Amazon Simp...Amazon Web Services
Most developers write them and every company has them – a vast library of small and large scripts that are designed to run on a scheduled basis. These background angels help keep the lights on and the doors open. They’ve been built up over time and are forgotten little heroes that are only remembered when the machines they live on fail. They are scattered throughout a company’s IT infrastructure and do important things.
In this session, we will explain how to use Ruby on Simple Workflow to quickly build a system that schedules scripts, runs them on time, retries them if they fail, and stores the history of their execution. You will walk away from this session with an understanding of how Simple Workflow brings resiliency, concurrency, and tracking to your applications.
Reactive Development: Commands, Actors and Events. Oh My!!David Hoerster
Distributed applications are becoming more popular with the increasing popularity of microservices (however you want to define that term). But the principles of distributed application development are key if you want to build a system that is resilient, responsive, elastic and maintainable. In this workshop, we’ll review the principles of CQRS and the Reactive Manifesto, and how they complement each other. We’ll build an application that can handle a large stream of data, and allow users to still have a responsive experience while interacting with real-time and near-real-time data.
We’ll look at Akka.NET as the workhorse inside your services, and how the principles of CQRS can help with your service-to-service communications.
We’ll also look at how Event Sourcing can aid in managing your domain state, and how an event stream can be used to project data for your system for a number of different uses. We’ll build our own simple event store, but also look at commercially available stores, too.
This session will focus on using Akka.NET along with a few other tools and technologies, such as EventStore and MongoDB. The concepts learned in this session will be applicable to a number of different tools, technologies and languages.
Manage your devices with Azure IoT...and moreMarco Parenzan
Uno dei vantaggi nell'adottare il servizio Azure IoT Hub è quello di poter gestire il ciclo di vita dei dispositivi IoT.
Parleremo del registro dei dispositivi, dell'identità dei identità, con chiavi simmetriche o certificati, o TPM. E parleremo di moduli.
Parleremo di procedure di provisioning per gestire lotti di device da implementare.
E parleremo anche di device complessi quali i gateway per gestire elaborazione locale con Azure IoT Edge.
Serverless architectures let you build and deploy applications and services with infrastructure resources that require zero administration. In the past, you had to provision and scale servers to run your application code, install and operate distributed databases, and build and run custom software to handle API requests. Now, AWS provides a stack of scalable, fully-managed services that eliminates these operational complexities.
In this session, you will learn about the benefits of serverless architectures and the basics of the serverless stack AWS provides. We will also walk through how you can use serverless architectures for everything from data processing to mobile and web backends.
AWS DevDay San Francisco, June 21, 2016.
Presenter: Jeremy Edberg, Co-Founder, CloudNative, & AWS Community Hero
You can find the first part of this presentation here: https://www.slideshare.net/secret/pAvK8Qd9f07oa
This presentation takes a deep dive into how the Million Song Library, a microservices-based application, was built using the Netflix Stack, Cassandra and Datastax.
To learn more about Million Song Library and its components visit the project on GitHub: https://github.com/kenzanlabs/million-song-library
Lea
Similar to Building a document e-signing workflow with Azure Durable Functions (20)
Using feature flags in an ASP.NET Core app on AzureJoonas Westlin
Larger features may take a long time to develop, but you still want to deploy production updates during development. Or maybe you want the users to be able to preview upcoming features? Either way, feature flags can resolve the issue.
In this presentation we take a look at using feature flags in an ASP.NET Core application running in Azure App Service. We use the Microsoft.FeatureManagement library to support both development-time feature flags and user-specific preview feature flags. The Azure App Configuration service's feature flag support is also explored.
Zero Credential Development with Managed IdentitiesJoonas Westlin
Keys are always needed to access services in Azure and beyond. Storing and managing keys presents many problems, for example rotating and disabling them. Keys often also allow blanket access to the service with no way to limit it. Sometimes there is only one key that needs to be shared by services, so you won't have any way to disable access from one individually.
In this talk we will go through Managed Identities for Azure Resources, how they work, and how you can use them to use Azure services in a secure way without having to manage any keys yourself.
We will go through a demo application which uses various Azure services through a managed identity, removing the need to use keys entirely. The source code will be available to the audience so they have samples that they can use to implement managed identities in their own applications.
Zero Credential Development with Managed IdentitiesJoonas Westlin
Keys are always needed to access services in Azure and beyond. Storing and managing keys presents many problems, for example rotating and disabling them. Keys often also allow blanket access to the service with no way to limit it. Sometimes there is only one key that needs to be shared by services, so you won't have any way to disable access from one individually.
In this talk we go through Managed Identities for Azure Resources, how they work, and how you can use them to use Azure services in a secure way without having to manage any keys yourself. We will go through a demo application which uses various Azure services through a managed identity, removing the need to use keys entirely.
Zero credential development with managed identitiesJoonas Westlin
Introduction to Managed Identities in Azure, what they are and how they work. Also goes through what services they can be used with in Azure, how you can use services without any keys or secrets.
Zero credential development with managed identitiesJoonas Westlin
Introduction to Managed Identities in Azure, what they are and how they work. Also goes through what services they can be used with in Azure, how you can use services without any keys or secrets.
Zero Credential Development with Managed Identities for Azure resourcesJoonas Westlin
Introduction to Managed Identities in Azure, what they are and how they work. Also goes through what services they can be used with in Azure, how you can use services without any keys or secrets.
Zero Credential Development with Managed IdentitiesJoonas Westlin
Keys are always needed to access services in Azure and beyond. Storing and managing keys presents many problems, for example rotating and disabling them. Keys often also allow blanket access to the service with no way to limit it. Sometimes there is only one key that needs to be shared by services, so you won't have any way to disable access from one individually. In this talk we will go through Managed Identities for Azure Resources, how they work, and how you can use them to use Azure services in a secure way without having to manage any keys yourself. We will go through a demo application which uses various Azure services through a managed identity, removing the need to use keys entirely. The source code will be available to the audience so they have samples that they can use to implement managed identities in their own applications.
Goes through 7 scenarios where a fictional developer Bob chooses ways to achieve them that work, but have some flaws in them. Must-have knowledge for any developer working with Azure Active Directory.
My presentation from the 8th meeting of Finland Azure User Group where I went through basic and intermediate concepts of Azure Active Directory for software developers.
Code reviews are vital for ensuring good code quality. They serve as one of our last lines of defense against bugs and subpar code reaching production.
Yet, they often turn into annoying tasks riddled with frustration, hostility, unclear feedback and lack of standards. How can we improve this crucial process?
In this session we will cover:
- The Art of Effective Code Reviews
- Streamlining the Review Process
- Elevating Reviews with Automated Tools
By the end of this presentation, you'll have the knowledge on how to organize and improve your code review proces
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
Even though at surface level ‘java.lang.OutOfMemoryError’ appears as one single error; underlyingly there are 9 types of OutOfMemoryError. Each type of OutOfMemoryError has different causes, diagnosis approaches and solutions. This session equips you with the knowledge, tools, and techniques needed to troubleshoot and conquer OutOfMemoryError in all its forms, ensuring smoother, more efficient Java applications.
Into the Box Keynote Day 2: Unveiling amazing updates and announcements for modern CFML developers! Get ready for exciting releases and updates on Ortus tools and products. Stay tuned for cutting-edge innovations designed to boost your productivity.
How to Position Your Globus Data Portal for Success Ten Good PracticesGlobus
Science gateways allow science and engineering communities to access shared data, software, computing services, and instruments. Science gateways have gained a lot of traction in the last twenty years, as evidenced by projects such as the Science Gateways Community Institute (SGCI) and the Center of Excellence on Science Gateways (SGX3) in the US, The Australian Research Data Commons (ARDC) and its platforms in Australia, and the projects around Virtual Research Environments in Europe. A few mature frameworks have evolved with their different strengths and foci and have been taken up by a larger community such as the Globus Data Portal, Hubzero, Tapis, and Galaxy. However, even when gateways are built on successful frameworks, they continue to face the challenges of ongoing maintenance costs and how to meet the ever-expanding needs of the community they serve with enhanced features. It is not uncommon that gateways with compelling use cases are nonetheless unable to get past the prototype phase and become a full production service, or if they do, they don't survive more than a couple of years. While there is no guaranteed pathway to success, it seems likely that for any gateway there is a need for a strong community and/or solid funding streams to create and sustain its success. With over twenty years of examples to draw from, this presentation goes into detail for ten factors common to successful and enduring gateways that effectively serve as best practices for any new or developing gateway.
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
Designing for Privacy in Amazon Web ServicesKrzysztofKkol1
Data privacy is one of the most critical issues that businesses face. This presentation shares insights on the principles and best practices for ensuring the resilience and security of your workload.
Drawing on a real-life project from the HR industry, the various challenges will be demonstrated: data protection, self-healing, business continuity, security, and transparency of data processing. This systematized approach allowed to create a secure AWS cloud infrastructure that not only met strict compliance rules but also exceeded the client's expectations.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
Modern design is crucial in today's digital environment, and this is especially true for SharePoint intranets. The design of these digital hubs is critical to user engagement and productivity enhancement. They are the cornerstone of internal collaboration and interaction within enterprises.
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
Building a document e-signing workflow with Azure Durable Functions
1. Building a document e-
signing workflow with
Durable Functions
Joonas Westlin
2. Speaker Intro
• Joonas Westlin
• Developer / Architect @ Zure
• Azure MVP
• Global #9 on Stack Overflow for Azure
answers
@JoonasWestlin
joonasw.net
3. Contents
• An e-signing workflow
• Workflows? Orchestrations? Activities?
• What is Durable Functions and what can you use it for?
• Demo: Building the signing workflow
• Useful things to know
• Conclusions and Q&A
• Links
4. An e-signing workflow
User uploads
document
Send email to
signers
Wait for signer
response
Create signed
document
Send
completion
email
Users download
signed
document
5. Workflows? Orchestrations? Activities?
• A workflow is an orchestrated sequence of activities that describes a process
• An activity is a step in a workflow
• Orchestration refers to automatic management of workflows
• In this context at least
6. What is Durable Functions?
• Framework built on Azure Functions and the Durable Task framework
• Build durable serverless workflows in C# / JavaScript
• State persisted in Table Storage -> Durable
• Storage Queue messages used under the hood to communicate
• Three types of functions: Orchestrator, Activity, and Entity
• Orchestrators can be started by any other Azure Function
12. Why orchestrators and activities?
• Orchestrator functions:
• Define steps of the workflow
• State is persisted in history table
• Code is replayed as the workflow progresses
• Require code to be deterministic
• Can start sub-orchestrators and activities
• Activity functions:
• Steps in the workflow
• Can do I/O
• Can be non-deterministic
13. Code replay
• When an orchestrator hits an await/yield for a sub-orchestrator or activity:
• Message is posted to a queue
• The orchestrator is suspended
• Once result is available, a queue message wakes up the orchestrator
• The code is executed again; this time it will continue past the await/yield call
• History table tells it that the activity was completed
• Can check if we are currently replaying from the context object
14. Sample orchestrator
Execution history
Execution started
Orchestrator started
Activity scheduled
Orchestrator completed
Activity completed
Orchestrator started
Activity scheduled
Orchestrator completed
Activity completed
Orchestrator started
Activity scheduled
Orchestrator completed
Activity completed
Orchestrator started
Orchestrator completed
Execution completed
15. Determinism
• Required in orchestrator function code due to replay
• With the same inputs, the same code path is taken and the same output is produced
• DateTime.UtcNow is non-deterministic, because it gives a different result
depending on time
• Other examples of things you cannot do/use:
• Randomness
• Guid.NewGuid()
• I/O, database queries
• CPU-intensive computation, multi-threading, thread blocking
• Orchestration context object has deterministic versions of some of these
• HTTP API calls are also possible, but flexibility is limited
16. Sample activity
• Activities are where
you will do:
• Database queries
• API calls with
maximum flexibility
• Other non-
deterministic things
• Their results are
persisted in the
history table
17. Workflow that we will build
Waitfor
signaturesub-
orchestrator
Mainorchestrator
Mark workflow
started in database
Send emails to
signers
Set instance id to
database
Wait for signing
event
Signer
responded on
time?
Yes
Set signing data in
database
Did allsigners
sign?
No
No
Send completion
email
Start
Yes
Create signed
document
Mark workflow
completed in
database
End
20. Error handling
• Use try-catch around activity / sub-orchestrator calls to catch errors thrown
in them
• Compensate or re-throw
• Use retries: CallActivityWithRetryAsync / CallSubOrchestratorWithRetryAsync
• Retry with optional back-off coefficient
21. Monitoring Durable Functions
• Application Insights works, but end-to-
end tracing does not work correctly
• Use context.CreateReplaySafeLogger()
to prevent duplicate log messages
22. Use the .NET analyzers
• Microsoft.Azure.WebJobs.Extensions.DurableTask.Analyzers
• Gives you warnings if you:
• Break determinism in orchestrators
• Use the wrong parameter type for activities or sub-orchestrators
• And much more
23. Handling code complexity
• Divide and conquer
• Split complex orchestrator functions into sub-orchestrators
• Can also split into methods; Use [Deterministic] on them
• A long activity function might be doing too much work, split it
24. Updating Durable Functions
• When deploying new versions, you must think about existing orchestrations
• Having the orchestrator code change would be a violation of determinism
• Versioning strategies:
• Let the old orchestrations fail by changing the function name
• Create the new version side-by-side as a new function and delete the old one later
• Deploy new function app
• https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-
versioning
25. Summary and takeaways
• Build workflows in code with Durable Functions
• Implement patterns like function chaining, fan-out / fan-in, and human
interaction
• Use orchestrator functions to build the overall workflow and call activities
• Orchestrator code must be deterministic
• Use activity functions to do database queries, send emails, heavy
computation etc.
• Monitoring is currently not the best but is improving
• Be careful when updating orchestrators