Антон Молдован "Building data intensive stateful services with Orleans"
-
Upload
fwdays -
Category
Technology
-
view
412 -
download
1
Transcript of Антон Молдован "Building data intensive stateful services with Orleans"
Building data intensive statefulservices with Orleans
Anton MoldovanSBTech
Twitter: https://twitter.com/AntyaDevGithub: https://github.com/AntyaDev
About me:
@AntyaDevlike types*
microsoft orleans
Agenda
concurrency
Unavailable Silo
courtesy of @johnazariah
public async Task DoSomeJob(){
// Grab the Orleans task schedulervar orleansTs = TaskScheduler.Current;
Task.Run(async () =>{
// Now let's say you need to make a grain call.await Task.Factory.StartNew(() =>{
// This code runs on the Orleans task scheduler. var grain = GrainFactory.GetGrain<IDeviceGrain>("grain_id");grain.SetChallengeName("challenge");
});});
}
public interface ICacheGrain : IGrain{
Task Write(string value);Task<string> Read();
}
public interface ICacheGrain : IGrain{
Task Write(string value);Task<string> Read();
}
•
•
•
•
[Reentrant][StorageProvider(ProviderName = "MongoDb")]public class CacheGrain : ICacheGrain{
public async Task Write(string value){
if (value == State.Value) return;State.Value = value;await State.WriteStateAsync();
}
public Task<string> Read(){
return Task.FromResult(State.Value);}
}
public override Task ActivateAsync(){
RegisterTimer(SendUpdate, null, TimeSpan.FromSeconds(1, TimeSpan.FromSeconds(5));}
public override Task ActivateAsync(){
RegisterTimer(SendUpdate, null, TimeSpan.FromSeconds(1, TimeSpan.FromSeconds(5));}
AggregatorDevice
Device
[StatelessWorker]public interface IDispatcherGrain : IGrain{
Task Send(Tuple<int, string>[] messages);}
[StatelessWorker]public interface IDispatcherGrain : IGrain{
Task Send(Tuple<int, string>[] messages);}
•
•
•
[StatelessWorker]public interface IDispatcherGrain : IGrain{
Task Send(Tuple<int, string>[] messages);}
Dispatcher
Dispatcher
Target
Target
Target