次の方法で共有


最小ストレージ – データをレプリケートするための変更フィード

Azure Front Door
Azure App Service
Azure Functions
Azure Cosmos DB
Azure Table Storage

この記事では、特定の期間内にアクセスできる必要がある大量のデータを処理する Web アプリケーション向けの高可用性ソリューションについて説明します。 このソリューションでは、プライマリ データ ストアとして Azure Cosmos DB を使用する必要があり、低コストのセカンダリ ストレージにデータをレプリケートするには Azure Cosmos DB 変更フィードを使用する必要があります。 指定した期間が満了すると、Azure Functions を使用して Azure Cosmos DB からデータが削除されます。 セカンダリ ストレージ内のデータは、監査と分析の目的で他のソリューションを使用できるように、指定した期間よりも長めに継続して使用できます。 また、このソリューションでは、さまざまなデータ サービスにデータをレプリケートして、高い持続性を実現します。

アーキテクチャ

2 種類のストレージを使用してコストを削減する、回復性があるシステムのアーキテクチャ。

このアーキテクチャの Visio ファイル をダウンロードします。

データフロー

  1. クライアントは Microsoft Entra ID によって認証され、Azure App Service 上でホストされている Web アプリケーションに対するアクセスが許可されます。
  2. ファイアウォールとレイヤー 7 ロードバランサーである Azure Front Door により、リージョンの障害発生時に、ユーザー トラフィックをスタンバイ リージョンに切り替えます。
  3. App Service は、Web サイトおよび RESTful Web API をホストします。 ブラウザー クライアントは、API を使用する非同期 JavaScript および XML (AJAX) アプリケーションを実行します。
  4. Web API は、バックグラウンド タスクを処理するために Functions によってホストされるコードに責任を委任します。 これらのタスクは、Azure Queue Storage キューに登録されます。
  5. キューに入ったメッセージにより、バックグラウンド タスクを実行する関数がトリガーされます。
  6. Azure Cache for Redis では、関数用にデータベース データをキャッシュします。 このソリューションでは、キャッシュを使用することで、データベース アクティビティをオフロードし、関数アプリと Web アプリを高速化します。
  7. Azure Cosmos DB には、最近生成されたデータを保持します。
  8. Azure Cosmos DB では、変更をレプリケートするために使用できる変更フィードを発行します。
  9. 関数アプリでは、変更フィードを読み取り、Azure Table Storage テーブルに変更をレプリケートします。 別の関数アプリによって、Azure Cosmos DB から期限切れのデータを定期的に削除します。
  10. Table Storage によって、低コストのストレージを提供します。

コンポーネント

  • Microsoft Entra ID は、オンプレミスのディレクトリと同期できる ID およびアクセス管理サービスです。 このアーキテクチャでは、ユーザーを認証し、App Service でホストされている Web アプリケーションへのアクセスを許可します。
  • Azure DNS は、ドメイン ネーム システム (DNS) ドメインの高可用性ホスティング サービスです。 このアーキテクチャでは、Azure DNS は DNS 解決と、Azure Front Door を介して公開される Web アプリを提供します。
  • Azure Front Door は、セキュリティで保護されたコンテンツ配信ネットワークとロード バランサーです。 このアーキテクチャでは、コンテンツ配信を高速化し、フェールオーバー機能を提供し、サイバー脅威からアプリを保護します。
  • App Service は、Web アプリを構築、デプロイ、ホスティング、スケーリングするためのフル マネージド サービスです。 アプリは、.NET、.NET Core、Node.js、Java、Python、または PHP を使用して構築できます。 アプリは、コンテナー内または Windows 上または Linux 上で実行できます。 メインフレーム移行では、フロントエンド画面または Web インターフェイスを HTTP ベースの REST API としてコーディングできます。 それらを分離し、マイクロサービス ベースのシステムを調整するためにステートレスにすることができます。 Web API の詳細については、 RESTful Web API の設計に関するページを参照してください。 このアーキテクチャでは、App Service はアプリケーションの Web インターフェイスと REST API をホストします。
  • Functions は、アプリケーション インフラストラクチャを確立することなく、関数と呼ばれる小さなコードを実行する環境を提供します。 これを使用して、一括データの処理、システムの統合、モノのインターネット (IoT) デバイスの操作、単純な API とマイクロサービスの構築を行うことができます。 マイクロサービスを使用すると、Azure サービスに接続し、常に最新の状態を維持するサーバーを作成できます。 このアーキテクチャでは、Functions は、データのレプリケートや期限切れのレコードの削除などのバックグラウンド タスクを処理します。
  • Azure Storage は、データ、アプリ、およびワークロード向けの、非常にスケーラブルで安全なクラウド サービスのセットです。 これには、メインフレーム ワークロードを移行するための効果的なツールとして機能する Azure Files が含まれています。
    • Queue Storage では、大規模ワークロード向けのシンプルでコスト効果に優れた永続的メッセージ キューが提供されます。 このアーキテクチャでは、タスク メッセージングに Queue Storage を使用します。
    • Table Storage は、大量の半構造化データセットを使用する迅速な開発のための NoSQL キー値ストアです。 テーブルはスキーマレスであり、ニーズの変化に合わせてすぐに調整できます。 アクセスは、多くの種類のアプリケーションにとって高速でコスト効率が高く、他の種類のキー付きストレージよりも一般にコストがかかりません。 このアーキテクチャでは、Table Storage を使用して、データの同期および再構築されたコピーを Azure Cosmos DB に格納します。
  • Azure Cache for Redis は、コンピューティング リソース間でデータと状態を共有するための、フル マネージド メモリ内キャッシュ サービスおよびメッセージ ブローカーです。 これには、オープンソースの Redis と、マネージド サービスとしての Redis Labs の商用製品の両方が含まれています。 高スループットのオンライン トランザクション処理 (OLTP) アプリケーションのパフォーマンスを向上させるには、スケーリングするように設計し、Azure Cache for Redis などのメモリ内データ ストアを使用するように設計します。 このアーキテクチャでは、Azure Cache for Redis によって頻繁に使用されるデータへのアクセスが高速化され、関数アプリと Web アプリの両方のパフォーマンスが向上します。
  • Azure Cosmos DB は、グローバルに分散されたマルチモデル データベースです。これにより、ソリューションは、任意の数の地理的リージョンにわたってスループットとストレージを柔軟かつ独立してスケーリングできます。 包括的なサービス レベル アグリーメント (SLA) により、スループット、待機時間、可用性、一貫性が保証されます。 このアーキテクチャでは、Azure Cosmos DB は最新のデータを格納し、Table Storage への更新をレプリケートするために使用される変更フィードを出力します。

代替

  • 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 | クラウド ソリューション アーキテクト - デジタルとアプリケーション イノベーション

次の手順