クラウド サービスの基礎 – フォールト トレラントなデータ アクセス層のご紹介
このポストは、7 月 25 日に投稿された Cloud Service Fundamentals – Introduction into Fault-Tolerant Data Access Layer の翻訳です。
編集メモ : 今回は AzureCAT チームの Valery Mizonov (英語) の投稿をご紹介します。
先日のブログ記事「テレメトリ – アプリケーションのインストルメント (英語)」では、Windows Azure SQL データベース サービスに一時的障害が発生しても運用を持続できるよう、「Windows Azure でのクラウド サービスの基礎」コード プロジェクトにおいてフォールト トレラントなデータ アクセス層の課題に取り組んだことをお伝えし、あわせて、アプリケーションのインストルメントに関するベスト プラクティスや、ソリューションの信頼性と回復性を高めるヒントをご紹介しました。
この記事では、回復性にすぐれたデータ アクセス層を構築するとは実際にどういうことか、またそのデータ アクセス層を構築するという重要な要件に対して、「クラウド サービスの基礎」プロジェクトでどのようにアプローチしたかについて、詳しく掘り下げていきます。
クラウドベースの分散アプリケーションや分散サービスの構築は、困難を極める作業です。最新のクラウド インフラストラクチャには、リソース調整、通信障害、プラットフォーム サービスの動作不安定など、設計上のものや異常に起因するものを含め、さまざまな落とし穴があるためです。このクラスの問題は通常、アプリケーション固有のサービス レベル契約 (SLA) について常に把握すると共に、潜在的な一時的障害を検出し、失敗した処理を再試行するという方法で解決されます。
処理を再試行するかどうか的確な判断を下すためには、既知の一時的障害およびその識別子 (エラー コードまたは例外のタイプ) のナレッジ ベースを構築する必要があります。これは、非常に煩雑で時間のかかる作業です。しかし、Windows Azure 開発者は、この作業を一切行わずに、より重要な作業に専念できます。一時的障害に対処するためのナレッジやインテリジェンスは、Enterprise Library の Transient Fault Handling Application Block (英語) によって実装されるためです。これにより、クラウドベース サービスの回復性を簡単に強化することができます。Transient Fault Handling Application Block は、Windows Azure に関連する潜在的な既知の一時的障害を含むナレッジ ベースと使いやすい API とから構成されます。
Cloud Service Fundamentals ソリューションは、Windows Azure SQL データベース サービスで起こりうる制限条件などの一時的エラーからデータ アクセス層を保護するうえで、Transient Fault Handling Application Block を大いに活用しています。
「クラウド サービスの基礎」コード プロジェクトにおいては、一時的障害に対する処置という観点から、以下のベスト プラクティスに沿ってデータ アクセス層を構築しました。
- NuGet から Transient Fault Handling Application Block (英語) の最新版を使用して、最新の一時的障害ナレッジ ベースと検出ロジックを活用しました。
- 一時的障害の等べきな境界を適切に定め、一時的障害が発生した場合にはアプリケーション ロジックを再試行する必要があります。
- すべての再試行と一時的障害を記録し (デコード化された調整理由を含む)、アプリケーション テレメトリにこれらの障害に関するインサイトを追加して、トラブルシューティングを促進しました。
- 特定のエンドツーエンド ビジネス トランザクションの SLA のパフォーマンスを見分け、高く評価する、再試行ロジックの期限付き動作を適用することで、具体的な再試行回数や遅延間隔についてではなく、ビジネスの SLA の観点から考えました。
- 構成において再試行ポリシーを管理し、ハードコーディングの再試行方法パラメーターを回避して、実行時の変更をサポートできるよう敏捷性が向上しました。
- SQL 接続とコマンドの(どちらか一方のみではなく) 双方に再試行ロジックを適用しました。一部の SQL コマンドは、トランザクションにより保護されていない限り、安全に再試行できないということを覚えておかなければなりません。
- 一時的障害が長時間にわたる ( 場合によっては回復不可能となる ) ことを想定して、復旧に影響がないように配慮する必要があります。たとえば、再試行の遅延間隔を急激に拡大することで、適切に再試行パターンを処理します。
このトピックに関する詳細については、wiki 記事「クラウド サービスの基礎におけるデータ アクセス層 – 一時的障害の対応 (英語)」をご参照ください。また、データベース サービス障害から回復する方法や、同様のテクニックやベスト プラクティスを利用して優れたクラウド アプリケーションを構築する方法についても、ご覧いただけます。
最後までお読みいただき、ありがとうございます。このシリーズ記事として、次回はレポート機能についてご説明します。これは、インストルメントしたアプリケーションからのテレメトリを実行するために実装されたもので、Windows Azure SQL レポート サービスおよびそのデータ仮想化機能を使用しています。