Skip to content

Azure で WCF based REST service を使っている場合、処理時間に注意! Azureのロードバランサーは1分でタイムアウト

2012年1月6日

昨年からの課題が一つ解決!解決というか原因が分かっただけですが。

Windows Azure Load Balancer Timeout Details

http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

さて、オンラインテンプレートの「WCF REST Service Template」を使用したサービスをAzureにデプロイしているのですが、メソッドの処理時間が1分を超えると何故か処理中のステップ以降はキャンセルされてメソッドの先頭から処理が再開されてしまう現象に直面しました。GETのような参照系の処理であればさほど問題はないのですが、POST等挿入・更新系の処理については予め考慮して設計しないとひどい目にあうのは想像に難くないでしょう。処理が重複して実行されるわけですから。

富士通サポートに問い合わせたところ担当の方から「1分間コネクションの状態に変化がなければロードバランサーでタイムアウトします」という回答を得たので、とにかくREST部分は1分以内に処理完了するように改修して現象が発生する条件を回避できましたが、キャンセルされるだけならまだしもメソッドの先頭から処理が再開されてしまう現象については不明なままでした。これは2011年10月頃のことです。

不明なまま忘れかけていたのですが、今日、satonaokiさんのツイートの”Load Balancer” “Timeout”というキーワードが視界に入った瞬間に「こ、これは!」と電車内でスマホながらもリンクを開いてみたところ、そのものズバリの内容でした。

In another example if you create a WCF based REST service and deployed this application to Windows Azure and configured correctly to work perfectly. The application will work absolutely fine if the HTTP request could be processed within 1 min.   If service takes more than 1 min to process the request then Load Balancer will resend the same request again. Because of it, load balancer will shut down the connection soon after it.

仕様であればいたしかたない、、、ですよね。それでも1分を超える処理をしたい場合は、KeepAliveする細工をしなければならないようです。

広告

From → .NET, Azure

One Comment
  1. 今では4分持続するようになっています。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。