この記事では、特定の期間内にアクセスできる必要がある大量のデータを管理する Web アプリケーションの高可用性ソリューションについて説明します。 このソリューションでは、プライマリ データ ストアとしてAzure Cosmos DBを使用し、Azure Cosmos DB変更フィードを使用して、低コストのセカンダリ ストレージにデータをレプリケートします。 指定した期間が経過すると、ソリューションはAzure Functionsを使用してAzure Cosmos DBからデータを削除します。 セカンダリ ストレージ内のデータは、他のソリューションによる監査と分析に使用できる時間が長くなります。 このソリューションは、高い耐久性を提供するさまざまなデータ サービスにデータをレプリケートします。
アーキテクチャ
このアーキテクチャの Visio ファイル をダウンロードします。
データ フロー
次のデータ フローは、前の図に対応しています。
クライアントはMicrosoft Entra IDを使用して認証を行い、Azure App Serviceでホストされている Web アプリケーションへのアクセスが許可されます。
ファイアウォールとレイヤー 7 ロード バランサーである Azure Front Doorは、リージョンの障害が発生した場合にユーザー トラフィックをスタンバイ リージョンに切り替えます。
App Service は、Web サイトおよび RESTful Web API をホストします。 ブラウザー クライアントは、API を使用する非同期 JavaScript および XML アプリケーションを実行します。
Web API は、バックグラウンド タスクを処理するために、Functions でホストされるコードに責任を委任します。 これらのタスクは、Azure Queue Storage キューに登録されます。
キューに入ったメッセージにより、バックグラウンド タスクを実行する関数がトリガーされます。
Azure Managed Redis は、関数のデータベース データをキャッシュします。 このソリューションは、ゆっくりと変化するデータのデータベース読み取りをオフロードし、キャッシュを使用して関数アプリと Web アプリを高速化します。
Azure Cosmos DB には、最近生成されたデータを保持します。
Azure Cosmos DB では、変更をレプリケートするために使用できる変更フィードを発行します。
関数アプリでは、変更フィードを読み取り、Azure Table Storage テーブルに変更をレプリケートします。 別の関数アプリによって、Azure Cosmos DB から期限切れのデータを定期的に削除します。
Table Storage によって、低コストのストレージを提供します。
コンポーネント
Microsoft Entra ID は、オンプレミスのディレクトリと同期できる ID およびアクセス管理サービスです。 このアーキテクチャでは、ユーザーを認証し、App Service でホストされている Web アプリケーションへのアクセスを許可します。
Azure Front Door は、セキュリティで保護されたコンテンツ配信ネットワークとロード バランサーです。 このアーキテクチャでは、コンテンツ配信を高速化し、フェールオーバー機能を提供し、サイバー脅威からアプリを保護します。
App Service は、開発者が Web アプリの構築、デプロイ、ホスト、スケーリングに使用するフル マネージド サービスです。 アプリは、.NET、Node.js、Java、Python、PHP を使用して構築できます。 アプリは、コンテナー内または Windows 上または Linux 上で実行できます。 このアーキテクチャでは、App Service はアプリケーションの Web インターフェイスと REST API をホストします。 Web API の詳細については、 RESTful Web API の設計に関するページを参照してください。
Functions は、アプリケーション インフラストラクチャを確立することなく、関数と呼ばれる小さなコードを実行する環境を提供します。 これを使用して、一括データの処理、システムの統合、モノのインターネット (IoT) デバイスの操作、単純な API とマイクロサービスの構築を行うことができます。 マイクロサービスを使用して、Azure サービスに接続し、常に最新の状態を維持するサーバーを作成できます。 このアーキテクチャでは、Functions はデータ レプリケーションや期限切れのレコード削除などのバックグラウンド タスクを実行します。
Azure Storage は、データ、アプリ、ワークロード用のスケーラブルで安全なクラウド サービスのセットです。 このアーキテクチャでは、Storage はタスク メッセージング用の Queue Storage と、低コストのレプリケート されたデータ ストレージ用の Table Storage を提供します。
Queue Storage では、大規模ワークロード向けのシンプルでコスト効果に優れた永続的メッセージ キューが提供されます。 このアーキテクチャでは、タスク メッセージングに Queue Storage を使用します。
Table Storage は、大量の半構造化データセットを使用する迅速な開発のための NoSQL キー値ストアです。 テーブルはスキーマレスであり、ニーズに応じて適応します。 アクセスは、多くのアプリケーションで高速でコスト効率に優れています。 このアーキテクチャでは、Table Storage を使用して、データの同期および再構築されたコピーを Azure Cosmos DB に格納します。
Azure Managed Redis は、コンピューティング リソース間でデータと状態を共有するためのフル マネージドのメモリ内キャッシュ サービスおよびメッセージ ブローカーです。 高スループットのオンライン トランザクション処理アプリケーションのパフォーマンスを向上させるには、Azure Managed Redis などのメモリ内データ ストアを使用してスケーリングするように設計します。 このアーキテクチャでは、Azure Managed Redis によって頻繁に使用されるデータへのアクセスが高速化され、関数アプリと Web アプリのパフォーマンスが向上します。
Azure Cosmos DB はグローバルに分散されたマルチモデル データベースであり、ソリューションを利用して、任意の数の地理的リージョンにわたってスループットとストレージを柔軟かつ独立してスケーリングできます。 包括的なサービス レベル アグリーメントにより、スループット、待機時間、可用性、一貫性が保証されます。 このアーキテクチャでは、Azure Cosmos DB最新のデータを格納し、Table Storage への更新をレプリケートするために使用できる変更フィードを出力します。
選択肢
Azure Traffic Manager により、選択したトラフィック ルーティング方法に基づいて、グローバル Azure リージョン全体に受信 DNS 要求を送信できます。 また、自動フェールオーバーとパフォーマンス ルーティングも提供されます。
Azure Container Apps は、開発者が大規模な最新アプリのビルドとデプロイに使用する、フル マネージドのサーバーレス コンテナー サービスです。
Azure Kubernetes Service (AKS) は、コンテナー化されたアプリケーションのデプロイと管理のためのフル マネージド Kubernetes サービスです。 これを使用して、独立してオンデマンドでスケーリングするコンポーネントを含むマイクロサービス アーキテクチャを実装できます。
Azure Container Instances は、インフラストラクチャ管理を必要とせずにタスクを実行します。 これは、開発中に、およびスケジュールされていないタスクを実行する場合に便利です。
Azure Service Bus は、シンプルなハイブリッド統合のための信頼性の高いクラウド メッセージング サービスです。 このアーキテクチャでは、Queue Storage の代わりに使用できます。 詳細については、「Storage キューと Service Bus キューの比較」を参照してください。
シナリオの詳細
このソリューションは、大量の Web アプリケーション データをAzure Cosmos DBに格納します。 大量のデータを処理する Web アプリでは、Azure Cosmos DBを使用して、スループットとストレージを弾力的かつ独立してスケーリングします。
データベースに変更が加えられた場合、Azure Cosmos DB変更フィードはイベント ドリブン関数トリガーに送信されます。 その後、関数が実行され、変更を Table Storage のテーブルにレプリケートします。これにより、低コストのストレージ ソリューションが実現します。 また、Azure Data Factory パイプラインまたは Fabric Data Factory を使用してデータを分析ゾーンに取り込むことで、より広範な下流のデータ移動をオーケストレーションすることもできます。
Web アプリがデータを必要とする時間は限られています。 このソリューションでは、期限切れのデータが定期的に実行され、Azure Cosmos DBから削除されるため、コストが削減されます。 オンデマンドで関数をトリガーしたり、特定の時刻に実行するようにスケジュールしたりできます。
考えられるユース ケース
このソリューションは、次のアプリケーションに適しています。
- 大量のデータを使用する。
- 特定の期間にデータを使用できる必要があります。
- 有効期限が切れるデータを使用する。
たとえば、次のようなアプリが含まれます。
物理的な場所でライブ データ フィードとセンサーを使用して、カスタマー エクスペリエンスをカスタマイズし、エンゲージメントを促進します。
顧客の消費性向と消費行動を追跡する。
車両の位置、パフォーマンス、およびドライバーの行動データを使用して、車両の車両を追跡し、効率と安全性を向上させます。
天気予報。
トラフィック システムを監視および管理します。
製造 IoT データを分析する。
スマート メーター データを監視します。
考慮事項
これらの考慮事項は、ワークロードの品質向上に使用できる一連の基本原則である Azure Well-Architected Framework の要素を組み込んでいます。 詳細については、「 Well-Architected Framework」を参照してください。
Reliability
信頼性は、アプリケーションが顧客に対して行ったコミットメントを確実に満たすことができるのに役立ちます。 詳細については、「信頼性の設計レビュー チェックリスト」を参照してください。
Azure Cosmos DB変更フィードでは、少なくとも 1 回の配信が保証されます。 重複するイベントによって Table Storage に不整合なデータが生成されないように、レプリケーション関数が冪等となるように設計してください。
Azure Front Door は、リージョン レベルの自動フェールオーバーを提供します。 プライマリ リージョンが使用できなくなった場合、トラフィックは手動による介入なしでスタンバイ リージョンにルーティングされます。
コストの最適化
コストの最適化では、不要な経費を削減し、運用効率を向上させる方法に重点を置いています。 詳細については、「コスト最適化の設計レビュー チェックリスト」を参照してください。
主なコスト上の利点は、期限切れのデータを要求ユニット (RU) ごとに課金されるAzure Cosmos DBから Table Storage に移動することで得られます。Table Storage は、トランザクションごとおよび格納されている GB 単位で課金されます。 このプロセスは、アクセス頻度の低いデータの方が安価です。
ワークロードに予測可能なスループット要件がある場合は、Azure Cosmos DB予約容量を検討してください。
レプリケーションには変更フィードを使用します。 この方法では、コア アプリケーションでのレプリケーションと比較して、コードのメンテナンスが削減されます。
このソリューションでは、セカンダリ ストレージと、データレプリケーションと有効期限を管理する関数に対して、追加のコストが発生します。
オペレーショナル エクセレンス
オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「 オペレーショナル エクセレンスの設計レビュー チェックリスト」を参照してください。
既存のデータを移行する必要があります。 移行プロセスでは、古いデータをストレージ アカウントにコピーするためのアドホック スクリプトまたはルーチンが必要です。 データを移行するときは、タイム スタンプとコピー フラグを使用して移行の進行状況を追跡します。
関数がAzure Cosmos DBからエントリを削除するときに生成される削除フィードは無視します。 この方法では、Azure Table のセカンダリ ストレージからエントリが削除されるのを防ぎます。
パフォーマンス効率
パフォーマンス効率とは、ユーザーの要求を効率的に満たすためにスケーリングするワークロードの能力を指します。 詳細については、「パフォーマンス効率のための設計レビュー チェックリスト」を参照してください。
変更フィード処理の待ち時間は、Table Storage でデータを使用できるようになる速度に影響します。 待機時間の要件を満たすために、関数アプリのプランとバッチ設定をスケーリングします。
ホット パーティションを回避するには、書き込みスループットを論理パーティション間で均等に分散するAzure Cosmos DBパーティション キーを選択します。
Azure Managed Redis を使用すると、データの緩やかに変化するAzure Cosmos DBに対する読み取り負荷が軽減され、待機時間と RU 消費量が削減されます。
貢献者
Microsoft では、この記事を保持しています。 この記事を書いたのは、以下の寄稿者です。
主な著者:
- Nabil Siddiqui | クラウド ソリューション アーキテクト - デジタルとアプリケーション イノベーション
その他の共同作成者:
- フィリペ・モレイラ |クラウド ソリューション アーキテクト
公開されていない LinkedIn プロフィールを見るには、LinkedIn にサインインしてください。
次の手順
- Azure Front Doorおよびクラウド コンテンツ配信ネットワークのドキュメント
- Azure Cosmos DB を使用する
- Azure Cosmos DB に適した API を選ぶ
Azure Cosmos DB 大量のデータをAzure Cosmos DB - 実際の例を使用してデータをモデル化およびパーティション分割する方法
- Azure Cosmos DB の変更フィードの設計パターン
- Azure Cosmos DBと Functions を使用してサーバーレスイベントベースのアーキテクチャを作成します
- Fabric Data Factory とは何ですか?
- Azure Data Factory を使用してデータの移動と変換を調整する
- Fabric Data Factory のドキュメント