Visual Studio 2015 RCが必須です。
ちょっとだけ雑感
Reliable Actors APIs と Reliable Services APIs のどちらかを選択する。
Actor の 並行性 がこんな感じ。

Hello, World サンプルコードがこんな感じ。先ほどの図の通り、だいぶ非同期満載です。
namespace HelloWorld
{
public class HelloWorld : Actor, IHelloWorld
{
public Task<string> SayHello(string greeting)
{
return Task.FromResult("You said: '" + greeting + "', I say: Hello Actors!");
}
}
}
ステートレスかステートフルかを選ぶ
まぁまぁ、シンプル。ServiceEventSource ってのよくわからないけど、キューみたいなのかな。
protected override async Task RunAsync(CancellationToken cancellationToken)
{
// TODO: Replace the following with your own logic.
int iterations = 0;
while (!cancellationToken.IsCancellationRequested)
{
ServiceEventSource.Current.ServiceMessage(this, "Working-{0}", iterations++);
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
− ステートフルの場合
protected override async Task RunAsync(CancellationToken cancellationToken)
{
// TODO: Replace the following with your own logic.
IReliableDictionary<string, long> myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<string, long>>("myDictionary");
while (!cancellationToken.IsCancellationRequested)
{
using (ITransaction tx = this.StateManager.CreateTransaction())
{
var result = await myDictionary.TryGetValueAsync(tx, "Counter-1");
ServiceEventSource.Current.ServiceMessage(
this,
"Current Counter Value: {0}",
result.HasValue ? result.Value.ToString() : "Value does not exist.");
await myDictionary.AddOrUpdateAsync(tx, "Counter-1", 0, (k, v) => ++v);
await tx.CommitAsync();
}
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
IReliableDictionary という Reliable Collections が違うっぽい。ここにステートを保存する。
気になるステートの保存先はService Fabric の local disk? だけど、各ノードを横断的に保存するから信頼性が高いとか。
まとめ
見た感じ、かなり特殊なプログラミングモデルで、ASP.NET 等とはまた違う、新しいフレームワークと思って取り組まないとダメっぽい。しかしながら、パフォーマンスや信頼性については、机上の空論ではなく、Azure の各サービスで実績があるので、取り組む価値はあると考える。
サンプルコードが Azure/servicefabric-samples にあるので、詳しく追ってみたい。けれどもタイムオーバーなので、また今度。
追記
別なことしてたらふと思い出したので追記。
single-threaded actor model とかどっかで聞いたことあるなぁと思ったら、 Orleans にも同じ事書いてあった。 Orleans のことは 直接書かれていないけど、ベースになっていると考えて良いかなー。