SlideShare une entreprise Scribd logo
1  sur  37
第1回 JAZUG Tokyo Night
Azure Service Fabric /
Reliable Collection
Takekazu Omi
takekazu.omi@kyrt.in
2016/5/20 R.1.1
kyrt inc 22016/5/18
自己紹介
近江 武一
JAZUG Azure Storage 担当(自称)
Microsoft MVP for Azure
http://www.slideshare.net/takekazuomi
kyrt inc 3
kyrt.in
github.com/takekazuom
i
white paper
監訳
2016/5/18
はじめに
 4回ほどに分けて、Service Fabric の話をする(予定)
 (1) Reliable Collection, (2) Actor, (3) Cluster の作成、(4) Cluster の管理
運用 (予定)、今回はReliable Collection
 先日のGABCで、概要的な話をしたので、ここではもう少しだけ、中に入って
Service Fabric の特徴的な部分の話をします。(あまり、Microservice という
話はしません)
 Global Azure Bootcamp で話したService Fabricの概要の動画
⇨ https://youtu.be/bVWHPjcjeoc?t=38m
 過去に、話した時の資料
⇨ http://www.slideshare.net/takekazuomi/presentations
 概要は週末に「C#ユーザー会 //build/ 2016振り返り 勉強会」で話します
⇨ https://csugjp.doorkeeper.jp/events/43951
kyrt inc 42016/5/18
概要
2016/5/18 kyrt inc 5
API Gateway
kyrt inc 62016/5/18
APIGateway/stateless
Naming Service
P1
P2
Pn
S2
S3
Sn
S1
Service Fabric Cluster
P S S
P S S
P S S
statefulservice
プログラミングモデル
kyrt inc 72016/5/18
reliable service reliable actor guest executable
stateless service stateful service
Reliable Collection
Service Fabric(以下SF) の重要なビルディン
グブロックの1つ
永続化付きのコレクション
⇨ 高可用(replicated)
⇨ スケーラブル(partitioned)
⇨ 低レイテンシー
⇨ transacted
kyrt inc 82016/5/18
stateless services + external store
kyrt inc 92016/4/16
stateful services
kyrt inc 102016/4/16
kyrt inc 112016/5/18
基本的構造
高可用で低レイテンシーな永続
化機構
 書き込みは、Primaryのみ
 全てのwriteは、 primary +
replicas の majority quorum
3台構成なら、自分自身と他1
台に書ければ完了
 read はローカルから
kyrt inc 122016/5/18
Node 1/Primary
Node 2/Secondary Node 3/Secondary
特徴
 Replicated:状態の変更がレプリケートされ高可用
 Persisted: データがディスクに永続化されるため、大規模な
障害に強い(例: データセンターの電源障害)
 Asynchronous: API は非同期で、IO の実行時にもnon-
blocking
 Transactional : 複数の Reliable Collection 跨ったトランザ
クションが可能
kyrt inc 132016/5/18
Microsoft.ServiceFabric.Data.Collections
Microsoft.ServiceFabric.Data.Collections は次
の 2 つだけ。
Reliable Dictionary<T>: key/value コレクション、
ConcurrentDictionary の Reliable Collection
版
Reliable Queue<T>: FIFO コレクション、
ConcurrentQueueの Reliable Collection 版
kyrt inc 142016/5/18
Collections.Concurrent との比較
Asynchronous: 操作は非同期、タスクを返す
No out parameters: out の代わりに、
ConditionalValue<T> を使う
Transactions: トランザクション オブジェクトを
使用することで、トランザクション内で複数の
Reliable Collection に対してユーザーがグ
ループ操作が可能
kyrt inc 152016/5/18
例;
kyrt inc 162016/5/18
protected override async Task RunAsync(CancellationToken cancellationToken)
{
var myDic = await StateManager.GetOrAddAsync<IReliableDictionary<string, long>>("myDictionary");
var myQueue = await StateManager.GetOrAddAsync<IReliableQueue<long>>("myQueue");
var i = 0;
while (true) {
cancellationToken.ThrowIfCancellationRequested();
using (var tx = StateManager.CreateTransaction()){
ConditionalValue<long> rd = await myDic.TryGetValueAsync(tx, "Counter");
long rq = await myQueue.GetCountAsync(tx);
ServiceEventSource.Current.ServiceMessage(this, "Current Counter Value: {0}, {1}",
rd.HasValue ? rd.Value.ToString() : "Value does not exist.", rq);
var l = await myDic.AddOrUpdateAsync(tx, "Counter", 1, (key, value) => ++value);
// if (++i%10 == 0) continue;
await myQueue.EnqueueAsync(tx, l);
await tx.CommitAsync();
}
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
https://gist.github.com/takekazuomi/c17e497424dfc7e03e0bfa4d1e9c2877
使用上の注意
Reliable Collections のデータは、Data
Contract Serializer でシリアライズ
Types Supported by the Data Contract
Serializer
https://msdn.microsoft.com/en-
us/library/ms731923(v=vs.110).aspx
kyrt inc 172016/5/18
kyrt inc 182016/5/18
Isolation level
Reliable Collections では、操作とノードのロール(Primary/Secondary)に
よって自動的に 下記のisolation level のどちらかが選択される。
Transaction内は、Read Your Writes で、すべての書き込みは、後続の読
み取りによって認識される
 Repeatable Read
同じトランザクション中では同じデータは何度読み取りしても毎回同じ値
 Snapshot
トランザクション中は開始時のスナップショットを読む
kyrt inc 192016/5/18
Role/Operation別 Isolation level
Operation \ Role Primary Secondary
Single entity read Repeatable Read Snapshot
Enumeration \ Count Snapshot Snapshot
kyrt inc 202016/5/18
Operation \ Role Primary Secondary
Single entity read Snapshot Snapshot
Enumeration \ Count Snapshot Snapshot
Reliable Dictionary
Reliable Queue
https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/#isolation-levels
Persistence Model(1)
 DataContractSerializer でシリアライズされて永続化
 logとcheck point を使った永続性モデル(古典的な)、変更はlogに書き
込まれ、時折完全な状態を書き込む(checkpoint)
この方法だと、sequential append-only writes なのでパフォーマンスが
出る
kyrt inc 212016/5/18
開始 変更1 変更2 開始
開始+変更1
P
S 開始 開始+変更1+変更2 開始
① ③②
Persistence Model(2)
commit の時の時に、Reliable State Manager が、
log に記録し、log record をレプリカに配布。 (①と
②、check point が走らなかったとき)
Reliable Collection はメモリー内の操作だけを管理
ノードに障害が起きて再起動した場合、 Reliable
State Managerが、ローカルの log から Reliable
Collectionを復元
kyrt inc 222016/5/18
Persistence Model(3)
 check point ③ では、 Reliable State Manager が、
Reliable Collection に全データを DISK に書込むように要
求。書き込み終了後 Reliable State Managerは、log を切り
捨てる
 ②の段階では、Primary, Secondary のどちらの log にも変
更1と変更2の内容が書き込まれている。もし、DISK容量が
無限ならば、原理的にはこのまま続けていっても論理適には
破綻しない。実際DISKは有限なので、いちど全データを同
期し直すタイミングを設けている。③(これがcheck point)
kyrt inc 232016/5/18
Lock
 Reliable Collection では、全てのトランザクションは2フェーズ。
ロックは、トランザクションが abort または commit で終了するまで
解放されない
 Reliable Collection は、基本 Exclusive locks を取得する。読み
取りの場合、いくつかの要因に依存して lock が変わる。
 snapshot isolation の場合は lock free。 repeatable read
operation の場合は、デフォルトは shared locks です。ただし、
repeatable read operation の場合は、ユーザーは shared locks
では無く、 update lock を要求できます。
kyrt inc 242016/5/18
Lock compatibility matrix
Request \ Granted None Shared Update Exclusive
Shared No conflict No conflict Conflict Conflict
Update No conflict No conflict Conflict Conflict
Exclusive No conflict Conflict Conflict Conflict
kyrt inc 252016/5/18
https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/
https://technet.microsoft.com/ja-jp/library/ms175519(v=sql.105).aspx
Task<ConditionalValue<TValue>> TryGetValueAsync(
ITransaction tx,
TKey key,
LockMode lockMode
)
Default/Update
Granted:既に取られてるロック
Request:要求されたロック
Timeoutは4秒
G(U)/R(S)時のSQL Serverとの違い
 前図のmatrix の赤枠の部分は、 Reliable Collection と、SQL
Serverで違います
 この差によって、Reliable Collectionは、書込に最適化され、 SQL
Serverは読み込みに最適化されるという違いが生まれます。
 Reliable Collection では、update lockの期間は短くほとんどの場
合、exclusive に昇格して終わることを前提としています。
 それに対して、SQL Serverでは書込はshard lock が開放される
まで待機されます。
kyrt inc 262016/5/18
動作比較
 上が、Reliable Collection,下がSQL Server
 横軸が時間で、それぞれ、2つのtransactionがある
 黄色線が、tnxid 2 が、shard lock を要求したタイミング
kyrt inc 272016/5/18
UTxnId 1
STxnId 2
U->X
S
UTxnId 1
STxnId 2
U->X
Reliable Collection
SQL ServerSQL Server
動作解説
TxnId1が、update lockを掛けている時、TxnId2
がShard Lockを要求した場合、Reliable
CollectionではUpdate Lock が、Exclusive
Lock になって更新が終わりlockが開放されるま
で待機
それに対して、SQL Serverでは、Shard Lockは
成功します。Shard lockが開放されてから、
Exclusive lock ->更新という処理に流れる
kyrt inc 282016/5/18
基本的な動き
2016/5/18 kyrt inc 29
ITransaction
Reliable Collection の全ての操作は、
ITransaction が必要
ITransaction は、StateManager の
CreateTransaction で取得
kyrt inc 302016/5/18
参照:Working with Reliable Collections
https://azure.microsoft.com/en-us/documentation/articles/service-fabric-work-with-reliable-collections/
code sample
https://gist.github.com/takekazuomi/7d75b
61cbb4596e5f638f40e0196a32d
kyrt inc 312016/5/18
private async Task MyFunction(string dictionaryName, string key, long value, CancellationToken cancellationToken)
{
var myDic = await StateManager.GetOrAddAsync<IReliableDictionary<string, long>>(dictionaryName);
retry:
try
{
using (ITransaction tx = StateManager.CreateTransaction())
{
await myDic.AddAsync(tx, key, value);
await tx.CommitAsync();
}
}
catch (TimeoutException)
{
await Task.Delay(100, cancellationToken); goto retry;
}
}
https://gist.github.com/takekazuomi/7d75b61cbb4596e5f638f40e0196a32d
lock
dictionary methods がkeyを受け取ると、keyに
関連付けて、reader/writer lock を確保します。
この例(AddAsync)では write lock を取りますが、
読むだけの場合は、read lock を取ります
もし2つ以上のスレッドから同時に同じキーで更
新をかけようとすると、1つのスレッドだけが更新
でき、残りはblock されます。デフォルトでは4秒
でタイムアウトし TimeoutException が発生しま
す
kyrt inc 322016/5/18
read-your-own-writes
lock が取れると、 key と value object の references
をITransaction オブジェクトに関連付けられた、内部
的なディクショナリに設定します。こうやって、read-
your-own-writes の semantics を実装しています。
commit 前でも更新されたように見えるってことです。
次に、 AddAsync は、 key と value objects は、byte
array にシリアライズして、local node の log file に追
記し、全ての secondary replicas にkey/valueの情報
が配布します。しかし、commit されるまでは、ディク
ショナリのデータの一部とはみなされません。
kyrt inc 332016/5/18
commit
 CommitAsync が呼ばれると、local node のlog file にコ
ミット情報を書込んで、全てのreplica に配布します。 返信
が、quorum (majority) になれば、書き込み成功で、ロック
はリリースされ、他のスレッドでもその値を操作できるよう
になります
 CommitAsync が呼ばれない場合 、ITransaction object
はdispose されます。 その場合、Service Fabric はabort
情報をlocal node の log file に追記します。この場合は、
secondary replica には何も送信する必要はありません。
その後、すべてのロックがリリースされます。
kyrt inc 342016/5/18
最後に
2016/5/18 kyrt inc 35
 Reliable Collection は、Service Fabric の要の1つです。
 残念ながら、現時点は、Service Fabric On Linux、.NET
以外のクライアント(guest executable) では使えません。
 単体でも使いたいところですが、Service Fabric の パー
テーション分割、リプリケーションを活用した機能なので、
切り離してしまうと利点半減以下かもしれません。
 足回りは、RDBのストレージエンジン並に気合が入ってる
ようです。
 Backup/Restoreなどもあります
 次回は、Actorをやります。
kyrt inc 362016/5/18
履歴
2016/5/18 初版
2016/5/20 lock 部分を更新
kyrt inc 372016/5/18

Contenu connexe

Tendances

S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携
S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携
S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携Microsoft Azure Japan
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~Masaya Aoyama
 
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~ShuheiUda
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するパブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するHironobu Saitoh
 
S03 企業内システムと Microsoft Azure の VPN 接続
S03 企業内システムと Microsoft Azure の VPN 接続S03 企業内システムと Microsoft Azure の VPN 接続
S03 企業内システムと Microsoft Azure の VPN 接続Microsoft Azure Japan
 
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...VirtualTech Japan Inc.
 
G tech2016 Azureを使った災害復旧の基礎
G tech2016 Azureを使った災害復旧の基礎G tech2016 Azureを使った災害復旧の基礎
G tech2016 Azureを使った災害復旧の基礎Trainocate Japan, Ltd.
 
Microsoft Azureを使ったバックアップの基礎
Microsoft Azureを使ったバックアップの基礎Microsoft Azureを使ったバックアップの基礎
Microsoft Azureを使ったバックアップの基礎Tetsuya Yokoyama
 
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...VirtualTech Japan Inc.
 
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月VirtualTech Japan Inc.
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep DiveToru Makabe
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてSatoshi Shimazaki
 
20180630 interact2018 rev1
20180630 interact2018 rev120180630 interact2018 rev1
20180630 interact2018 rev1Takano Masaru
 
ConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケースConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケースJunichi Noda
 
あらためて Azure virtual network
あらためて Azure virtual networkあらためて Azure virtual network
あらためて Azure virtual networkKuniteru Asami
 
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月VirtualTech Japan Inc.
 
OpenStack Object Storage; Usage
OpenStack Object Storage; UsageOpenStack Object Storage; Usage
OpenStack Object Storage; Usageirix_jp
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceToru Makabe
 

Tendances (20)

S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携
S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携
S04 企業内システムと Microsoft Azure の VPN 接続、ファイルサーバー連携
 
Microsoft azure
Microsoft azureMicrosoft azure
Microsoft azure
 
OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~OpenStack概要 ~仮想ネットワーク~
OpenStack概要 ~仮想ネットワーク~
 
S11 StorSimple 入門
S11 StorSimple 入門S11 StorSimple 入門
S11 StorSimple 入門
 
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
 
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解するパブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
 
S03 企業内システムと Microsoft Azure の VPN 接続
S03 企業内システムと Microsoft Azure の VPN 接続S03 企業内システムと Microsoft Azure の VPN 接続
S03 企業内システムと Microsoft Azure の VPN 接続
 
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
CyberAgent: How We Deployed Production Kubernetes Clusters on OpenStack witho...
 
G tech2016 Azureを使った災害復旧の基礎
G tech2016 Azureを使った災害復旧の基礎G tech2016 Azureを使った災害復旧の基礎
G tech2016 Azureを使った災害復旧の基礎
 
Microsoft Azureを使ったバックアップの基礎
Microsoft Azureを使ったバックアップの基礎Microsoft Azureを使ったバックアップの基礎
Microsoft Azureを使ったバックアップの基礎
 
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
サイバーエージェント様 導入事例:OpenStack Fast Track – 若葉マークStackerのStacker教習所 - OpenStack最新...
 
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
知っておくべきCephのIOアクセラレーション技術とその活用方法 - OpenStack最新情報セミナー 2015年9月
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
 
20180630 interact2018 rev1
20180630 interact2018 rev120180630 interact2018 rev1
20180630 interact2018 rev1
 
ConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケースConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケース
 
あらためて Azure virtual network
あらためて Azure virtual networkあらためて Azure virtual network
あらためて Azure virtual network
 
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
OpenStackをコマンドで攻める! 構築・運用とトラブル解決 - OpenStack最新情報セミナー 2014年6月
 
OpenStack Object Storage; Usage
OpenStack Object Storage; UsageOpenStack Object Storage; Usage
OpenStack Object Storage; Usage
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 

Similaire à Azure Fabric Service Reliable Collection

CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Cosmos DB Consistency Levels and Introduction of TLA+
Cosmos DB Consistency Levels and Introduction of TLA+ Cosmos DB Consistency Levels and Introduction of TLA+
Cosmos DB Consistency Levels and Introduction of TLA+ Takekazu Omi
 
Service Fabric での高密度配置
 Service Fabric での高密度配置 Service Fabric での高密度配置
Service Fabric での高密度配置Takekazu Omi
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKShuheiUda
 
OpenStack Summit November 2014 Paris出張報告
OpenStack Summit November 2014 Paris出張報告OpenStack Summit November 2014 Paris出張報告
OpenStack Summit November 2014 Paris出張報告Mitsuhiro SHIGEMATSU
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018真吾 吉田
 
Introduction to Azure Service Fabric
Introduction to Azure Service FabricIntroduction to Azure Service Fabric
Introduction to Azure Service FabricTakekazu Omi
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Masayuki Ozawa
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座sisawa
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコシステムズ合同会社
 
OCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPOCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPTetsuya Sodo
 
Azure Container Services and Microservices design pattern
Azure Container Services and Microservices design patternAzure Container Services and Microservices design pattern
Azure Container Services and Microservices design patternYoshio Terada
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...Insight Technology, Inc.
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンseiichi arai
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
Java on Kubernetes on Azure
Java on Kubernetes on AzureJava on Kubernetes on Azure
Java on Kubernetes on AzureYoshio Terada
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~Naoki (Neo) SATO
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加するYuto Takei
 

Similaire à Azure Fabric Service Reliable Collection (20)

CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Cosmos DB Consistency Levels and Introduction of TLA+
Cosmos DB Consistency Levels and Introduction of TLA+ Cosmos DB Consistency Levels and Introduction of TLA+
Cosmos DB Consistency Levels and Introduction of TLA+
 
Service Fabric での高密度配置
 Service Fabric での高密度配置 Service Fabric での高密度配置
Service Fabric での高密度配置
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDK
 
OpenStack Summit November 2014 Paris出張報告
OpenStack Summit November 2014 Paris出張報告OpenStack Summit November 2014 Paris出張報告
OpenStack Summit November 2014 Paris出張報告
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018
 
Introduction to Azure Service Fabric
Introduction to Azure Service FabricIntroduction to Azure Service Fabric
Introduction to Azure Service Fabric
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
シスコ装置を使い倒す!組込み機能による可視化からセキュリティ強化
 
OCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCPOCP Meetup Tokyo #05 ECK on OCP
OCP Meetup Tokyo #05 ECK on OCP
 
Azure Container Services and Microservices design pattern
Azure Container Services and Microservices design patternAzure Container Services and Microservices design pattern
Azure Container Services and Microservices design pattern
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
 
AWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターンAWS Glueを使った Serverless ETL の実装パターン
AWS Glueを使った Serverless ETL の実装パターン
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
Java on Kubernetes on Azure
Java on Kubernetes on AzureJava on Kubernetes on Azure
Java on Kubernetes on Azure
 
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 

Plus de Takekazu Omi

jazug34 Container Apps Key Vault
jazug34 Container Apps Key Vaultjazug34 Container Apps Key Vault
jazug34 Container Apps Key VaultTakekazu Omi
 
Bicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure DeployBicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure DeployTakekazu Omi
 
Bicep 入門 MySQL編
Bicep 入門 MySQL編Bicep 入門 MySQL編
Bicep 入門 MySQL編Takekazu Omi
 
//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介Takekazu Omi
 
//build 2021 bicep 0.4
//build 2021 bicep 0.4//build 2021 bicep 0.4
//build 2021 bicep 0.4Takekazu Omi
 
bicep dev container
bicep dev containerbicep dev container
bicep dev containerTakekazu Omi
 
Introduction of Azure Docker Integration
Introduction of Azure Docker IntegrationIntroduction of Azure Docker Integration
Introduction of Azure Docker IntegrationTakekazu Omi
 
20180421 Azure Architecture Cloud Design Patterns
20180421 Azure Architecture Cloud Design Patterns20180421 Azure Architecture Cloud Design Patterns
20180421 Azure Architecture Cloud Design PatternsTakekazu Omi
 
Azure Application Insights とか
Azure Application Insights とかAzure Application Insights とか
Azure Application Insights とかTakekazu Omi
 
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編Takekazu Omi
 
Cosmos DB 入門 multi model multi API編
Cosmos DB 入門 multi model multi API編Cosmos DB 入門 multi model multi API編
Cosmos DB 入門 multi model multi API編Takekazu Omi
 
Azure Service Fabric Cluster の作成
Azure  Service Fabric Cluster の作成Azure  Service Fabric Cluster の作成
Azure Service Fabric Cluster の作成Takekazu Omi
 
祝GA、 Service Fabric 概要
祝GA、 Service Fabric 概要祝GA、 Service Fabric 概要
祝GA、 Service Fabric 概要Takekazu Omi
 
Servcie Fabric and Cloud Design Pattern
Servcie Fabric and Cloud Design PatternServcie Fabric and Cloud Design Pattern
Servcie Fabric and Cloud Design PatternTakekazu Omi
 
Azure Service Fabric 紹介
Azure Service Fabric 紹介Azure Service Fabric 紹介
Azure Service Fabric 紹介Takekazu Omi
 
Azure Cloud Application Design and Implementation Guidance の紹介
Azure Cloud Application Design and Implementation Guidance の紹介Azure Cloud Application Design and Implementation Guidance の紹介
Azure Cloud Application Design and Implementation Guidance の紹介Takekazu Omi
 
Introduction to DocumentDB
Introduction to DocumentDBIntroduction to DocumentDB
Introduction to DocumentDBTakekazu Omi
 

Plus de Takekazu Omi (20)

jazug34 Container Apps Key Vault
jazug34 Container Apps Key Vaultjazug34 Container Apps Key Vault
jazug34 Container Apps Key Vault
 
bicep 0.5 pre
bicep 0.5 prebicep 0.5 pre
bicep 0.5 pre
 
Bicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure DeployBicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure Deploy
 
Bicep 入門 MySQL編
Bicep 入門 MySQL編Bicep 入門 MySQL編
Bicep 入門 MySQL編
 
//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介//Build 2021 FASTER 紹介
//Build 2021 FASTER 紹介
 
//build 2021 bicep 0.4
//build 2021 bicep 0.4//build 2021 bicep 0.4
//build 2021 bicep 0.4
 
bicep 紹介
bicep 紹介bicep 紹介
bicep 紹介
 
bicep dev container
bicep dev containerbicep dev container
bicep dev container
 
Introduction of Azure Docker Integration
Introduction of Azure Docker IntegrationIntroduction of Azure Docker Integration
Introduction of Azure Docker Integration
 
20180421 Azure Architecture Cloud Design Patterns
20180421 Azure Architecture Cloud Design Patterns20180421 Azure Architecture Cloud Design Patterns
20180421 Azure Architecture Cloud Design Patterns
 
Azure Application Insights とか
Azure Application Insights とかAzure Application Insights とか
Azure Application Insights とか
 
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
第8回 Tokyo Jazug Night Ignite 2017 落穂拾い Storage編
 
life with posh
life with poshlife with posh
life with posh
 
Cosmos DB 入門 multi model multi API編
Cosmos DB 入門 multi model multi API編Cosmos DB 入門 multi model multi API編
Cosmos DB 入門 multi model multi API編
 
Azure Service Fabric Cluster の作成
Azure  Service Fabric Cluster の作成Azure  Service Fabric Cluster の作成
Azure Service Fabric Cluster の作成
 
祝GA、 Service Fabric 概要
祝GA、 Service Fabric 概要祝GA、 Service Fabric 概要
祝GA、 Service Fabric 概要
 
Servcie Fabric and Cloud Design Pattern
Servcie Fabric and Cloud Design PatternServcie Fabric and Cloud Design Pattern
Servcie Fabric and Cloud Design Pattern
 
Azure Service Fabric 紹介
Azure Service Fabric 紹介Azure Service Fabric 紹介
Azure Service Fabric 紹介
 
Azure Cloud Application Design and Implementation Guidance の紹介
Azure Cloud Application Design and Implementation Guidance の紹介Azure Cloud Application Design and Implementation Guidance の紹介
Azure Cloud Application Design and Implementation Guidance の紹介
 
Introduction to DocumentDB
Introduction to DocumentDBIntroduction to DocumentDB
Introduction to DocumentDB
 

Dernier

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Dernier (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

Azure Fabric Service Reliable Collection

  • 1. 第1回 JAZUG Tokyo Night Azure Service Fabric / Reliable Collection Takekazu Omi takekazu.omi@kyrt.in 2016/5/20 R.1.1
  • 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/5/18
  • 4. はじめに  4回ほどに分けて、Service Fabric の話をする(予定)  (1) Reliable Collection, (2) Actor, (3) Cluster の作成、(4) Cluster の管理 運用 (予定)、今回はReliable Collection  先日のGABCで、概要的な話をしたので、ここではもう少しだけ、中に入って Service Fabric の特徴的な部分の話をします。(あまり、Microservice という 話はしません)  Global Azure Bootcamp で話したService Fabricの概要の動画 ⇨ https://youtu.be/bVWHPjcjeoc?t=38m  過去に、話した時の資料 ⇨ http://www.slideshare.net/takekazuomi/presentations  概要は週末に「C#ユーザー会 //build/ 2016振り返り 勉強会」で話します ⇨ https://csugjp.doorkeeper.jp/events/43951 kyrt inc 42016/5/18
  • 6. API Gateway kyrt inc 62016/5/18 APIGateway/stateless Naming Service P1 P2 Pn S2 S3 Sn S1 Service Fabric Cluster P S S P S S P S S statefulservice
  • 7. プログラミングモデル kyrt inc 72016/5/18 reliable service reliable actor guest executable stateless service stateful service
  • 8. Reliable Collection Service Fabric(以下SF) の重要なビルディン グブロックの1つ 永続化付きのコレクション ⇨ 高可用(replicated) ⇨ スケーラブル(partitioned) ⇨ 低レイテンシー ⇨ transacted kyrt inc 82016/5/18
  • 9. stateless services + external store kyrt inc 92016/4/16
  • 12. 基本的構造 高可用で低レイテンシーな永続 化機構  書き込みは、Primaryのみ  全てのwriteは、 primary + replicas の majority quorum 3台構成なら、自分自身と他1 台に書ければ完了  read はローカルから kyrt inc 122016/5/18 Node 1/Primary Node 2/Secondary Node 3/Secondary
  • 13. 特徴  Replicated:状態の変更がレプリケートされ高可用  Persisted: データがディスクに永続化されるため、大規模な 障害に強い(例: データセンターの電源障害)  Asynchronous: API は非同期で、IO の実行時にもnon- blocking  Transactional : 複数の Reliable Collection 跨ったトランザ クションが可能 kyrt inc 132016/5/18
  • 14. Microsoft.ServiceFabric.Data.Collections Microsoft.ServiceFabric.Data.Collections は次 の 2 つだけ。 Reliable Dictionary<T>: key/value コレクション、 ConcurrentDictionary の Reliable Collection 版 Reliable Queue<T>: FIFO コレクション、 ConcurrentQueueの Reliable Collection 版 kyrt inc 142016/5/18
  • 15. Collections.Concurrent との比較 Asynchronous: 操作は非同期、タスクを返す No out parameters: out の代わりに、 ConditionalValue<T> を使う Transactions: トランザクション オブジェクトを 使用することで、トランザクション内で複数の Reliable Collection に対してユーザーがグ ループ操作が可能 kyrt inc 152016/5/18
  • 16. 例; kyrt inc 162016/5/18 protected override async Task RunAsync(CancellationToken cancellationToken) { var myDic = await StateManager.GetOrAddAsync<IReliableDictionary<string, long>>("myDictionary"); var myQueue = await StateManager.GetOrAddAsync<IReliableQueue<long>>("myQueue"); var i = 0; while (true) { cancellationToken.ThrowIfCancellationRequested(); using (var tx = StateManager.CreateTransaction()){ ConditionalValue<long> rd = await myDic.TryGetValueAsync(tx, "Counter"); long rq = await myQueue.GetCountAsync(tx); ServiceEventSource.Current.ServiceMessage(this, "Current Counter Value: {0}, {1}", rd.HasValue ? rd.Value.ToString() : "Value does not exist.", rq); var l = await myDic.AddOrUpdateAsync(tx, "Counter", 1, (key, value) => ++value); // if (++i%10 == 0) continue; await myQueue.EnqueueAsync(tx, l); await tx.CommitAsync(); } await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } https://gist.github.com/takekazuomi/c17e497424dfc7e03e0bfa4d1e9c2877
  • 17. 使用上の注意 Reliable Collections のデータは、Data Contract Serializer でシリアライズ Types Supported by the Data Contract Serializer https://msdn.microsoft.com/en- us/library/ms731923(v=vs.110).aspx kyrt inc 172016/5/18
  • 19. Isolation level Reliable Collections では、操作とノードのロール(Primary/Secondary)に よって自動的に 下記のisolation level のどちらかが選択される。 Transaction内は、Read Your Writes で、すべての書き込みは、後続の読 み取りによって認識される  Repeatable Read 同じトランザクション中では同じデータは何度読み取りしても毎回同じ値  Snapshot トランザクション中は開始時のスナップショットを読む kyrt inc 192016/5/18
  • 20. Role/Operation別 Isolation level Operation \ Role Primary Secondary Single entity read Repeatable Read Snapshot Enumeration \ Count Snapshot Snapshot kyrt inc 202016/5/18 Operation \ Role Primary Secondary Single entity read Snapshot Snapshot Enumeration \ Count Snapshot Snapshot Reliable Dictionary Reliable Queue https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/#isolation-levels
  • 21. Persistence Model(1)  DataContractSerializer でシリアライズされて永続化  logとcheck point を使った永続性モデル(古典的な)、変更はlogに書き 込まれ、時折完全な状態を書き込む(checkpoint) この方法だと、sequential append-only writes なのでパフォーマンスが 出る kyrt inc 212016/5/18 開始 変更1 変更2 開始 開始+変更1 P S 開始 開始+変更1+変更2 開始 ① ③②
  • 22. Persistence Model(2) commit の時の時に、Reliable State Manager が、 log に記録し、log record をレプリカに配布。 (①と ②、check point が走らなかったとき) Reliable Collection はメモリー内の操作だけを管理 ノードに障害が起きて再起動した場合、 Reliable State Managerが、ローカルの log から Reliable Collectionを復元 kyrt inc 222016/5/18
  • 23. Persistence Model(3)  check point ③ では、 Reliable State Manager が、 Reliable Collection に全データを DISK に書込むように要 求。書き込み終了後 Reliable State Managerは、log を切り 捨てる  ②の段階では、Primary, Secondary のどちらの log にも変 更1と変更2の内容が書き込まれている。もし、DISK容量が 無限ならば、原理的にはこのまま続けていっても論理適には 破綻しない。実際DISKは有限なので、いちど全データを同 期し直すタイミングを設けている。③(これがcheck point) kyrt inc 232016/5/18
  • 24. Lock  Reliable Collection では、全てのトランザクションは2フェーズ。 ロックは、トランザクションが abort または commit で終了するまで 解放されない  Reliable Collection は、基本 Exclusive locks を取得する。読み 取りの場合、いくつかの要因に依存して lock が変わる。  snapshot isolation の場合は lock free。 repeatable read operation の場合は、デフォルトは shared locks です。ただし、 repeatable read operation の場合は、ユーザーは shared locks では無く、 update lock を要求できます。 kyrt inc 242016/5/18
  • 25. Lock compatibility matrix Request \ Granted None Shared Update Exclusive Shared No conflict No conflict Conflict Conflict Update No conflict No conflict Conflict Conflict Exclusive No conflict Conflict Conflict Conflict kyrt inc 252016/5/18 https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/ https://technet.microsoft.com/ja-jp/library/ms175519(v=sql.105).aspx Task<ConditionalValue<TValue>> TryGetValueAsync( ITransaction tx, TKey key, LockMode lockMode ) Default/Update Granted:既に取られてるロック Request:要求されたロック Timeoutは4秒
  • 26. G(U)/R(S)時のSQL Serverとの違い  前図のmatrix の赤枠の部分は、 Reliable Collection と、SQL Serverで違います  この差によって、Reliable Collectionは、書込に最適化され、 SQL Serverは読み込みに最適化されるという違いが生まれます。  Reliable Collection では、update lockの期間は短くほとんどの場 合、exclusive に昇格して終わることを前提としています。  それに対して、SQL Serverでは書込はshard lock が開放される まで待機されます。 kyrt inc 262016/5/18
  • 27. 動作比較  上が、Reliable Collection,下がSQL Server  横軸が時間で、それぞれ、2つのtransactionがある  黄色線が、tnxid 2 が、shard lock を要求したタイミング kyrt inc 272016/5/18 UTxnId 1 STxnId 2 U->X S UTxnId 1 STxnId 2 U->X Reliable Collection SQL ServerSQL Server
  • 28. 動作解説 TxnId1が、update lockを掛けている時、TxnId2 がShard Lockを要求した場合、Reliable CollectionではUpdate Lock が、Exclusive Lock になって更新が終わりlockが開放されるま で待機 それに対して、SQL Serverでは、Shard Lockは 成功します。Shard lockが開放されてから、 Exclusive lock ->更新という処理に流れる kyrt inc 282016/5/18
  • 30. ITransaction Reliable Collection の全ての操作は、 ITransaction が必要 ITransaction は、StateManager の CreateTransaction で取得 kyrt inc 302016/5/18 参照:Working with Reliable Collections https://azure.microsoft.com/en-us/documentation/articles/service-fabric-work-with-reliable-collections/
  • 31. code sample https://gist.github.com/takekazuomi/7d75b 61cbb4596e5f638f40e0196a32d kyrt inc 312016/5/18 private async Task MyFunction(string dictionaryName, string key, long value, CancellationToken cancellationToken) { var myDic = await StateManager.GetOrAddAsync<IReliableDictionary<string, long>>(dictionaryName); retry: try { using (ITransaction tx = StateManager.CreateTransaction()) { await myDic.AddAsync(tx, key, value); await tx.CommitAsync(); } } catch (TimeoutException) { await Task.Delay(100, cancellationToken); goto retry; } } https://gist.github.com/takekazuomi/7d75b61cbb4596e5f638f40e0196a32d
  • 32. lock dictionary methods がkeyを受け取ると、keyに 関連付けて、reader/writer lock を確保します。 この例(AddAsync)では write lock を取りますが、 読むだけの場合は、read lock を取ります もし2つ以上のスレッドから同時に同じキーで更 新をかけようとすると、1つのスレッドだけが更新 でき、残りはblock されます。デフォルトでは4秒 でタイムアウトし TimeoutException が発生しま す kyrt inc 322016/5/18
  • 33. read-your-own-writes lock が取れると、 key と value object の references をITransaction オブジェクトに関連付けられた、内部 的なディクショナリに設定します。こうやって、read- your-own-writes の semantics を実装しています。 commit 前でも更新されたように見えるってことです。 次に、 AddAsync は、 key と value objects は、byte array にシリアライズして、local node の log file に追 記し、全ての secondary replicas にkey/valueの情報 が配布します。しかし、commit されるまでは、ディク ショナリのデータの一部とはみなされません。 kyrt inc 332016/5/18
  • 34. commit  CommitAsync が呼ばれると、local node のlog file にコ ミット情報を書込んで、全てのreplica に配布します。 返信 が、quorum (majority) になれば、書き込み成功で、ロック はリリースされ、他のスレッドでもその値を操作できるよう になります  CommitAsync が呼ばれない場合 、ITransaction object はdispose されます。 その場合、Service Fabric はabort 情報をlocal node の log file に追記します。この場合は、 secondary replica には何も送信する必要はありません。 その後、すべてのロックがリリースされます。 kyrt inc 342016/5/18
  • 36.  Reliable Collection は、Service Fabric の要の1つです。  残念ながら、現時点は、Service Fabric On Linux、.NET 以外のクライアント(guest executable) では使えません。  単体でも使いたいところですが、Service Fabric の パー テーション分割、リプリケーションを活用した機能なので、 切り離してしまうと利点半減以下かもしれません。  足回りは、RDBのストレージエンジン並に気合が入ってる ようです。  Backup/Restoreなどもあります  次回は、Actorをやります。 kyrt inc 362016/5/18
  • 37. 履歴 2016/5/18 初版 2016/5/20 lock 部分を更新 kyrt inc 372016/5/18

Notes de l'éditeur

  1. http://microservices.io/patterns/apigateway.html
  2. 今回は、赤枠のところの実装で出てくる、Reliable Collection の話をします。
  3. コレクションを取得してる、StateManager は、基底クラス(StatefulServiceBase )のプロパティ StateManager が、Reliable State Manager StateManager.CreateTransaction でTransactionを作ってる、必須。auto commit 的なのは無い。 myDicにカウンターをセットして、その値をqueueに入れる。 rq は、Queueの数 FIFO 動かしてみる?
  4. ここから、DBっぽくなってくる。
  5. 永続化の宿命なのか、このあたりからDBっぽくなってくる
  6. シリアライザーはプラグイン可能になるとう話もチラホラ https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/#comment-2410174442
  7. リカバリは開始時点のデータに変更を適応する形で行われるため、リカバリ時間の問題があるかもしれない。
  8. リカバリは開始時点のデータに変更を適応する形で行われるため、リカバリ時間の問題があるかもしれない。
  9. https://msdn.microsoft.com/ja-jp/library/jj856598(v=sql.120).aspx ロックの互換性 Granted 既に取られてるロック Request 要求されたロック https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim(v=vs.110).aspx ReaderWriterLockSlim だと、名前が違う(Upgrade)けど、これも同じの感じ
  10. サービスとパーテーションが1:1でくっついているのが良いところかな?
  11. このコードでは、 TimeoutException を catch して100ms待って再試行していますが、再試行ロジックは、用途に合わせて調整してください。
  12. このコードでは、 TimeoutException を catch して100ms待って再試行していますが、再試行ロジックは、用途に合わせて調整してください。
  13. 基本的な動きのところは、Jeffrey Richter の記事を参考にしたのだけど微妙に記述が違う。確認が難しいので