This repo contains Dapr applications to demonstrate Dapr resiliency policies and durable execution with Dapr workflow.
Running the demos with Demo Time in this repo is recommended since this gives more context about:
- failure and distributed computing challenges
- the way Dapr provides resiliency
- what durable execution is
- how the Dapr Workflow implements durable execution
- Prequisites
- Run the Resiliency demo with Demo Time
- ResiliencyDemo
- Dapr Reliability Advisor in Conductor Free
- Run the Durable Execution & Workflow demo with Demo Time
- WorkflowDemo
- Resources
You can choose to run the demos locally, which requires that you install the required dependencies yourself. Or you use the provided devcontainer that contains all required dependencies.
Ensure you have these installed on your machine:
- .NET 8
- Dapr CLI
- Docker Desktop
- VSCode - Although other IDEs can be used to view the code, some VSCode specific extensions are used (such as DemoTime) to help guide you through the codebase.
Ensure you have these installed on your machine:
- Docker Desktop
- VSCode - Although other IDEs can be used to view the code, some VSCode specific extensions are used (such as Demo Time) to help guide you through the codebase.
- Dev Containers Extension to run the devcontainer in VS Code.
The devcontainer configuration is using a .NET 8 image and includes the Dapr CLI and the required VS Code extensions.
Clone the dapr-resiliency-and-durable-execution repo to your local machine.
Open the cloned repo in VSCode and accept the suggested VSCode extensions or choose to open the repo in the devcontainer.
Using the Demo Time panel in the VSCode explorer, start the 4 - Dapr Resiliency demo:
The ResiliencyDemo consists of two applications, AppA and AppB, and a state store.
Communication between AppA and AppB can be done using HTTP or Pub/Sub.
Service invocation
graph LR
A{{AppA}}
B{{AppB}}
State[(KV Store)]
A --HTTP--> B
B --> State
Pub/sub
graph LR
A{{AppA}}
B{{AppB}}
MB[Message Broker]
State[(KV Store)]
A .-> MB .-> B
B --> State
-
Navigate to the ResiliencyDemo folder in the terminal:
cd ResiliencyDemo
-
Run the ResiliencyDemo apps using the Dapr CLI:
dapr run -f .
-
Open the local.http file in the VSCode editor and execute the HTTP requests to the ResiliencyDemo apps.
Diagrid Conductor Free is a free tool developers can use to visualize, troubleshoot, and optimize Dapr workloads on Kubernetes. It includes an Advisor that provides recommendations on how to improve the reliability of your Dapr applications.
Using the Demo Time panel in the VSCode explorer, start the 3 - Durable Execution & Workflow demo:
graph LR
KV[(Inventory)]
WApp{{WorkflowApp}}
SApp{{ShippingApp}}
WApp --> SApp
WApp --> KV
sequenceDiagram
actor U as User
participant DC as DaprClient
participant W as ValidateOrderWorkflow
participant UI as UpdateInventory
participant GSC as GetShippingCost
participant RS as RegisterShipment
participant UU as UndoUpdateInventory
participant KV as KV Store
U ->> DC: ScheduleNewWorkflowAsync
DC ->> W: Schedules instance
DC -->> U: Accepted
W ->> UI: CallActivity
UI ->> KV: GetState
KV -->> UI: Response
UI ->> KV: SaveState
UI -->> W: Response
alt IsSuffientStock
loop All Shipper Services
W ->> GSC: CallActivity
GSC -->> W: Response
end
W ->> W: GetCheapestShipper
W ->> RS: CallActivity
RS -->> W: Response
alt Exception from RegisterShipment
W ->> UU: CallActivity
UU ->> KV: GetState
UU ->> KV: UpdateState
UU ->> W: Response
end
end
-
Navigate to the WorkflowDemo folder in the terminal:
cd WorkflowDemo
-
Run the WorkflowDemo apps using the Dapr CLI:
dapr run -f .
-
Open the local.http file in the VSCode editor and execute the HTTP requests to the WorkflowDemo apps.