PR

 Google App Engineでは、さまざまな機能において「いつでも例外(エラー)が発生する可能性がある」という仕様になっています。Datastoreのタイムアウトや処理時間の上限に到達してしまった場合の例外が有名です。リソースの使用量を課金額の上限まで使いきってしまった場合にも例外が発生します。

 中でも、アプリケーションが動作するサーバー「AppServer」の障害(エラー)への対策には注意が必要です。うまくエラーを避けるための設計ノウハウを紹介します。

アプリケーションからデータだけを送信する

 Google App Engineのアプリケーションは、「AppServer」というサーバーで実行されます。このAppServerは、これまで何度か障害が発生したり、極端にレスポンスが遅くなったりしたことがあります。AppServer自体に障害が発生すると、アプリケーションの中でどれだけ例外処理を実装していても意味がありません。このような場合でも、想定外のエラーページを表示させないための設計ノウハウがあります。Ajaxを活用し、アプリケーションからWebブラウザーに対して、データだけを送信するというものです。

 具体的には、アプリケーションの仕組みを次のようにします。多くのWebアプリケーションでは、動的なページ(HTMLファイル)をサーバー側で生成します(図1上)。そうではなく、ブラウザー側でページを動的に構成します(図1下)。

図1●Webブラウザー側でエラー処理をする工夫
ブラウザー側でサーバーの障害を検知して、エラー画面を表示できる
[画像のクリックで拡大表示]
  • ブラウザー上で動的にページを構成するJavaScirptを開発して、それをブラウザーに配信する
  • AppServer上のアプリケーションは、データだけを送信する
  • ブラウザー側では、サーバーのアプリケーションからJavaScriptを使ってデータを受信し、動的にページを構成する

 こうすればAppServerに障害が発生したときにも、ブラウザー側で動作しているJavaScriptでそれを検知し、表示中のページに合わせた通知を画面に表示できます。なおJavaScriptを含むHTMLなどは、AppServerとは異なるサーバーから配信されます。そのサーバーはAppServerよりも安定しているようで、障害が発生したことは、これまでほとんどありません。