This repository illustrates the road to orleans with practical, real-life examples as .NET solutions. From most basic, to more advanced techniques. The code is written using .NET 5 and was tested on MacOS (Catalina 10.15.7) and, wherever docker is supported, Linux (Alpine 3.12).
- IDE: build + run (first the cluster, then the client)
run-[client/silo]-[docker/local].sh
Silo dashboards are available by default on localhost:8080
unless configured otherwise in the code/dockerfile
/run-[client/silo]-[docker/local].sh
. Additionally, Datadog APM support is illustrated in solution 3b.
solution | description | docker support | clustering | clustered silos | grains | clients | *visual studio code support | *remote containers support |
---|---|---|---|---|---|---|---|---|
solution1 | One basic silo, no grains. | ✅ | - | 1 | 0 | 0 | ✅ | ✅ |
solution2 | One basic silo, one grain, one console client. | - | - | 1 | 1 C# grain | 1 - console | ✅ | ✅ |
solution3 | One basic silo, one grain, one console client, everything containerized. | ✅ | - | 1 | 1 C# grain | 1 - console | ✅ | ✅ |
solution3a | Solution3 + grain persistence. | ✅ | - | 1 | 1 C# grain | 1 - console | ✅ | ✅ |
solution3b | Solution3 + datadog APM. | ✅ | - | 1 | 1 C# grain | 1 - console | ✅ | ✅ |
solution4 | First in-memory clustering example. Many silos, many clients. | ✅ | in-memory | n | 1 C# grain | n - console | ✅ | ✅ |
solution5 | Solution4 where the grain interfaces F# library code. Additionally, F# unit tests covering the F# library code. | ✅ | in-memory | n | 1 C# grain interfacing F# library code. | n - console | ||
solution6 | Solution5 where the cluster is being called from a Web API. | ✅ | in-memory | n | 1 C# grain interfacing F# library code | n - web api | ||
solution7 | Solution6 + FeatureManagement, dependency injection in grains, unit tests for grains using OrleansTestKit. | ✅ | in-memory | n | 1 C# grain interfacing F# library code | n - web api | ||
solution8 | Solution7 + Persistent Membership Table in DynamoEB, ECS hosting, CloudFormation Template. | ✅ | Dynamo | n | 1 C# grain interfacing F# library code | n - web api |
*visual studio code support:
[ctrl/cmd]+shift+b
: builds selected projectsf5
: runs selected projects
*remote containers support: ability to develop/build/run/debug code inside containers. This is to support those who just want to quickly pull the repository code and experiment with it with e.g. Visual Studio Code. Code + batteries included.
- https://gitter.im/road-to-orleans/community - road to orleans gitter
- https://github.com/dotnet/orleans - orleans repository
- https://dotnet.github.io/orleans/ - orleans documentation
- https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/Orleans20Best20Practices.pdf - orleans best practices
- https://gitter.im/dotnet/orleans/ - orleans gitter
- https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/Orleans-MSR-TR-2014-41.pdf - virtual actors paper
- https://github.com/OrleansContrib - orbiting repositories (e.g. orleans dashboard)
- https://github.com/PiotrJustyna/FeatureManagementSandbox - more involved use cases for FeatureManagement
- https://youtu.be/GKXiGhFBd90 - observability: logs, tracing, metrics
- https://youtu.be/R0ODfwU6MzQ - orleans: deep dive