Exploring Microsoft Orleans: A .NET Developer's Guide

Busy .NET Developer's Guide
to Orleans
 
Objectives
Our goal here is to:
Explore what a "virtual actor" is and how it
works
See how Orleans implements these virtual
actors
Talk about Orleans-centric distributed system
design
MICROSOFT ORLEANS: OVERVIEW
In a nutshell
Microsoft Orleans: Overview
What is it?
actors model for CLR technology stacks
"grains"
stateless or persistent
virtual actors: "always alive" semantics
open-source
https://github.com/microsoft/orleans
used on some sizable projects
Halo 4, Halo 5
ORLEANS CONCEPTS
What's important to know?
Orleans Concepts
Core concepts:
Grain
Silo
Cluster
Host
Orleans Concepts
Grain
"Virtual Actor": Identity + Logic + State
defined observable/"hook"able lifecycle
Single-threaded, serial message receipt
single living instance: "activation"
Orleans Concepts
Grain identity
Objects have implicit identity (memory
address)
Actors use more generalized identity
Orleans grains must have "long-lived" identity
Orleans uses one of five options for identity:
long
GUID
string
GUID + string (compound)
long + string (compound)
Orleans Concepts
Grain state
Grains can be entirely stateless
singletons, in essence
can allow multiple activations
Grains can hold state
state is held across lifetime of server
state can be persisted to external storage
Orleans Concepts
Grain interface
Describes the messaging surface
uses CLR interfaces and async idioms
only type visible to clients
"IDL" for Orleans
Orleans Concepts
Message
bundle of data passed across the wire
binary format; serialized (deep copy)
actual runtime type passed (not declared
type)
Orleans generates "serializers" as part of build
can be invoked 
await
 (preserves order) or
async (no ordering)
Orleans Concepts
Silo
server instance/process, containing grains
manage allocation/lifecycle of grains
provides location transparency
forces "remote-first" mentality
designed to work together in a cluster
defined observable/"hook"able lifecycle
Orleans Concepts
Cluster
collection of silos
responsible for grain placement in Silos
random
local-to-caller (server)
hash-based
activation-count-based
configurable and customizable
Orleans Concepts
Host
process which contains the running server(s)
most often a Console, Service, or ASP.NET app
heavy use of Microsoft Hosting classes
Orleans Concepts
Rules of thumb
Grains always exist
runtime activates them on demand
runtime deactivates them "later" or on request
Everything is a Task or Task-of-T
enforcing/requiring asynchronicity
ORLEANS GETTING STARTED
Zero to Go in....
Orleans Getting Started
Platform requirements
Microsoft .NET (.NET Core 6, 7)
... and a network
Orleans Getting Started
Hello, Orleans
https://github.com/tedneward/Demo-
Orleans/HelloWorld
four projects:
interfaces (IDL)
implementations
client
server/host
any CLR language (most often C#)
Orleans Getting Started
Interfaces
ClassLibrary
requires
Microsoft.Orleans.Core.Abstractions
Microsoft.Orleans.CodeGenerator.MSBuild
Orleans Getting Started
IHelloWorld
public interface IHelloWorld : Orleans.IGrainWithIntegerKey
{
    Task<string> SayHello(string name);
}
Orleans Getting Started
Grains (implementations)
ClassLibrary
requires
Microsoft.Orleans.Core.Abstractions
Microsoft.Orleans.CodeGenerator.MSBuild
Interfaces
Orleans Getting Started
HelloWorld
public class HelloWorld : Orleans.Grain, IHelloWorld
{
    private readonly ILogger _logger;
    public HelloWorld(ILogger<HelloWorld> logger) { _logger = logger; }
    public Task<string> SayHello(string name)
    {
        _logger.LogInformation("SayHello: name = '{name}', ", name);
        return Task.FromResult($"Hello, {name}, welcome to Orleans");
    }
}
Orleans Getting Started
Host
Console
requires
Microsoft.Orleans.Server
(Microsoft.Extensions.Hosting)
(Microsoft.Extensions.Logging.Console)
Interfaces
Grains
Orleans Getting Started
Program.cs
    var builder = new HostBuilder()
        .UseOrleans(c =>
        {
            c.UseLocalhostClustering()
            .Configure<ClusterOptions>(options =>
            {
                options.ClusterId = "dev";
                options.ServiceId = "HelloWorld";
            })
            .ConfigureApplicationParts(
                parts =>
parts.AddApplicationPart(typeof(HelloWorld).Assembly).WithReferences())
            .ConfigureLogging(logging => logging.AddConsole());
        });
    var host = builder.Build();
    await host.StartAsync();
Orleans Getting Started
Client
Console
requires
Microsoft.Orleans.Client
Interfaces
Orleans Getting Started
Client Setup
    var client = new ClientBuilder()
        .UseLocalhostClustering()
        .Configure<ClusterOptions>(options =>
        {
            options.ClusterId = "dev";
            options.ServiceId = "HelloWorld";
        })
        .ConfigureLogging(logging => logging.AddConsole())
        .Build();
    await client.Connect();
    Console.WriteLine("Client successfully connected to silo host \n");
Orleans Getting Started
Client calling host
    var friend = client.GetGrain<IHelloWorld>(0);
    var response = await friend.SayHello("Good morning, HelloGrain!");
ORLEANS BASICS
Implementing Orleans actors
Orleans Basics
Interfaces
must extend an "identity interface"
describes the kind of primary key
IGrainWithGuidKey
IGrainWithIntegerKey
IGrainWithStringKey
IGrainWithGuidCompoundKey
IGrainWithIntegerCompoundKey
methods must return 
Task
Orleans Basics
Grains
must implement grain interface
must extend 
Orleans.Grain
 base class
optionally override
OnActivateAsync
/
OnDeactivateAsy
nc
for notification of activation/deactivation
exceptions will cancel activation
deactivation is not guaranteed (e.g., server crash)
primary key available via 
GetPrimaryKey
Orleans Basics
Grain References
grains are never accessed directly
clients must obtain a "grain reference"
pass identity to
GrainFactory.GetGrain
references can be used as typical .NET objects
More
Other topics
Persistent grains
Timers and reminders
Streams
Heterogenous Silos
Evolving/versioning Grains
Event sourcing
Transactions
Summary
Microsoft Orleans
virtual actor system
built on top of CLR
providing easy language-to-messaging
syntax/semantics
capable of supporting high scale/load
RESOURCES
Where to go to get more
Resources
Code/Github
Orleans OSS repository
https://github.com/dotnet/orleans
Official docs
https://learn.microsoft.com/en-
us/dotnet/orleans/
OrleansContrib
https://github.com/orgs/OrleansContrib
Awesome-Orleans
https://github.com/OrleansContrib/Awesome-
Orleans
Resources
Books
"Introducing Microsoft Orleans"
https://www.amazon.com/Introducing-Microsoft-
Orleans-Implementing-Cloud-
Native/dp/148428013X
"Microsoft Orleans for Developers"
https://www.amazon.com/Microsoft-Orleans-
Developers-Cloud-Native-
Distributed/dp/1484281667
"Distributed .NET w/Microsoft Orleans"
https://www.amazon.com/Distributed-NET-
Microsoft-Orleans-applications-
ebook/dp/B09NPBDQSL
Credentials
Who is this guy?
Architect, Engineering Manager/Leader, "force
multiplier"
Principal -- Neward & Associates
http://www.newardassociates.com
Educative (http://educative.io) Author
Performance Management for Engineering
Managers
Author
Professional F# 2.0
 (w/Erickson, et al; Wrox, 2010)
Effective Enterprise Java
 (Addison-Wesley, 2004)
SSCLI Essentials
 (w/Stutz, et al; OReilly, 2003)
Server-Based Java Programming
 (Manning, 2000)
Slide Note
Embed
Share

Dive into the world of virtual actors and distributed system design with Microsoft Orleans, a powerful framework for building scalable and resilient applications in .NET. Learn about key concepts like grains, silos, and virtual actors, and discover how Orleans simplifies the development of complex distributed systems.


Uploaded on Sep 28, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Busy .NET Developer's Guide to Orleans

  2. Objectives Our goal here is to: Explore what a "virtual actor" is and how it works See how Orleans implements these virtual actors Talk about Orleans-centric distributed system design

  3. In a nutshell MICROSOFT ORLEANS: OVERVIEW

  4. Microsoft Orleans: Overview What is it? actors model for CLR technology stacks "grains" stateless or persistent virtual actors: "always alive" semantics open-source https://github.com/microsoft/orleans used on some sizable projects Halo 4, Halo 5

  5. What's important to know? ORLEANS CONCEPTS

  6. Orleans Concepts Core concepts: Grain Silo Cluster Host

  7. Orleans Concepts Grain "Virtual Actor": Identity + Logic + State defined observable/"hook"able lifecycle Single-threaded, serial message receipt single living instance: "activation"

  8. Orleans Concepts Grain identity Objects have implicit identity (memory address) Actors use more generalized identity Orleans grains must have "long-lived" identity Orleans uses one of five options for identity: long GUID string GUID + string (compound)

  9. Orleans Concepts Grain state Grains can be entirely stateless singletons, in essence can allow multiple activations Grains can hold state state is held across lifetime of server state can be persisted to external storage

  10. Orleans Concepts Grain interface Describes the messaging surface uses CLR interfaces and async idioms only type visible to clients "IDL" for Orleans

  11. Orleans Concepts Message bundle of data passed across the wire binary format; serialized (deep copy) actual runtime type passed (not declared type) Orleans generates "serializers" as part of build can be invoked await (preserves order) or async (no ordering)

  12. Orleans Concepts Silo server instance/process, containing grains manage allocation/lifecycle of grains provides location transparency forces "remote-first" mentality designed to work together in a cluster defined observable/"hook"able lifecycle

  13. Orleans Concepts Cluster collection of silos responsible for grain placement in Silos random local-to-caller (server) hash-based activation-count-based configurable and customizable

  14. Orleans Concepts Host process which contains the running server(s) most often a Console, Service, or ASP.NET app heavy use of Microsoft Hosting classes

  15. Orleans Concepts Rules of thumb Grains always exist runtime activates them on demand runtime deactivates them "later" or on request Everything is a Task or Task-of-T enforcing/requiring asynchronicity

  16. Zero to Go in.... ORLEANS GETTING STARTED

  17. Orleans Getting Started Platform requirements Microsoft .NET (.NET Core 6, 7) ... and a network

  18. Orleans Getting Started Hello, Orleans https://github.com/tedneward/Demo- Orleans/HelloWorld four projects: interfaces (IDL) implementations client server/host any CLR language (most often C#)

  19. Orleans Getting Started Interfaces ClassLibrary requires Microsoft.Orleans.Core.Abstractions Microsoft.Orleans.CodeGenerator.MSBuild

  20. Orleans Getting Started IHelloWorld public interface IHelloWorld : Orleans.IGrainWithIntegerKey { Task<string> SayHello(string name); }

  21. Orleans Getting Started Grains (implementations) ClassLibrary requires Microsoft.Orleans.Core.Abstractions Microsoft.Orleans.CodeGenerator.MSBuild Interfaces

  22. Orleans Getting Started HelloWorld public class HelloWorld : Orleans.Grain, IHelloWorld { private readonly ILogger _logger; public HelloWorld(ILogger<HelloWorld> logger) { _logger = logger; } public Task<string> SayHello(string name) { _logger.LogInformation("SayHello: name = '{name}', ", name); return Task.FromResult($"Hello, {name}, welcome to Orleans"); } }

  23. Orleans Getting Started Host Console requires Microsoft.Orleans.Server (Microsoft.Extensions.Hosting) (Microsoft.Extensions.Logging.Console) Interfaces Grains

  24. Orleans Getting Started Program.cs var builder = new HostBuilder() .UseOrleans(c => { c.UseLocalhostClustering() .Configure<ClusterOptions>(options => { options.ClusterId = "dev"; options.ServiceId = "HelloWorld"; }) .ConfigureApplicationParts( parts => parts.AddApplicationPart(typeof(HelloWorld).Assembly).WithReferences()) .ConfigureLogging(logging => logging.AddConsole()); }); var host = builder.Build(); await host.StartAsync();

  25. Orleans Getting Started Client Console requires Microsoft.Orleans.Client Interfaces

  26. Orleans Getting Started Client Setup var client = new ClientBuilder() .UseLocalhostClustering() .Configure<ClusterOptions>(options => { options.ClusterId = "dev"; options.ServiceId = "HelloWorld"; }) .ConfigureLogging(logging => logging.AddConsole()) .Build(); await client.Connect(); Console.WriteLine("Client successfully connected to silo host \n");

  27. Orleans Getting Started Client calling host var friend = client.GetGrain<IHelloWorld>(0); var response = await friend.SayHello("Good morning, HelloGrain!");

  28. Implementing Orleans actors ORLEANS BASICS

  29. Orleans Basics Interfaces must extend an "identity interface" describes the kind of primary key IGrainWithGuidKey IGrainWithIntegerKey IGrainWithStringKey IGrainWithGuidCompoundKey IGrainWithIntegerCompoundKey methods must return Task

  30. Orleans Basics Grains must implement grain interface must extend Orleans.Grain base class optionally override OnActivateAsync/OnDeactivateAsy nc for notification of activation/deactivation exceptions will cancel activation deactivation is not guaranteed (e.g., server crash) primary key available via GetPrimaryKey

  31. Orleans Basics Grain References grains are never accessed directly clients must obtain a "grain reference" pass identity to GrainFactory.GetGrain references can be used as typical .NET objects

  32. More Other topics Persistent grains Timers and reminders Streams Heterogenous Silos Evolving/versioning Grains Event sourcing Transactions

  33. Summary Microsoft Orleans virtual actor system built on top of CLR providing easy language-to-messaging syntax/semantics capable of supporting high scale/load

  34. Where to go to get more RESOURCES

  35. Resources Code/Github Orleans OSS repository https://github.com/dotnet/orleans Official docs https://learn.microsoft.com/en- us/dotnet/orleans/ OrleansContrib https://github.com/orgs/OrleansContrib Awesome-Orleans https://github.com/OrleansContrib/Awesome-

  36. Resources Books "Introducing Microsoft Orleans" https://www.amazon.com/Introducing-Microsoft- Orleans-Implementing-Cloud- Native/dp/148428013X "Microsoft Orleans for Developers" https://www.amazon.com/Microsoft-Orleans- Developers-Cloud-Native- Distributed/dp/1484281667 "Distributed .NET w/Microsoft Orleans" https://www.amazon.com/Distributed-NET-

  37. Credentials Who is this guy? Architect, Engineering Manager/Leader, "force multiplier" Principal -- Neward & Associates http://www.newardassociates.com Educative (http://educative.io) Author Performance Management for Engineering Managers Author Professional F# 2.0 (w/Erickson, et al; Wrox, 2010)

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#