アプリケーションは、応答性に優れていて、常にオンラインである必要があります。 この記事では、これらの要件を満たすためにグローバルに分散されたアプリケーションを使用するソリューションについて説明します。 これは、Azure Cosmos DB と Azure グローバル データセンターに組み込まれている高可用性と低遅延の機能を利用します。
Architecture
このアーキテクチャの Visio ファイルをダウンロードします。
データフロー
- ユーザーが専用クライアントを介してアプリケーションにアクセスします。
- Azure Traffic Manager がルーティング プロファイルまたは入れ子になったプロファイルを使用して、アプリケーションにアクセスするための最適な場所にユーザーの接続をルーティングします。
- ユーザーがルーティングされたリージョンで、アプリケーションによってデータベース セッションと接続が確立されます。
- このソリューションは、さまざまな複雑さのアプリケーションに対応できます。 たとえば、アプリは基本的な静的ページである場合があります。 または、Kubernetes でホストされるマイクロサービス指向のアプリケーションである場合もあります。
- アプリケーション ランドスケープと Azure Cosmos DB の間の接続は、Azure Key Vault から Azure Cosmos DB キーにキーを取得する Azure Active Directory (Azure AD) ユーザーによって処理されます。
- アプリケーションは最も近いリージョンを認識しており、Azure Cosmos DB のマルチホーム API を使用して、そのリージョンに要求を送信できます。 構成には一切変更を加えることなく、最も近いリージョンが特定されます。 Azure Cosmos DB アカウントのリージョンを追加および削除するときに、アプリケーションを再デプロイまたは一時停止する必要はありません。 アプリケーションの高可用性が維持されます。 内部的には、Azure Cosmos DB により、定義されたリージョンの数に基づいて、データのグローバルな配布とレプリケーションが処理されます。 自動フェールオーバー オプションが有効になっていて、リージョンが使用できなくなった場合、システムはフェールオーバー優先度が最も高いリージョンにフェールオーバーします。 このフェールオーバーにはユーザー操作は必要ありません。 リージョンの優先度は、自動フェールオーバーが有効になっている場合に変更できます。
コンポーネント
- Traffic Manager は、DNS ベースのトラフィック ロード バランサーです。 Traffic Manager を使用すると、入れ子にできるさまざまな DNS ベースのトラフィック ルーティング オプションを使用して、アプリケーションの負荷分散オプションを作成できます。
- Azure AD は、マルチテナントでクラウドベースの ID およびアクセス管理サービスです。 Azure AD を使用してオンプレミスのディレクトリを同期し、シングル サインオンを有効にできます。
- Azure Cosmos DB は、あらゆるスケールに対応する、グローバル分散型のマルチモデル データベース サービスです。
代替
このシナリオは、複数のコンピューティングとサーバーレスのオプションを使用して拡張できます。
コンピューティング オプション
- Azure Virtual Machines は サービスとしてのインフラストラクチャ (IaaS) オファーです。 Virtual Machines を使用して、Linux や Windows 仮想マシン (VM) などのオンデマンドでスケーラブルなコンピューティング リソースをデプロイできます。
- Azure Kubernetes Service は、アプリケーションおよびマイクロサービスの基本ワークロードに対応した、可用性が高く安全なフル マネージド Kubernetes サービスです。
- Azure App Service は、Web およびモバイル シナリオ向けの強力なクラウド アプリを構築、デプロイ、スケーリングするためのフレームワークを提供します。
サーバーレス オプション
- Azure Functions は、イベント駆動のサーバーレス コンピューティング プラットフォームです。 Functions を使用すると、クラウド内で大規模にデプロイおよび運用し、トリガーとバインドを使ってサービスを統合できます。
- Azure Logic Apps によりワークフローが自動化されます。 このサービスを使用すると、強力な統合ソリューションをすばやく構築できます。
シナリオの詳細
アプリケーションで、高速の応答時間を実現する必要があります。 待機時間を短くするために、組織はユーザーの近くにアプリをデプロイします。 また、ユーザーの近くにデータを保持します。 組織がグローバルに事業を展開している場合、複数のデータセンターとグローバルに分散されたアプリを使用する必要があります。 そうすることで、これらのアプリはグローバルにレプリケートされたデータのローカル コピーを使用して、高い応答性を維持します。
このソリューションでは、グローバルに分散されたアプリを使用します。 また、データを複数のリージョンに透過的にレプリケートするグローバル分散型データベース システムである Azure Cosmos DB も使用します。 アプリは、データベースのローカル レプリカを使用してデータの読み取りと書き込みを行います。
このソリューションは、短い待機時間を実現するだけでなく、Azure Cosmos DB が提供する高可用性の利点も得られます。
考えられるユース ケース
このソリューションは、グローバルに事業を展開し、データをユーザーの近くに保持する必要がある業界に適しています。 たとえば、メディア、エンターテイメント、旅行、ホスピタリティの業界などです。 グローバル分散アプリケーションを利用するシナリオには、次のようなものがあります。
- コンシューマー ビデオのストリーミング サービス。
- 人と商品のためのアプリベースの集荷と配送サービス。
考慮事項
これらの考慮事項は、ワークロードの品質向上に使用できる一連の基本原則である Azure Well-Architected Framework の要素を組み込んでいます。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
[信頼性]
信頼性により、顧客に確約したことをアプリケーションで確実に満たせるようにします。 詳細については、「信頼性の重要な要素の概要」を参照してください。
Azure Cosmos DB インスタンスの可用性は、多くの要因に応じて決まります。 Azure Cosmos DB がレプリケートされるリージョンが多いほど、アプリケーションの可用性が向上します。 各リージョンには Azure Cosmos DB コンテナーのすべてのデータ パーティションが含まれており、既定では読み取りを処理できます。 データ レイヤーの可用性を高めるために、マルチリージョン書き込みを有効にできます。 可用性を高めるもう 1 つの方法として、弱い整合性レベルと可用性ゾーンを使用する方法があります。
アプリケーションが提供する SLA を最大化するようにソリューションを構成するには、Azure Cosmos DB の自動フェールオーバーを使用します。
アプリケーション レイヤーでは、入れ子になったプロファイルを使用して Traffic Manager を構成します。 この設計を最上位レベルにプッシュすると、リージョンごとにアプリケーションのさまざまな選択肢をスケーリングできます。 リージョンごとのデプロイでも、高可用性手法が使用されます。
回復性を高めるために、Azure Cosmos DB のデプロイに可用性ゾーンを使用できます。 回復性は、Azure Cosmos DB のデプロイで使用する整合性レベルによっても異なります。 詳細については、「一貫性、可用性、パフォーマンスのトレードオフ」を参照してください。
セキュリティ
セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。
セキュリティの観点から、環境へのアクセスをセキュリティで保護するために Azure AD を使用できる、ID ベースのシステムを推進します。 バックエンドでは、マネージド ID を使用してアプリケーションにアクセスします。 別の方法としては、アクセスをセキュリティで保護するために Azure AD ユーザーと Key Vault を使用することを検討してください。 Azure Cosmos DB インスタンスのセキュリティ保護を強化する必要があります。 異なるリージョンにデプロイされたさまざまなバックエンドを、データベース インスタンスに対する読み取りと書き込みを行うことができる唯一のエンティティにします。 組み込みのファイアウォールを使用して、IP アドレス制限をアカウントに適用します。
Azure Cosmos DB では、Azure AD によるロールベースのアクセス制御もサポートされています。 詳細については、「Azure Active Directory を使用して Azure Cosmos DB アカウントのロールベースのアクセス制御を構成する」をご覧ください。
パフォーマンス効率
パフォーマンス効率とは、ユーザーによって行われた要求に合わせて効率的な方法でワークロードをスケーリングできることです。 詳細については、「パフォーマンス効率の柱の概要」を参照してください。
システムのパフォーマンスは、コンピューティングおよびデータベースのレベルでの多くの要因の影響を受けます。 App Service プランまたはその他のコンピューティング オプションの SKU は、各リージョンで使用可能なメモリとコアに影響します。 さらに、コンピューティング レイヤーがデプロイされるリージョンの数によって、処理可能なスケールが決まります。 デプロイする場所を増やすことで、既存のリージョンから負荷が取り除かれ、アプリケーションで実現できる最大スループットが直線的に増加します。
Azure Cosmos DB は、コンピューティング層のリソースに対するボトルネックにならないように構成します。 Azure Cosmos DB の各データベースとコンテナーは、自動スケーリングするように構成する必要があります。また、Azure Cosmos DB が要求を調整することがない最大要求ユニット値を指定する必要があります。 Azure Cosmos DB エンティティの適切な最大要求ユニット値を判断するために、アプリケーションのほぼ最大のスループットで負荷テストを実行できます。 より強力な整合性レベルと比較すると、弱い整合性レベルではスループットが高くなり、パフォーマンス上の利点が得られます。
重要な点は、Azure Cosmos DB との間で読み取りと書き込みを行うロジックをコードに実装するときには、SDK や Functions バインディングなど、何を使用しているかに関係なく、PreferredLocations
を使用して、各リージョン API が最も近い Azure Cosmos DB リージョンに要求をルーティングするようにすることです。 SDK は、Azure Cosmos DB アカウント構成、現在のリージョンの可用性、指定された優先リストに基づいて、読み取りと書き込みの操作を実行するために最適なエンドポイントを選択します。 この処理により、パフォーマンスが大幅に向上します。
このソリューションでは、スケーリングはさまざまなレベルに基づいています。 Azure Cosmos DB は、スケーリングの柔軟性とパフォーマンスの確実性を目指した専用設計になっています。 アプリケーションのレベルでは、使用されているコンピューティング モデルを確認する必要があります。 Functions と App Service は自動スケーリングが可能です。 Azure VM については、Azure Virtual Machine Scale Sets を使用できます。 このニーズを把握している場合、可能であれば常にサーバーレス オプションを検討する必要があります。
次のステップ
Azure Cosmos DB の詳細については、以下を参照してください。
- Azure Cosmos DB アカウントを管理する
- Azure Cosmos DB を使用するアプリケーションで複数リージョン書き込みを構成する
- Azure Cosmos DB を使用してデータをグローバルに分散させる
- Azure Cosmos DB の整合性レベル
- Azure Cosmos DB で一貫性レベルを管理する
- Azure Cosmos DB for NoSQL と Azure portal を使って .NET Web アプリを構築する
- システム割り当てマネージド ID を使用して Azure Cosmos DB データにアクセスする
- Azure Cosmos DB で高可用性を実現する方法
- Azure Cosmos DB アカウントでの自動フェールオーバーの有効化
Traffic Manager の詳細を確認する。
関連リソース
関連するソリューションのアイデアについては、以下を参照してください。
- スケーラビリティの高いカスタマー サービスと ERP アプリケーションを提供する
- Azure Cosmos DB を使用したゲーム
- Azure Cosmos DB を使用した IoT
- Azure Cosmos DB を使ったパーソナル化
- Azure Cosmos DB を使った小売業と eコマース
- Azure Cosmos DB を使ったサーバーレス アプリ
関連する完全なアーキテクチャについては、以下を参照してください。
関連するアーキテクチャのガイダンスについては、以下を参照してください。