SlideShare a Scribd company logo
1 of 29
Download to read offline
Retry Monad
for Transient Fault Handling

F#とWindows Azure と私




                      2012.04.14 #CLRH69   ぜくる/@zecl
ぜくる
      twitter : @zecl

• 北海道旭川市在住の.NET系プログラマ。オブ
  ジェクト指向を得意としながらも、ここ数年、
  関数型言語に魅了されています。

• F#が大好きです。

• Windows Azure と ASP.NET MVC3を利用した
  開発のお仕事をしています。
???
ところで、Windows Azure いいですよね




                   年賀状いただきました。
でも、いいことばかりじゃない。


• クラウドアプリケーションだと、気をつけなく
  ちゃいけないことがたくさんあるよね。
Transient Fault Handling
• 他のクラウドサービスに依存するようなクラウ
  ドアプリケーションを開発する場合、開発者が
  対処しなければならない課題の一つに、
  “一時的な障害”がある。

インフラストラクチャレベルの障害だったり、
ネットワークの問題など一時的な条件のために発
生する障害のことです。
SQL Azureが接続を切断するケース

   過剰な      実行時間の長い
 リソースの使用      クエリ


 1 回の実行時間     接続の
 が長いトランザ
    クション    アイドル状態
Microsoft Enterprise Library 5.0
Integration Pack for Windows Azure
• Transient Fault Handling Application Block (Topaz)

Windows Azureのプラットフォームに含まれる
サービス利用時に発生する一時的なエラー(一時
的/過度に発生するエラー)からWindows Azureア
プリケーションを回復させるために用意されたア
プリケーションブロック。
Microsoft Enterprise Library 5.0
Integration Pack for Windows Azure
• Autoscaling Application Block (WASABi)

利用時間帯やサーバー負荷のパターンに合わせて
ルールを設定し、そのルールをログから評価して
自動スケールなどを設定できるアプリケーション
ブロック。
Topazの主要な構成要素

• 検出戦略(カスタマイズ可能)
  ITransientErrorDetectionStrategyインターフェ
イスを実装して作成

• 再試行戦略(カスタマイズ可能)
  RetryStrategy抽象クラスを継承して作成

 検出戦略 + 再試行戦略 =         RetryPolicy
基本的な使い方(C#)
4つの組み込み検出戦略

• SQL Azure
 SqlAzureTransientErrorDetectionStrategy
• Windows Azure ストレージサービス
 StorageTransientErrorDetectionStrategy
• Windows Azure サービスバス
 ServiceBusTransientErrorDetectionStrategy
• Windows Azure キャッシングサービス
 CacheTransientErrorDetectionStrategy
F#でクラウドと言えば・・・
M-Brace



          cloudモナド
          が話題に…

          (・∀・)イイネ!
モナドって何ですか?
モナドは単なる自己関手の圏
におけるモノイド対象だよ。
何か問題でも?

    フィリップ・ワドラー
モナド則

• return x >>= f == f x

• m >>= return   == m

• (m >>= f) >>= g == m >>= (¥x -> f x >>= g)
モナド則(Haskellのdo記法で)
• do { v <- return x; f v } = do { f x }
• do { v <- m; return v } = do { m }
• do { x <- m;
       y <- f x;
       gy}
= do { y <- do { x <- m;
                 f x };
       gy}
モナド則(F#のコンピューテーション式で)
• builder.Bind(builder.Return(x), f) = f x

• builder.Bind(m, fun x -> builder.Return(x)) = m

• builder.Bind(builder.Bind(m, f), g)
= builder.Bind(m, fun x -> builder.Bind(f x, g))
モナド則って何を言わんとしている?


• 左右単位元 return が存在し、
  且つ結合法則が成立するもの
Retry Monad
for Transient Fault Handling
                    とはなんですか?
わたしが考えたオリジナルのモナド

一時的障害が発生するかもしれない計算について、異
なるポリシーを適用しながらリトライ処理を行い、ひ
とつの計算として包括的に扱うことができるモナド。

RetryMonadの計算結果はChoice<’T1,’T2>型で得るこ
とができ、Eitherモナドで処理することができる。
OOPとFPのライブラリのチカラを借りよう
• Microsoft.Practices.TransientFaultHandling.Core
MS EL 5 Integration Pack for Windows Azureの心
臓部。WASABiとTopazを含むC#(オブジェクト指
向プログラミング)で書かれたライブラリ。

 • Fsharpx.Core
Fsharpxの心臓部。標準的なモナドの実装などを含
むF#(関数プログラミング)で書かれたライブラリ。
ソースコードを見てみましょう…

More Related Content

Similar to Retry monad for transient fault handling

復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0Yuta Matsumura
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVMHiroshi Maekawa
 
Claudia Enqueteの作り方教えます
Claudia Enqueteの作り方教えますClaudia Enqueteの作り方教えます
Claudia Enqueteの作り方教えますAkira Hatsune
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化Takuya Ueda
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
スマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブルスマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブルHiroaki Wakamatsu
 
Infer.NETを使ってLDAを実装してみた
Infer.NETを使ってLDAを実装してみたInfer.NETを使ってLDAを実装してみた
Infer.NETを使ってLDAを実装してみた正志 坪坂
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
HowtoよいデザインHiroki Yagita
 
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptxhkharu0803
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#ta2c
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用Nobuaki Oshiro
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)VOYAGE GROUP
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 

Similar to Retry monad for transient fault handling (20)

つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0復習も兼ねて!C#6.0-7.0
復習も兼ねて!C#6.0-7.0
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
Claudia Enqueteの作り方教えます
Claudia Enqueteの作り方教えますClaudia Enqueteの作り方教えます
Claudia Enqueteの作り方教えます
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
スマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブルスマートフォン対応、気をつけたいトラブル
スマートフォン対応、気をつけたいトラブル
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
Infer.NETを使ってLDAを実装してみた
Infer.NETを使ってLDAを実装してみたInfer.NETを使ってLDAを実装してみた
Infer.NETを使ってLDAを実装してみた
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
Howtoよいデザイン
 
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
Code iq×japanr 公開用
Code iq×japanr 公開用Code iq×japanr 公開用
Code iq×japanr 公開用
 
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 

Retry monad for transient fault handling