3. 自己紹介
近江 武一
JAZUG Azure Storage 担当(自称)
Microsoft MVP for Azure
http://www.slideshare.net/takekazuomi
kyrt inc 3
kyrt.in
github.com/takekazuom
i
white paper
監訳
2016/6/16
11. Actor とは何か?
Carl Hewitt 1973、Wikipedia:Actorモデル
Code and state encapsulation
Single-thread Isolated components
Asynchronous communication
結構昔からあるけど、メジャーにはなれず・・・・
kyrt inc 112016/6/16
42. lifecycle まとめ
kyrt inc 422016/6/16
Inactive Actor
Active Actor
removed from active actors list
and is deactivated. - Its state is
deleted permanently
state is deleted permanently
Messageが来ると、Activeへ
規定時間idle でInactiveへ
45. State Persistence
ActorのState管理の3つのstate storage optionがある。StatePersistence 属
性で State Provider を指定する。下が、low latency
Persisted state: State はディスクに永続化され、3 つ以上のreplicaに複
製される。最も 信頼性(durable)のある state storage option で、
complete cluster outage でも state は失われない
Volatile state: Stateは 3 つ以上のreplicaへ複製が memory にだけ保持
される。これにより、node障害、actor障害、upgrade中や resource
balancing 中の回復性(resilience)がある。注:Stateはディスクに永続化さ
れない、全replicaが同時に失われると、stateを喪失する
No persisted state: State は他のnodeへ複製されず、ディスクへの書か
れない。state に信頼性が必要無い場合に仕様
kyrt inc 452016/6/16
46. State Manager
SaveStateAsyncで明示的に保存
State Managerは、辞書のようなデータ構造で、キーと値のペアを保持(≒Reliable Collection)
ローリングアップデートしてもVolatile -> Persistedの変更は無保証
replica数の変更は可
状態の削除は、StateManager.RemoveStateAsync(“count ”)
kyrt inc 462016/6/16
[StatePersistence(StatePersistence.Persisted)]
class Calc : Actor, ICalc {
public async Task<int> GetCountAsync() {
return await StateManager.GetOrAddStateAsync<int>("count", 0);
}
public async Task<int> AddCountAsync() {
var result = await StateManager.GetOrAddStateAsync<int>(“count”, 0);
await StateManager.SetStateAsync("count", ++result);
return result;
}
}
SateManager からキーでアクセス
最初のアクセス時に、state object がメモリに
キャッシュ
Addの場合、Stateに0が保存
Actorのmethod のreturn で永続化(commit)
Exceptionを返すとrollback
SetStateAsyncでメモリ上を更新
state provider の種別を選択
47. 永続性設定の自動生成
kyrt inc 472016/6/16
[StatePersistence(StatePersistence.Persisted)]
class Calc : Actor, ICalc
{
<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ….>
<Parameters>
<Parameter Name="CalcActorService_PartitionCount" DefaultValue="10" />
<Parameter Name="CalcActorService_MinReplicaSetSize" DefaultValue="3" />
<Parameter Name="CalcActorService_TargetReplicaSetSize" DefaultValue="3" />
</Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="CalcPkg" ServiceManifestVersion="1.0.0" />
</ServiceManifestImport>
<DefaultServices>
<Service Name="CalcActorService" GeneratedIdRef="dba570a3-f793-4c20-9636-0038d9e6aac7|Persisted">
<StatefulService ServiceTypeName="CalcActorServiceType“
TargetReplicaSetSize="[CalcActorService_TargetReplicaSetSize]“
MinReplicaSetSize="[CalcActorService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[CalcActorService_PartitionCount]“
LowKey="-9223372036854775808" HighKey="9223372036854775807" />
</StatefulService>
</Service>
</DefaultServices>
</ApplicationManifest>
Visual Studio actor build tools
The build tools automatically
generate a default service for the
actor service in
ApplicationManifest.xml. Parameters
are created for min replica set size
and target replica set size.