優れたクラウド アプリケーションの設計
このポストは、5 月 8 日に投稿された Designing Great Cloud Applications の翻訳です。
製品向けのアプリケーションとサービス向けのアプリケーションでは、開発の手法に違いがあるということを開発者に話すと、怪訝な顔をされることがあります。オンプレミス向けアプリケーションは、ユーザーが購入し、ユーザー自身が個人で所有するハードウェアにインストールして構成を行うソフトウェアの一部として作成されます。一方、クラウド向けアプリケーションは、特定のユーザーだけではなく不特定の人に公開されるサービス群として作成されます。今回は、その違いをご説明します。
オンプレミス サーバー向けのアプリケーションを作成する場合、使用するハードウェアとソフトウェアは決まっていて、ログオンすれば必ず接続が確立されると想定することができます。サーバー上で実行するアプリケーションは管理可能であり、そのためいつでも同レベルのパフォーマンスを期待できます。データのセキュリティ コンテキストは、ユーザーが把握し管理することができます。いったんソフトウェアとハードウェアを構成すれば、何か問題が発生しても、ログに記録されたイベントを確認すれば何が起こったかをほぼ確実に把握することができます。ユーザー自身が所有し管理とメンテナンスを行うサーバーでは、大抵、アプリケーションの動作も非常に良好です。その一方、サーバーの演算能力が不足した場合は、さらに高い性能を発揮するように構成された別のシステムへ移行する必要があります。また、アプリケーションが必要とする以上にサーバーの演算能力が高い場合、その分は無駄になるため、他のワークロードを移行して演算能力を有効活用する必要があります。さらに、すべての準備が整いアプリケーションを実行し始めた後も、ハードウェアとソフトウェアのメンテナンスをユーザー自身で行う必要があります。お客様がコンピューティング コスト全体の削減を期待してクラウド化を検討する理由には、以上のようなこともあると考えられます。
アプリケーションをクラウドへ移行する場合でも、クラウド向けアプリケーションを構築する場合でも、認証サービス、アプリケーション サービス (キャッシュ、メッセージングなど)、データベース サービス、可用性サービスなど、オンプレミスと同等の各種機能をクラウドで実装できます。さらに、オンデマンドのスケーリングや、必要なハードウェアを必要なだけ利用できる従量課金制といった経済的なメリットなど、オンプレミスにはない優れた特長も活用できます。開発者の要望に応じて、これらのサービスを実行するアプリケーションを、オンプレミスのアプリケーションを作成するときと同様に開発し、ほぼ同じように機能させることができます。
ただし、「優秀な」クラウド アプリケーションを構築するには、さらにちょっとした工夫が必要になります。
Windows Azure 向けのクラウド アプリケーションでパフォーマンス、スケーラビリティ、管理性を最大限に利用するには、クラウド プラットフォーム独特の機能を活用するような設計やコーディングを施す必要があります。その例を次に示します。
- ユーザーが作成したコードによるアプリケーションの遠隔測定データの取得。アプリケーションの動作に対してリアルタイムかつプロアクティブに対応できるようになります。
- 演算能力とストレージ ノードのスケールアウトの活用。大規模なスケールに対応したり、複数のデータ センターを使用して可用性を向上したりすることができます。「スケール単位」(コンピューティング、ストレージ、データベースのグループ) の新規展開による拡張に対応したアプリケーションの設計。計画的な拡張に対しても、予期しない拡張に対してもプロビジョニングが可能となります。
- 個々のコンポーネントに不具合が発生したときにアプリケーションが停止しないようにするための障害対策。世界中で使用されている優秀なクラウド アプリケーションはこれをサポートしていますが、開発者がアプリケーションの設計においてそのコンポーネントで発生し得る不具合を想定し、停止した場合にもエンド ユーザーへ大きな影響が出ないようにリアルタイムに対応できるようにしなければなりません。
- データ取得時に使用可能な場合のキャッシュの活用、および多数の独立したデータベース (シャード) に対するデータベース要求の送信。スケーラビリティを確保し、パフォーマンスを最大化します。
優秀なクラウド アプリケーションの作成方法の学習をすぐに開始していただけるように、ここで、再利用可能なクラウド コンポーネントを 7 つご紹介します。それぞれにサンプル コードとドキュメントがあり、Microsoft Windows Azure でクラウドサービス( PaaS) アプリケーションを構築するほとんどの場合にこれらをご活用いただけます。
成果物 : AzureCAT (マイクロソフト技術部門の Customer Advisory Team) は、これまでに数百本もの Windows Azure 向け PaaS アプリケーションの設計、構築、展開を手掛けてきました。この作業から得られたことを、以下にご紹介する 7 つの再利用可能なコンポーネントとして作成し、共有できるようにしました。サービスを作成するとどのようなメリットがあるのかをユーザーの皆様にご理解いただくうえで参考になるかと思います。コンポーネントのシームレスな動作を保証するエンドツーエンドの単一のアプリケーションとなっていて、ユーザーの登録、ログイン、およびコメント追加の機能を持つかなりシンプルなものです。このアプリケーションは遠隔測定とシャーディング コードの追加が必要なスケールにおいて構築とテストが実施され、非常に良好なパフォーマンスを保証しています。
この 7 つの再利用可能なコンポーネントのサンプル コードとドキュメントは、PaaS アプリケーションを開発するすべての皆様のお役に立つことと思います。コンポーネントの内容は次のとおりです。
1.構成 – 構成ファイルは、アプリケーションのシームレスな管理を支援するための鍵となります。
2.ログ記録 – アプリケーションやイベント、パフォーマンスのログを遠隔測定して記録します。
3.データ アクセス – これは 2 つのコンポーネントで構成されています。1 つはデータベース コマンドおよび接続の再試行ロジック、もう 1 つはカスタマイズされたハッシュ アルゴリズムを使用したシャーディングです。
4.キャッシュ – ユーザー データのキャッシュへの読み書きを行います。
5.スケジュール設定 - バックグラウンドの Worker ロールが遠隔測定で 1 分に 1 回データを取得し、SQL データベース のカスタム OPS データベースに格納します。
6.レポート作成 – SQL データベース OPS データベースに遠隔測定で格納されたデータのレポートを作成します。
7.アプリケーション要求ルーティング処理 (ARR) – これは IIS の機能で、ユーザーを複数のホストされているサービスへルーティングします (アプリケーションのワークロードの負荷分散)。
提供素材へのリンク : アプリケーション コードは、下記 URL の MSDN コード ギャラリーからダウンロードできます。
- Windows Azure でのクラウド サービスの基礎
- https://code.msdn.microsoft.com/Cloud-Fundamentals-in-1a3ab1bd ( 英語)
まとめ : この記事でご紹介した内容について、各コンポーネントを詳細に解説した別の記事をアップする予定です。このブログをお読みいただき、ご紹介した優秀なクラウド アプリケーションを活用することによって、皆様がクラウド サービスを活用するためのコードを作成する労力を削減できることを願っています。コード サンプルは実践的なもので、動作確認済みです (連携しての動作も可能です)。これらは本番環境の実装から派生したもので、そのスケールでのテストも実施済みです。