Антон Молдован "Building data intensive stateful services with Orleans"

Post on 23-Jan-2018

412 views 1 download

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