SlideShare a Scribd company logo
Actor Model in .NET:
Akka.NET vs Microsoft Orleans
for the curious
William Tulloch
Lead Consultant – Readify
@wtulloch
Preamble
Concurrency and distributed applications
What is the Actor Model?
The Model of Actor Model
A way of reasoning about concurrent computation
What is the Actor Model
A way of reasoning about concurrent computation
Is inherently concurrent
The Model of Actor Model
Is a conceptual model for reasoning about concurrent
computation
Is inherently concurrent
Manages concurrency through message passing
The Model of Actor Model
Is a conceptual model for reasoning about concurrent
computation
Adopts the philosophy that everything is an actor
Is inherently concurrent
Manages concurrency through message passing
What is an Actor?
Lightweight
Never shares state
Communicates through asynchronous
messages
Has a mailbox to buffer messages
Processes one message at a time
Is a single-thread object
An Actor Can not exist on its own
Microsoft Orleans
&
Akka.NET
The overview
Akka.NET
• A port of Java/Scala Akka
• Open source
• Task Parallel Library
• Reactive methodology
• Can be run within an application,
on-prem or in the cloud(?)
The overview
Orleans
• Started by Microsoft Research
• Open source
• Task Parallel Library
• Reactive methodology
• Cloud-native
Akka.NET
• A port of Java/Scala Akka
• Open source
• Task Parallel Library
• Reactive methodology
• Can be run within an application, on-
prem or in the cloud(?)
Orleans versus Akka.NET
Hosting Actors
Image from Halo Orleans at build 2104
Orleans - SiloAkka - ActorSystem
Hosting Actors
Image from Halo Orleans at build 2104
Orleans - SiloAkka - ActorSystem
Actors versus Grains
Orleans: An Actor is Grain
Grain instances always exist virtually
Orleans: An Actor is Grain
Grain instances always exist virtually
Are created on demand
Orleans: An Actor is Grain
Grain instances always exist virtually
Are created on demand
Are location transparent
Orleans: An Actor is Grain
Grain instances always exist virtually
Are created on demand
Are location transparent
Every grain must have an Id
Akka.NET: An Actor is Actor
Must be explicitly created and stopped
Akka.NET: An Actor is Actor
Must be explicitly created and stopped
Are created in the context of their parent
Akka.NET: An Actor is Actor
Must be explicitly created and stopped
Are created in the context of their parent
Exposes a set of life-cycle hooks
Akka.NET: An Actor is Actor
Must be explicitly created and stopped
Are created in the context of their parent
Exposes a set of life-cycle hooks
Are location transparent
akka.tcp://Demo@127.0.0.1:12345/user/HelloWorld/$c
Creating grains and actors
Creating a grain
Orleans – creating a grain
• In Visual Studio create two projects
• One for your grain interfaces
• One for your grain implementations
• In both projects install the NuGet package
Microsoft.Orleans.OrleansCodeGenerator.build
Create a Grain interface
public interface IHelloWorld : IGrainWithIntegerKey
{
Task Greeting(string name);
Task<string> ReturnGreeting(string name);
}
Must implement one of the
following:
• IGrainWithIntegerKey
• IGrainWithGuidKey
• IGrainWithStringKey
• IGrainWithIntegerCompoundKey
• IGrainWithGuidCompoundKey
Create an implementation of the interface
public class HelloWorldGrain : Grain, IHelloWorld
{
public Task Greeting(string name)
{
Console.WriteLine($"Hi {name} from Orleans");
return TaskDone.Done;
}
public Task<string> ReturnGreeting(string name)
{
return Task.FromResult($"Hi {name} from Orleans");
}
}
Interacting with Grains
static async Task SendMessage(User user )
{
var helloWorld = GrainClient.GrainFactory.GetGrain<IHelloWorld>(0);
var response = await helloWorld.Greeting(user);
WriteLine(response);
}
Creating an Actor
Akka.Net – creating an actor
• In Visual Studio:
• Create a new class library
• Create a console application
• Import the core Akka.NET Nuget package: Akka
Create message
public class HelloUserMessage
{
public User User { get; }
public HelloUserMessage(User user)
{
User = user;
}
}
Create an actor
public class HelloWorldActor : ReceiveActor
{
private TimeSpan _waitPeriod;
public HelloWorldActor(TimeSpan waitPeriod)
{
_waitPeriod = waitPeriod;
Receive<HelloUserMessage>(m =>
{
var user = m.User;
Thread.Sleep(_waitPeriod);
WriteLine($"Hi {user.Id} {user.FirstName} nice to meet you [on thread ");
});
Receive<DataCompleted>(m => WriteLine("Data is completed"));
}
Using the actor
var system = ActorSystem.Create("demo")
var helloWorld = system.ActorOf(Props.Create(() => new HelloWorldActor()));
helloWorld.Tell(new HelloUserMessage(new User());
await system.Terminate();
Demo Hello World
Messages and Serialisation
Messages and Serialisation
public class UserMessage
{
public string FirstName { get;}
public string LastName { get;}
public UserMessage(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
Messages and serialisation
Task<string> Greeting(string firstName, string lastName);
Task<Immutable<byte[]>> ProcessRequest(Immutable<byte[]> request);
Messages and Serialisation
[Immutable]
public class User
{
public string FirstName { get;}
public string LastName { get;}
}
Bits and Pieces
“let it crash” and exception handling
Persisting state
Changing behaviour
Grains for everyone
Routing in Akka.NET
Clustering in Akka.NET
Summing up
Resources
Akka.NET
Akka.NET home: http://getakka.net/
Bootcamp: https://github.com/petabridge/akka-bootcamp
Orleans
Orleans Home: http://dotnet.github.io/orleans/
Halo-Orleans: https://channel9.msdn.com/Events/Build/2014/3-641
Comparing Akka.NET and Orleans: https://github.com/akka/akka-
meta/blob/master/ComparisonWithOrleans.md

More Related Content

What's hot

Implementing Microservices with NATS
Implementing Microservices with NATSImplementing Microservices with NATS
Implementing Microservices with NATS
Apcera
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
confluent
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
Avanade Nederland
 
An introduction to Apache Camel
An introduction to Apache CamelAn introduction to Apache Camel
An introduction to Apache Camel
Kapil Kumar
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
Volkan Uzun
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
felixbillon
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
Abhishek Koserwal
 
Log management with ELK
Log management with ELKLog management with ELK
Log management with ELK
Geert Pante
 
Express js
Express jsExpress js
Express js
Manav Prasad
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Rust: Systems Programming for Everyone
Rust: Systems Programming for EveryoneRust: Systems Programming for Everyone
Rust: Systems Programming for Everyone
C4Media
 
Introduce to Rust-A Powerful System Language
Introduce to Rust-A Powerful System LanguageIntroduce to Rust-A Powerful System Language
Introduce to Rust-A Powerful System Language
安齊 劉
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
AMD Developer Central
 
Json Web Token - JWT
Json Web Token - JWTJson Web Token - JWT
Json Web Token - JWT
Prashant Walke
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...
HostedbyConfluent
 
.NET Framework Overview
.NET Framework Overview.NET Framework Overview
.NET Framework OverviewDoncho Minkov
 
Celery - A Distributed Task Queue
Celery - A Distributed Task QueueCelery - A Distributed Task Queue
Celery - A Distributed Task Queue
Duy Do
 
Asynchronous Programming in .NET
Asynchronous Programming in .NETAsynchronous Programming in .NET
Asynchronous Programming in .NET
Pierre-Luc Maheu
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
Paul Mooney
 

What's hot (20)

Implementing Microservices with NATS
Implementing Microservices with NATSImplementing Microservices with NATS
Implementing Microservices with NATS
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
 
An introduction to Apache Camel
An introduction to Apache CamelAn introduction to Apache Camel
An introduction to Apache Camel
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
Log management with ELK
Log management with ELKLog management with ELK
Log management with ELK
 
Express js
Express jsExpress js
Express js
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Rust: Systems Programming for Everyone
Rust: Systems Programming for EveryoneRust: Systems Programming for Everyone
Rust: Systems Programming for Everyone
 
Express node js
Express node jsExpress node js
Express node js
 
Introduce to Rust-A Powerful System Language
Introduce to Rust-A Powerful System LanguageIntroduce to Rust-A Powerful System Language
Introduce to Rust-A Powerful System Language
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Json Web Token - JWT
Json Web Token - JWTJson Web Token - JWT
Json Web Token - JWT
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...
 
.NET Framework Overview
.NET Framework Overview.NET Framework Overview
.NET Framework Overview
 
Celery - A Distributed Task Queue
Celery - A Distributed Task QueueCelery - A Distributed Task Queue
Celery - A Distributed Task Queue
 
Asynchronous Programming in .NET
Asynchronous Programming in .NETAsynchronous Programming in .NET
Asynchronous Programming in .NET
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 

Similar to Akka.net versus microsoft orleans

Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
Manuel Bernhardt
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaWO Community
 
Multi-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarMulti-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and Quasar
Gal Marder
 
Akka in Action: Heiko Seeburger
Akka in Action: Heiko SeeburgerAkka in Action: Heiko Seeburger
Akka in Action: Heiko Seeburger
JAX London
 
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsGo Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Jonas Bonér
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1
Mohamed Nabil, MSc.
 
Introduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users GroupIntroduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users Group
Roy Russo
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
Adrian Spender
 
Scale up your thinking
Scale up your thinkingScale up your thinking
Scale up your thinking
Yardena Meymann
 
Projects Valhalla, Loom and GraalVM at JCon 2020
Projects Valhalla, Loom and GraalVM at JCon 2020Projects Valhalla, Loom and GraalVM at JCon 2020
Projects Valhalla, Loom and GraalVM at JCon 2020
Vadym Kazulkin
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
Iulian Dragos
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and Akka
Yung-Lin Ho
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuSalesforce Developers
 
Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
Ruslan Shevchenko
 
Ruby Under The Hood
Ruby Under The HoodRuby Under The Hood
Ruby Under The Hood
craig lehmann
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14
Anthony Ferrara
 
Projects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG MainzProjects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG Mainz
Vadym Kazulkin
 
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
Codemotion
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
John Stevenson
 
Software design patterns in laravel by phill sparks
Software design patterns in laravel by phill sparksSoftware design patterns in laravel by phill sparks
Software design patterns in laravel by phill sparks
Theavuth NHEL
 

Similar to Akka.net versus microsoft orleans (20)

Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
 
Multi-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and QuasarMulti-threading in the modern era: Vertx Akka and Quasar
Multi-threading in the modern era: Vertx Akka and Quasar
 
Akka in Action: Heiko Seeburger
Akka in Action: Heiko SeeburgerAkka in Action: Heiko Seeburger
Akka in Action: Heiko Seeburger
 
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive SystemsGo Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
Go Reactive: Event-Driven, Scalable, Resilient & Responsive Systems
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1
 
Introduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users GroupIntroduction to Akka - Atlanta Java Users Group
Introduction to Akka - Atlanta Java Users Group
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
 
Scale up your thinking
Scale up your thinkingScale up your thinking
Scale up your thinking
 
Projects Valhalla, Loom and GraalVM at JCon 2020
Projects Valhalla, Loom and GraalVM at JCon 2020Projects Valhalla, Loom and GraalVM at JCon 2020
Projects Valhalla, Loom and GraalVM at JCon 2020
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and Akka
 
Build Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and HerokuBuild Cloud Applications with Akka and Heroku
Build Cloud Applications with Akka and Heroku
 
Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
 
Ruby Under The Hood
Ruby Under The HoodRuby Under The Hood
Ruby Under The Hood
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14
 
Projects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG MainzProjects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG Mainz
 
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
Un actor (model) per amico - Alessandro Melchiori - Codemotion Milan 2016
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
 
Software design patterns in laravel by phill sparks
Software design patterns in laravel by phill sparksSoftware design patterns in laravel by phill sparks
Software design patterns in laravel by phill sparks
 

Recently uploaded

Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 

Recently uploaded (20)

Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 

Akka.net versus microsoft orleans

  • 1.
  • 2. Actor Model in .NET: Akka.NET vs Microsoft Orleans for the curious William Tulloch Lead Consultant – Readify @wtulloch
  • 4. What is the Actor Model?
  • 5. The Model of Actor Model A way of reasoning about concurrent computation
  • 6. What is the Actor Model A way of reasoning about concurrent computation Is inherently concurrent
  • 7. The Model of Actor Model Is a conceptual model for reasoning about concurrent computation Is inherently concurrent Manages concurrency through message passing
  • 8. The Model of Actor Model Is a conceptual model for reasoning about concurrent computation Adopts the philosophy that everything is an actor Is inherently concurrent Manages concurrency through message passing
  • 9. What is an Actor? Lightweight Never shares state Communicates through asynchronous messages Has a mailbox to buffer messages Processes one message at a time Is a single-thread object
  • 10. An Actor Can not exist on its own
  • 12. The overview Akka.NET • A port of Java/Scala Akka • Open source • Task Parallel Library • Reactive methodology • Can be run within an application, on-prem or in the cloud(?)
  • 13. The overview Orleans • Started by Microsoft Research • Open source • Task Parallel Library • Reactive methodology • Cloud-native Akka.NET • A port of Java/Scala Akka • Open source • Task Parallel Library • Reactive methodology • Can be run within an application, on- prem or in the cloud(?)
  • 15. Hosting Actors Image from Halo Orleans at build 2104 Orleans - SiloAkka - ActorSystem
  • 16. Hosting Actors Image from Halo Orleans at build 2104 Orleans - SiloAkka - ActorSystem
  • 18. Orleans: An Actor is Grain Grain instances always exist virtually
  • 19. Orleans: An Actor is Grain Grain instances always exist virtually Are created on demand
  • 20. Orleans: An Actor is Grain Grain instances always exist virtually Are created on demand Are location transparent
  • 21. Orleans: An Actor is Grain Grain instances always exist virtually Are created on demand Are location transparent Every grain must have an Id
  • 22. Akka.NET: An Actor is Actor Must be explicitly created and stopped
  • 23. Akka.NET: An Actor is Actor Must be explicitly created and stopped Are created in the context of their parent
  • 24. Akka.NET: An Actor is Actor Must be explicitly created and stopped Are created in the context of their parent Exposes a set of life-cycle hooks
  • 25. Akka.NET: An Actor is Actor Must be explicitly created and stopped Are created in the context of their parent Exposes a set of life-cycle hooks Are location transparent akka.tcp://Demo@127.0.0.1:12345/user/HelloWorld/$c
  • 28. Orleans – creating a grain • In Visual Studio create two projects • One for your grain interfaces • One for your grain implementations • In both projects install the NuGet package Microsoft.Orleans.OrleansCodeGenerator.build
  • 29. Create a Grain interface public interface IHelloWorld : IGrainWithIntegerKey { Task Greeting(string name); Task<string> ReturnGreeting(string name); } Must implement one of the following: • IGrainWithIntegerKey • IGrainWithGuidKey • IGrainWithStringKey • IGrainWithIntegerCompoundKey • IGrainWithGuidCompoundKey
  • 30. Create an implementation of the interface public class HelloWorldGrain : Grain, IHelloWorld { public Task Greeting(string name) { Console.WriteLine($"Hi {name} from Orleans"); return TaskDone.Done; } public Task<string> ReturnGreeting(string name) { return Task.FromResult($"Hi {name} from Orleans"); } }
  • 31. Interacting with Grains static async Task SendMessage(User user ) { var helloWorld = GrainClient.GrainFactory.GetGrain<IHelloWorld>(0); var response = await helloWorld.Greeting(user); WriteLine(response); }
  • 33. Akka.Net – creating an actor • In Visual Studio: • Create a new class library • Create a console application • Import the core Akka.NET Nuget package: Akka
  • 34. Create message public class HelloUserMessage { public User User { get; } public HelloUserMessage(User user) { User = user; } }
  • 35. Create an actor public class HelloWorldActor : ReceiveActor { private TimeSpan _waitPeriod; public HelloWorldActor(TimeSpan waitPeriod) { _waitPeriod = waitPeriod; Receive<HelloUserMessage>(m => { var user = m.User; Thread.Sleep(_waitPeriod); WriteLine($"Hi {user.Id} {user.FirstName} nice to meet you [on thread "); }); Receive<DataCompleted>(m => WriteLine("Data is completed")); }
  • 36. Using the actor var system = ActorSystem.Create("demo") var helloWorld = system.ActorOf(Props.Create(() => new HelloWorldActor())); helloWorld.Tell(new HelloUserMessage(new User()); await system.Terminate();
  • 39. Messages and Serialisation public class UserMessage { public string FirstName { get;} public string LastName { get;} public UserMessage(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } }
  • 40. Messages and serialisation Task<string> Greeting(string firstName, string lastName); Task<Immutable<byte[]>> ProcessRequest(Immutable<byte[]> request);
  • 41. Messages and Serialisation [Immutable] public class User { public string FirstName { get;} public string LastName { get;} }
  • 42. Bits and Pieces “let it crash” and exception handling Persisting state Changing behaviour Grains for everyone Routing in Akka.NET Clustering in Akka.NET
  • 44. Resources Akka.NET Akka.NET home: http://getakka.net/ Bootcamp: https://github.com/petabridge/akka-bootcamp Orleans Orleans Home: http://dotnet.github.io/orleans/ Halo-Orleans: https://channel9.msdn.com/Events/Build/2014/3-641 Comparing Akka.NET and Orleans: https://github.com/akka/akka- meta/blob/master/ComparisonWithOrleans.md

Editor's Notes

  1. Why has the actor model appeared to suddenly become the flavour of the month? Because multi-threaded concurrency is hard and distributed multi-threaded concurrency is harder again. Shared state Race conditions lock and deadlocks hard to understand and maintain not easily distributed. In the .NET ecosystem the three best known frameworks that in one form or another implement the actor model are service fabric, akka.net and Microsoft Orleans. It is these last two that we are looking at today. In this talk we really only to skim the surface of either of these frame works
  2. First proposed by Hewitt, Bishop and Steiger in 1973 as a mathematical theory of computation.
  3.  Another key feature of the actor model is the concept of distribution. Given an actor is a single unit of code with a mailbox and an internal state, whether that actor running locally or on a remote node is irrelevant to the sender. As long as the message gets there what does it matter?
  4. An Actor is a primitive unit of computation <click slides> In addition to characteristics an actor Can create other actors Can send messages to other actors Can change its behaviour to determine what to do with the next message Another key feature of the actor model is the concept of distribution. Given an actor is a single unit of code with a mailbox and an internal state, whether that actor running locally or on a remote node is irrelevant to the sender. As long as the message gets there what does it matter?
  5. “One actor is no actor, they come in sys­tems, and they have to have addresses so that one actor can send mes­sages to another actor.” – Carl Hewitt
  6. Having got the preliminaries out of the way time to dig into Orleans and Akka.net And have a look at how they both compare with each other and how they have approached implementing the Actor Model.
  7. So as you can see there is at least on the surface some similarities but in many ways that is where it ends. To paraphrase from Dr. Roland Kuhn's article comparing Orleans and Akka actors; with Orleans the primary focus is to simplify distributed computing so that non-experts can write efficient, scalable and reliable distributed services. Akka on the other hand is toolkit for creating distributed systems offering full control over the domain but also exposing its inherent complexity. In other words Orleans provides a relatively low entry point into the actor model paradigm for developers from an OO background whereas Akka.net requires you rethink your approach to programing.
  8. Akka uses a supervisor hierarchy
  9. Silos are more like a commune where actors exist as independent think of it like a bucket of actors
  10. an actor is a logical unit of computation and in terms of the key characteristics that make up an actor, lightweight, single threaded, no shared state, etc. Orleans and Akka.NET are pretty much on par but after that their respective implementations are radically diverge reflecting the differences in their design philosophy.
  11. In Orleans what we have been referring to as an actor is Grain. This difference in terminology reflects the difference in how The Developers of Orleans have approached the problem. A grain is also referred to as a virtual actor as it may or not exist it any point in time. Within Orleans if a grain has been idle for a period of time it will be garbage collected to free up memory. In terms of lifecycle grains are either activated or deactivated, They can never be programmatically started or stopped.
  12. Such as: PreStart PostStop PreRestart PostRestart
  13. In Akka.NET Actors explicitly communicate via messages. And by convention should be immutable (though this is currently not enforced)
  14. In Orleans the existence of a message is not so obvious and I have to admit this bothers me a little. When a grain method is invoked, the Orleans runtime makes a deep copy of the method arguments and forms the request out of the copies. This protects against the calling code modifying the argument objects before the data is passed to the called grain. The Orleans.Concurrency.Immutable wrapper class
  15. When I first