All Projects → OrleansContrib → Orleans.activities

OrleansContrib / Orleans.activities

Licence: apache-2.0
Workflow Foundation (.Net 4.x System.Activities workflows) over Microsoft Orleans framework, providing stable, long-running, extremely scalable processes with XAML designer support.

Projects that are alternatives of or similar to Orleans.activities

Orleans.clustering.kubernetes
Orleans Membership provider for Kubernetes
Stars: ✭ 140 (+129.51%)
Mutual labels:  orleans, actor-model
road-to-orleans
This repository illustrates the road to orleans with practical, real-life examples. From most basic, to more advanced techniques.
Stars: ✭ 55 (-9.84%)
Mutual labels:  actor-model, orleans
Orleans.CosmosDB
Orleans providers for Azure Cosmos DB
Stars: ✭ 36 (-40.98%)
Mutual labels:  actor-model, orleans
Minecase
Minecraft server based on Orleans
Stars: ✭ 581 (+852.46%)
Mutual labels:  orleans, actor-model
serverless-orleans
A demonstration of local development and debugging + serverless Azure deployment of a Dockerized Orleans application.
Stars: ✭ 21 (-65.57%)
Mutual labels:  actor-model, orleans
Orleans
Orleans is a cross-platform framework for building distributed applications with .NET
Stars: ✭ 8,131 (+13229.51%)
Mutual labels:  orleans, actor-model
Orleans.providers.mongodb
A MongoDb implementation of the Orleans Providers: Membership, Storage and Reminders.
Stars: ✭ 51 (-16.39%)
Mutual labels:  orleans
Xene
A distributed workflow runner focusing on performance and simplicity.
Stars: ✭ 56 (-8.2%)
Mutual labels:  workflow
Argo Workflows
Workflow engine for Kubernetes
Stars: ✭ 10,024 (+16332.79%)
Mutual labels:  workflow
Xible
Visualize your workflow
Stars: ✭ 49 (-19.67%)
Mutual labels:  workflow
Apple Automation
iOS/macOS 自动化,效率玩法探索。
Stars: ✭ 60 (-1.64%)
Mutual labels:  workflow
Kickstarts
💻 No setup, just development!
Stars: ✭ 57 (-6.56%)
Mutual labels:  workflow
River Admin
🚀 A shiny admin interface for django-river built with DRF, Vue & Vuetify
Stars: ✭ 55 (-9.84%)
Mutual labels:  workflow
Ptii
Ptolemy II is an open-source software framework supporting experimentation with actor-oriented design.
Stars: ✭ 53 (-13.11%)
Mutual labels:  actor-model
Idris Elixir
A code-generator for Idris that targets Elixir
Stars: ✭ 56 (-8.2%)
Mutual labels:  actor-model
Yetiforcecrm
Our team created for you one of the most innovative CRM systems that supports mainly business processes and allows for customization according to your needs. Be ahead of your competition and implement YetiForce!
Stars: ✭ 1,056 (+1631.15%)
Mutual labels:  workflow
Pwrake
Parallel Workflow extension for Rake, runs on multicores, clusters, clouds.
Stars: ✭ 57 (-6.56%)
Mutual labels:  workflow
Generator Buildabanner
Yeoman workflow to get a standard or DoubleClick banner started quickly.
Stars: ✭ 49 (-19.67%)
Mutual labels:  workflow
Zoon
The zoon R package
Stars: ✭ 54 (-11.48%)
Mutual labels:  workflow
Cwl Svg
A library for generating an interactive SVG visualization of CWL workflows
Stars: ✭ 57 (-6.56%)
Mutual labels:  workflow

Orleans logo Orleans.Activities

Workflow Foundation (.Net 4.x System.Activities workflows) over Microsoft Orleans framework to provide stable, long-running, extremely scalable processes with XAML designer support.

Gitter Waffle

Stable: GitHub version NuGet version

Master: Build status AppVeyor project feed (NuGet source)

Guidelines

This project is licensed under the Apache License.

Important

Only in case of projects with designed XAML workflows!!!

  • Don’t use Microsoft.NET.Sdk, use old project format (Sdk has no XamlAppDef BuildAction)

  • Use at least VS 15.6 (older VS 15.x Activity designer crashes when Microsoft.Orleans.Core.Abstractions is installed via NuGet 4.x PackageReference tag)

Documentation

  • see the Samples below, they come with tutorial level, detailed descriptions
  • or see my Presentations repo

Concept

Why?

The key concepts behind Workflow Foundation and Microsoft Orleans are very similar, but Microsoft Orleans solves the pain points of Workflow Foundation (WCF and SQL oriented, non-scalable).

Workflow Foundation Microsoft Orleans
Single threaded
Persistent reminders
Stateful
😐 Communication
😐 Storage
Scalability

How?

We kept only the the "good parts" of Workflow Foundation, the WorkflowInstance (a mini Virtual Machine executing the Activities) and replaced everything else with Microsoft Orleans, ie. we replaced WorkflowServiceHost with Microsoft Orleans Grains (stateful actors).

Concept-How

Integrated:

  • Persistence (compatible with legacy workflow extensions)
  • Reminders (compatible with legacy Delay activities)
  • Tracking
  • Designer & Debugger support
  • Nearly all legacy activities are supported (except TransactionScope and WCF messaging activities)

Result?

A typical workflow grain ("domain service" grain) manages operations in other normal grains ("aggregate root" grains) and handles only the process specific data in it's own state.

  • Normal grains typically have long life, they can have event sourced states or can use short-lived Orleans transactions on their interfaces.
  • Workflow grains have a one-shot lifetime, the long-lived transaction they implement.

Concept-Result

Implementation

Overview

This is a very high level view:

  • Each WorkflowGrain is indistinguishable from a normal grain and backed by a WorkflowHost.
  • The WorkflowHost is responsible to handle the lifecycle of the WorkflowInstance, mainly recreate it from a previous persisted state when it aborts.
  • The communication between the WorkflowGrain and the WorkflowHost is based on 2 developer defined interfaces for the incoming and outgoing requests (TWorkflowInterface and TWorkflowCallbackInterface).
    • These interfaces provide the type safe communication with the workflow.
    • Their methods can be referenced from the workflow activities to accept incoming or to initiate outgoing requests.
  • The methods of the TWorkflowInterface and TWorkflowCallbackInterface are independent from the grain's external public interface, you can merge different public requests into one method or vice versa. Or a reentrant grain even can execute (read-only) public interface methods independently from the current running workflow operations.
  • The method's signatures are restricted, their parameters and return values are lazy, async delegates with 1 optional parameter/return value. The delegates executed by the workflow activities if/when they accept them (command pattern).
  • There are design-, build- and static-run-time checks to keep the interfaces and the workflows in sync.
  • Though you can execute complete workflows as methods also.

The goal, is to keep the C# code in the grain, and use the workflow only to decide what to do next. This way we can avoid a steep learning curve to use workflows: the developer doesn't need to write or to understand anything about activities, he/she can build workflows with the provided activities in a designer.

Functionality

Integrated:

  • Persistence (compatible with legacy workflow extensions)
  • Reminders (compatible with legacy Delay activities)
  • Tracking
  • Designer & Debugger support
  • Nearly all legacy activities are supported (except TransactionScope and WCF messaging activities)

Extra implemented features:

  • TAP async API
  • Optionally idempotent request processing for forward recovery
  • Automatic reactivation after failure
  • Workflow can be persisted during processing an incoming request (ReceiveRequestSendResponseScope is not an implicit NoPersistScope)
  • Executing code "in the background" on the tail of the request after the request returns it's response
  • Workflow is informed whether it is running in a reloaded state after failure (to determine necessary recovery)
  • Notification participant extensions (to get notified when the workflow is idle)

Under construction:

  • Tests (currently semi manual, semi automatic MSTest, don't even look at them)
  • More elaborate sample with
    • DI/Autofac
    • Strategy and Humble Object patterns, to show an architecture, where the application logic can be tested independently from Orleans and from Orleans.Activities workflows

Not implemented, help wanted (for design and for implementation):

  • DynamicUpdateMap support (updating loaded workflows to a newer definition version), though the separation of the application logic (the plain C# delegates) and the process (the diagram) results in a very simple workflow diagram, that has a big chance you won't need to update when it runs
  • See all Help Wanted issues

Samples

With tutorial level, detailed descriptions!

HelloWorld - How to communicate with the workflow through custom interfaces.

Arithmetical - How to execute the complete workflow like a method.

Details

You don't need to understand this to use the project! This is for those who want to dig in to the source!

This is still an overview, all the details of the classes are hidden. The goal is to give a map to understand the relations between the classes.

The 2 generated proxies translate the calls between the TWorkflowInterface and TWorkflowCallbackInterface interfaces and the workflow's API, where the methods are identified by their names.

For more details see the detailed comments in the source!

Overview

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].