From 97792ed2bcb85f156fcdf69b030cf4946b0a9d98 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 30 Jan 2023 15:21:07 -0600 Subject: [PATCH] update overview w info from Ryan and community call demo Signed-off-by: Hannah Hunter --- .../workflow/howto-workflow.md | 4 +- .../workflow/workflow-overview.md | 51 +++++++++++++----- .../workflows-architecture-k8s.png | Bin 0 -> 34515 bytes 3 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 daprdocs/static/images/workflow-overview/workflows-architecture-k8s.png diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-workflow.md index 4ffe64cc0..a6d29ce3f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-workflow.md @@ -11,9 +11,7 @@ Now that you've read about [the workflow building block]({{< ref workflow-overvi - Use the a worfklow component - Configure or register a workflow component. -## Built-in workflow vs external workflows - -When you run `dapr init`, Dapr creates a default built-in workflow component. This component is written in Go and implements workflow instances as actors to promote placement and scalability. +When you run `dapr init`, Dapr creates a default workflow runtime. This component is written in Go and implements workflow instances as actors to promote placement and scalability. [Insert HL diagram] diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md index 42418daf8..9d8bc5b0c 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md @@ -6,29 +6,56 @@ weight: 1000 description: "Overview of the workflow building block" --- -With workflows, you can orchestrate tasks or business logic within your application, making them reliable and restartable. Workflows provide a programming model for authoring code that abstracts away the complexities of messaging, state management, and failure handling. +{{% alert title="Note" color="primary" %}} +The Workflow building block is currently in alpha state supporting .NET. +{{% /alert %}} -## Workflow building block +The Dapr Workflow building block strives to make orchestrating logic for messaging, state management, and failure handling across various microservices easier for developers. Prior to adding workflows to Dapr, you'd often need to build ad-hoc workflows behind-the-scenes in order to bridge that gap. -The workflow building block: +The durable, resilient Dapr Workflow building block: - Provides a workflow API for running workflows -- An built-in workflow runtime to write Dapr workflows (of type workflow.dapr) -- Integrates with various workflow runtimes as components, for example Temporal workflows. +- Offers a built-in workflow runtime to write Dapr workflows (of type `workflow.dapr`) +- Integrates with various workflow runtimes as components (for example, Temporal workflows) -*To Do:* -- *Add diagram of how workflow API works?* -- *Add explaination of how the API works* -- *[Reference](https://docs.dapr.io/developing-applications/building-blocks/service-invocation/service-invocation-overview/)* +The Workflow building block can assist with scenarios like: +- Order processing involving inventory management, payment systems, shipping, etc. +- HR onboarding workflows coordinating tasks across multiple departments and participatns +- Orchestrating the roll-out of digital menu updates in a national restaurant chain +- Image processing workflows involving API-based classification and storage ---- +## How it works + +The Dapr Workflow engine runs in the Dapr sidecar and consists of: +- SDKs for authoring workflows in code, using any language +- APIs for managing workflows (start, query, suspend/resume, terminate) + +The workflow engine is internally powered by Dapr's actor runtime. In the following diagram demonstrates the Dapr Workflow architecture in Kubernetes mode: + +Diagram showing how the workflow architecture works in Kubernetes mode + +Essentially, to use the Dapr Workflow building block, you write workflow code in your application using the SDK and connect to the sidecar using gRPC stream. + +Notice that the engine itself is embedded directly into the sidecar and implemented by the `durabletask-go` framework library. This framework allows you to swap out different storage providers, including a storage provider created specifically for Dapr that leverages internal actors behind the scenes. Since Dapr Workflow uses actors, you can store workflow state in variety of Dapr-supported state stores, like Redis, CosmosDB, etc. ## Features -Start, Terminate and X any workflow +### HTTP/gRPC API calls to start or terminate any workflow +Once you create an application with workflow code and run it with Dapr, you can make HTTP/gRPC calls to Dapr to run specific tasks/workflows that reside in the application. Each individual workflow can be started or terminated through a POST request. + +You can also get information on the workflow (even if it has been terminated or it finished naturally) through a GET request. This GET request will send back information, such as: +- The instance ID of the workflow +- The time that the run started +- The current running status, whether that be “Running”, “Terminated”, or “Completed” + +## Watch the demo + +Watch [this video for an overview on Dapr Workflows](https://youtu.be/s1p9MNl4VGo?t=131): + + ## Next steps - [Learn how to set up a workflow]({{< ref howto-workflow.md >}}) -- [Supported workflows]({{< ref supported-workflows.md >}}) +- [Supported workflows]({{< ref supported-workflows.md >}}) \ No newline at end of file diff --git a/daprdocs/static/images/workflow-overview/workflows-architecture-k8s.png b/daprdocs/static/images/workflow-overview/workflows-architecture-k8s.png new file mode 100644 index 0000000000000000000000000000000000000000..394891e0563d922d96b00c63d28baaffe333dff7 GIT binary patch literal 34515 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 literal 0 HcmV?d00001