Scientists versus the local community: A case study in post-Katrina New Orleans
Akka.net versus microsoft orleans
-
Upload
bill-tulloch -
Category
Technology
-
view
1.734 -
download
9
Transcript of Akka.net versus microsoft orleans
![Page 1: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/1.jpg)
![Page 2: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/2.jpg)
Actor Model in .NET:Akka.NET vs Microsoft Orleans
for the curious
William TullochLead Consultant – Readify@wtulloch
![Page 3: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/3.jpg)
PreambleConcurrency and distributed applications
![Page 4: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/4.jpg)
What is the Actor Model?
![Page 5: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/5.jpg)
The Model of Actor Model
A way of reasoning about concurrent computation
![Page 6: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/6.jpg)
What is the Actor Model
A way of reasoning about concurrent computationIs inherently concurrent
![Page 7: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/7.jpg)
The Model of Actor Model
Is a conceptual model for reasoning about concurrent computationIs inherently concurrentManages concurrency through message passing
![Page 8: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/8.jpg)
The Model of Actor Model
Is a conceptual model for reasoning about concurrent computation
Adopts the philosophy that everything is an actor
Is inherently concurrentManages concurrency through message passing
![Page 9: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/9.jpg)
What is an Actor? Lightweight
Never shares state
Communicates through asynchronous messagesHas a mailbox to buffer messages
Processes one message at a time
Is a single-thread object
![Page 10: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/10.jpg)
An Actor Can not exist on its own
![Page 11: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/11.jpg)
Microsoft Orleans&
Akka.NET
![Page 12: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/12.jpg)
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(?)
![Page 13: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/13.jpg)
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(?)
![Page 14: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/14.jpg)
Orleans versus Akka.NET
![Page 15: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/15.jpg)
Hosting Actors
Image from Halo Orleans at build 2104
Orleans - Silo Akka - ActorSystem
![Page 16: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/16.jpg)
Hosting Actors
Image from Halo Orleans at build 2104
Orleans - Silo Akka - ActorSystem
![Page 17: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/17.jpg)
Actors versus Grains
![Page 18: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/18.jpg)
Orleans: An Actor is Grain
Grain instances always exist virtually
![Page 19: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/19.jpg)
Orleans: An Actor is Grain
Grain instances always exist virtuallyAre created on demand
![Page 20: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/20.jpg)
Orleans: An Actor is Grain
Grain instances always exist virtuallyAre created on demand
Are location transparent
![Page 21: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/21.jpg)
Orleans: An Actor is Grain
Grain instances always exist virtuallyAre created on demand
Are location transparent
Every grain must have an Id
![Page 22: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/22.jpg)
Akka.NET: An Actor is Actor
Must be explicitly created and stopped
![Page 23: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/23.jpg)
Akka.NET: An Actor is Actor
Must be explicitly created and stoppedAre created in the context of their parent
![Page 24: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/24.jpg)
Akka.NET: An Actor is Actor
Must be explicitly created and stoppedAre created in the context of their parentExposes a set of life-cycle hooks
![Page 25: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/25.jpg)
Akka.NET: An Actor is Actor
Must be explicitly created and stoppedAre created in the context of their parentExposes a set of life-cycle hooks Are location transparentakka.tcp://[email protected]:12345/user/HelloWorld/$c
![Page 26: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/26.jpg)
Creating grains and actors
![Page 27: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/27.jpg)
Creating a grain
![Page 28: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/28.jpg)
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
![Page 29: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/29.jpg)
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• IGrainWithIntegerCompou
ndKey• IGrainWithGuidCompound
Key
![Page 30: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/30.jpg)
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"); }}
![Page 31: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/31.jpg)
Interacting with Grains
static async Task SendMessage(User user ){ var helloWorld = GrainClient.GrainFactory.GetGrain<IHelloWorld>(0); var response = await helloWorld.Greeting(user); WriteLine(response);}
![Page 32: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/32.jpg)
Creating an Actor
![Page 33: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/33.jpg)
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
![Page 34: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/34.jpg)
Create message
public class HelloUserMessage{ public User User { get; } public HelloUserMessage(User user) { User = user; }}
![Page 35: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/35.jpg)
Create an actorpublic 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"));}
![Page 36: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/36.jpg)
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();
![Page 37: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/37.jpg)
Demo Hello World
![Page 38: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/38.jpg)
Messages and Serialisation
![Page 39: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/39.jpg)
Messages and Serialisation
public class UserMessage { public string FirstName { get;} public string LastName { get;} public UserMessage(string firstName, string lastName) { FirstName = firstName; LastName = lastName; }}
![Page 40: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/40.jpg)
Messages and serialisation
Task<string> Greeting(string firstName, string lastName);
Task<Immutable<byte[]>> ProcessRequest(Immutable<byte[]> request);
![Page 41: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/41.jpg)
Messages and Serialisation
[Immutable] public class User { public string FirstName { get;} public string LastName { get;}}
![Page 42: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/42.jpg)
Bits and Pieces
“let it crash” and exception handlingPersisting stateChanging behaviourGrains for everyoneRouting in Akka.NETClustering in Akka.NET
![Page 43: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/43.jpg)
Summing up
![Page 44: Akka.net versus microsoft orleans](https://reader033.fdocuments.in/reader033/viewer/2022061520/58786ed31a28ab497b8b59c3/html5/thumbnails/44.jpg)
Resources
Akka.NETAkka.NET home: http://getakka.net/Bootcamp: https://github.com/petabridge/akka-bootcamp
OrleansOrleans 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