この記事では、特定の期間内にアクセスできる必要がある大量のデータを処理する Web アプリケーション向けの高可用性ソリューションについて説明します。 このソリューションでは、プライマリ データ ストアとして Azure Cosmos DB を使用する必要があり、低コストのセカンダリ ストレージにデータをレプリケートするには Azure Cosmos DB 変更フィードを使用する必要があります。 指定した期間が満了すると、Azure Functions を使用して Azure Cosmos DB からデータが削除されます。 セカンダリ ストレージ内のデータは、監査と分析の目的で他のソリューションを使用できるように、指定した期間よりも長めに継続して使用できます。 また、このソリューションでは、さまざまなデータ サービスにデータをレプリケートして、高い持続性を実現します。
Architecture
このアーキテクチャの Visio ファイル をダウンロードします。
データフロー
- クライアントは Microsoft Entra ID によって認証され、Azure App Service 上でホストされている Web アプリケーションに対するアクセスが許可されます。
- ファイアウォールとレイヤー 7 ロードバランサーである Azure Front Door により、リージョンの障害発生時に、ユーザー トラフィックをスタンバイ リージョンに切り替えます。
- App Service は、Web サイトおよび RESTful Web API をホストします。 ブラウザー クライアントは、API を使用する非同期 JavaScript および XML (AJAX) アプリケーションを実行します。
- Web API は、バックグラウンド タスクを処理するために Functions によってホストされるコードに責任を委任します。 これらのタスクは、Azure Queue Storage キューに登録されます。
- キューに入ったメッセージにより、バックグラウンド タスクを実行する関数がトリガーされます。
- Azure Cache for Redis では、関数用にデータベース データをキャッシュします。 このソリューションでは、キャッシュを使用することで、データベース アクティビティをオフロードし、関数アプリと Web アプリを高速化します。
- Azure Cosmos DB には、最近生成されたデータを保持します。
- Azure Cosmos DB では、変更をレプリケートするために使用できる変更フィードを発行します。
- 関数アプリでは、変更フィードを読み取り、Azure Table Storage テーブルに変更をレプリケートします。 別の関数アプリによって、Azure Cosmos DB から期限切れのデータを定期的に削除します。
- Table Storage によって、低コストのストレージを提供します。
コンポーネント
- Azure Microsoft Entra ID は、オンプレミスのディレクトリと同期できる ID およびアクセス管理サービスです。
- Azure DNS は、アプリに高速の DNS クエリと DNS レコードの迅速な更新を提供する DNS ドメインの高可用性ホスティング サービスです。 Azure DNS の管理は、他の Azure サービスの管理に似ており、同じ資格情報、API、ツール、および課金を使用します。
- Azure Front Door は、セキュリティで保護されたコンテンツ配信ネットワーク (CDN) と、インスタント フェールオーバーを備えたロード バランサーです。 ユーザーに近いエッジで動作し、アプリ、API、Web サイトをサイバーの脅威から保護しながらコンテンツ配信を高速化します。
- App Service は、Web アプリを構築、デプロイ、スケーリングするためのフル マネージド サービスです。 .NET、.NET Core、Node.js、Java、Python、または PHP を使用してアプリを構築できます。 アプリは、コンテナー内または Windows 上または Linux 上で実行できます。 メインフレームの移行では、フロントエンド画面または Web インターフェイスを HTTP ベースの REST API としてコード化できます。 それらは、マイクロサービスベースのシステムを調整するために、分離でき、ステートレスにすることができます。 Web API の詳細については、「RESTful Web API の設計」を参照してください。
- Functions は、アプリケーション インフラストラクチャを確立することなく、関数と呼ばれる小さなコードを実行するための環境を提供します。 これを使用して、一括データの処理、システムの統合、モノのインターネット (IoT) デバイスの操作、単純な API とマイクロサービスの構築を行うことができます。 マイクロサービスを使用すると、Azure サービスに接続するサーバーを作成して、常に最新の状態にすることができます。
- Azure Storage は、データ、アプリ、およびワークロード向けの、非常にスケーラブルで安全なクラウド サービスのセットです。 これには、 Azure Files、 Table Storage、 Queue Storageが含まれます。 Azure Files は、多くの場合、メインフレーム ワークロードを移行するための効果的なツールです。
- Queue Storage では、大規模ワークロード向けのシンプルでコスト効果に優れた永続的メッセージ キューが提供されます。
- Table Storage は、大量の半構造化データセットを使用する迅速な開発のための NoSQL キー値ストアです。 テーブルはスキーマレスであり、ニーズの変化に合わせてすぐに調整できます。 アクセスは、多くの種類のアプリケーションにとって高速でコスト効率が高く、他の種類のキー付きストレージよりも一般にコストがかかりません。
- Azure Cache for Redis は、コンピューティング リソース間でデータと状態を共有するための、フル マネージド メモリ内キャッシュ サービスおよびメッセージ ブローカーです。 これには、オープンソースの Redis と、マネージド サービスとしての Redis Labs の商用製品の両方が含まれています。 高スループットのオンライン トランザクション処理アプリケーションのパフォーマンスを向上させるには、スケーリングできるように、また Azure Cache for Redis などのインメモリ データ ストアを利用できるように、それらを設計します。
- Azure Cosmos DB は Microsoft のグローバル分散マルチモデル データベースです。これにより、ソリューションでは、スループットとストレージを、任意の数の地理的リージョンで柔軟かつ個別にスケーリングできるようになります。 このサービスは包括的なサービス レベル アグリーメント (SLA) により、スループット、待機時間、可用性、一貫性が保証されています。
代替
- Azure Traffic Manager により、選択したトラフィック ルーティング方法に基づいて、グローバル Azure リージョン全体に受信 DNS 要求を送信できます。 また、自動フェールオーバーとパフォーマンス ルーティングも提供されます。
- Azure Content Delivery Network は、静的コンテンツをエッジ サーバーにキャッシュして迅速な応答を実現し、ネットワーク最適化を使用して動的コンテンツの応答を改善します。 Content Delivery Network は、ユーザー ベースがグローバルである場合に特に便利です。
- Azure Container Apps は、モダン アプリを大規模に構築してデプロイするために使用されるフル マネージドのサーバーレス コンテナー サービスです。
- Azure Kubernetes Service (AKS) は、コンテナー化されたアプリケーションをデプロイおよび管理するためのフル マネージド Kubernetes サービスです。 これを使用して、コンポーネントがオンデマンドで個別にスケーリングされるマイクロサービス アーキテクチャを実装できます。
- Azure Container Instances により、インフラストラクチャを管理することなくタスクをすばやく簡単に実行できます。 これは、開発時や、スケジュールされていないタスクの実行で役立ちます。
- Azure Service Bus は、シンプルなハイブリッド統合のための信頼性の高いクラウド メッセージング サービスです。 このアーキテクチャでは、Queue Storage の代わりに使用できます。 詳細については、「Storage キューと Service Bus キューの比較」を参照してください。
シナリオの詳細
このソリューションでは、Azure Cosmos DB を使用して、Web アプリケーションで使用される大量のデータを格納します。 大量のデータを処理する Web アプリは、スループットとストレージを柔軟かつ独立してスケーリングできる Azure Cosmos DB の機能のメリットを得られます。
もう 1 つの重要なソリューション コンポーネントは、Azure Cosmos DB 変更フィードです。 データベースに変更が加えられると、変更フィード ストリームがイベント ドリブン Functions トリガーに送信されます。 その後、関数が実行され、変更を Table Storage のテーブルにレプリケートします。これにより、低コストのストレージ ソリューションが実現します。
Web アプリがデータを必要とする時間は限られています。 このソリューションでは、その事実を利用して、コストをさらに削減します。 具体的には、別の関数が定期的に実行され、期限切れのデータを Azure Cosmos DB から削除します。 関数は、トリガーされる以外に、設定された時刻に実行されるようにスケジュールすることもできます。
考えられるユース ケース
このアーキテクチャは、次のアプリケーションに適しています。
- 大量のデータを使用する。
- 必要なときにデータが常に使用可能である必要がある。
- 有効期限が切れるデータを使用する。
たとえば、次のようなアプリが含まれます。
- 物理的な場所のライブ データ フィードとセンサーを使用して、カスタマー エクスペリエンスをカスタマイズし、エンゲージメントを促進します。
- 顧客の消費性向と消費行動を追跡する。
- 車両の位置、パフォーマンス、ドライバーの行動に関するデータを収集して保有車両を追跡し、効率と安全性を向上させます。
- 天気予報。
- スマート トラフィックシステムを提供する、スマート トラフィック システムを実装する、またはスマート テクノロジを使用してトラフィックを監視する。
- 製造 IoT データを分析する。
- スマート メーター データを表示する、またはスマート テクノロジを使用してメーター データを監視する。
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
- このソリューションを実装して保守すると、追加のコストが発生します。
- レプリケーション用の変更フィードを使用すると、コア アプリケーションでレプリケーションを実行するよりも必要なコード メンテナンスが少なくなります。
- 既存のデータを移行する必要があります。 移行プロセスでは、古いデータをストレージ アカウントにコピーするためのアドホック スクリプトまたはルーチンが必要です。 データを移行するときは、タイム スタンプとコピー フラグを使用して移行の進行状況を追跡してください。
- Azure Table のセカンダリ ストレージからエントリを削除しないようにするために、関数が Azure Cosmos DB からエントリを削除したときに生成される削除フィードは無視します。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパル作成者:
- Nabil Siddiqui | クラウド ソリューション アーキテクト - デジタルとアプリケーション イノベーション
次の手順
- Web キュー ワーカーのアーキテクチャ スタイル
- 地理的に分散したアプリケーションを設計する
- Azure Cosmos DB を使用してデータをグローバルに分散させる
- Azure Cosmos DB に適した API を選ぶ
- Azure Cosmos DB for Table を使って NoSQL データを格納し、アクセスする
- Azure Cosmos DB の NoSQL データを扱う
- 現実の例を使用して Azure Cosmos DB のデータをモデル化およびパーティション分割する方法
- オンプレミスまたはクラウドのデータを Azure Cosmos DB に移行するためのオプション
- 数百テラバイトのデータを Azure Cosmos DB に移行する
- Azure Cosmos DB の変更フィードの設計パターン
- Azure Cosmos DB と Azure Functions を使用したサーバーレスなイベントベースのアーキテクチャ
- Azure Data Factory の概要
- Azure Data Factory または Azure Synapse パイプラインでデータの移動と変換を調整する