1707628076
2024-01-24 17:59:17
Azure Load Testing を使用してマルチテナント サービスをテストする
この記事では使用方法について説明します Azure 負荷テスト に基づいてマルチテナント サービスをテストするには Azure アプリ サービス。 また、次のいずれかから負荷テスト シナリオを実行する方法についても説明します。
- Visual Studio Code の開発コンテナ
- Azure DevOps パイプライン
- Github アクション
シナリオ詳細
このシナリオでは、Azure Load Testing を使用して、Azure でホストされているマルチテナント サービスのパフォーマンスをテストします。 ロード テスト リソースはテスト中にのみデプロイされ、Azure DevOps パイプラインまたは Github Action から管理できます。
潜在的な使用例
マルチテナント アーキテクチャは、SaaS アプリケーションの構築によく使用されます。このアーキテクチャでは、複数の顧客がデータを分離しながら同じアプリケーション インスタンスを共有します。
たとえば、複数のユーザーが共同作業してデータを共有するプロジェクト管理ツールや顧客関係管理システムなどのアプリケーションは、マルチテナント アーキテクチャの恩恵を受けることができます。 一部の Microsoft Teams アプリケーションはマルチテナント サービスを提供することもできます。
負荷テストを行うシステムのアーキテクチャ
以下のアーキテクチャ図は、マルチテナント サービスを提供するための最小限のアーキテクチャを示しています。 マルチテナント サービスは次のもので構成されます。
- Azure Function でホストされるバックエンド (REST API)、
- Azure 静的 Web アプリでホストされるフロントエンド、
- Azure Table Storage でホストされるデータベース。
このアーキテクチャは次のように拡張できます。 アズールフロントドア 複数の地域で分散アプリケーションをサポートします。 アズールフロントドア クライアント トラフィックを正しいリージョンにルーティングします。さらに、リージョンで障害が発生した場合は 2 番目のリージョンにフェイルオーバーでき、インターネットに接続するエントリ ポイントを保護できます。 Azure Web アプリケーション ファイアウォール。
アプリケーションゲートウェイ 内部でトラフィックをルーティングして負荷分散するために展開することもできます。 アプリケーションゲートウェイ グループ内の個々のサービスに対する負荷を認識している。
Azure Front Door と Application Gateway を組み合わせると、マルチテナント ソリューションのすべてのレベルで複雑な負荷分散が可能になります。
負荷テストのアーキテクチャ
このインフラストラクチャの負荷テストには、REST API エンドポイントを通じてマルチテナント サービスをテストするための Azure Load Testing サービスのデプロイが必要です。
この REST API は保護されており認証が必要なため、各クライアントはサービスにアクセスするためにトークンを送信します。 これらのトークンは Azure Key Vault に保存されます。
さらに、Microsoft Entra ID Test Renant を作成して一時ユーザーをプロビジョニングすることもできます。 これらのユーザーの資格情報を使用して、負荷テスト準備スクリプトは各ユーザーのアクセス トークンを Azure Key Vault シークレットに保存します。
Microsoft 365 開発者プログラムに参加すると、テスト テナントを取得できます。
https://learn.microsoft.com/en-us/entra/identity-platform/test-setup-environment#get-a-test-tenant
負荷テストのシナリオ
この段落では、マルチテナント サービスの負荷テストのすべての手順について説明します。
- 負荷テスト シナリオを開始する前に、Microsoft Entra ID Test テナントに一時ユーザーが作成されます。 負荷テストのために REST API を使用した認証を許可するために、これらのユーザーに対して多要素認証は無効になっています。
- Microsoft Entra ID テスト テナントのユーザーがプロビジョニングされると、テストするインフラストラクチャが展開されます。
- マルチテナント アプリケーションは、リソースがデプロイされている Azure サブスクリプションに関連付けられた Microsoft Entra ID テナント内に作成されます。
- バックエンド サービスとフロントエンド サービスは、対象のインフラストラクチャ上に構築およびデプロイされます。
- フロントエンドが実行されると、Microsoft Entra ID テスト テナントの管理者が組織を代表して管理者の同意を付与します。 この手順の後、通常、ユーザーはそのアプリケーションに対する同意を求められません。
- 準備スクリプトは各テスト ユーザーのアクセス トークンを取得し、そのトークンを Azure Key Vault のシークレットに保存します。
- 対象となるインフラストラクチャとサービスの準備が整いました。
- ロード テスト エンジンは、Azure Key Vault に保存されているトークンを使用して、REST API エンドポイントに要求を送信するようになりました。
- 負荷テストの期間に達すると、サービスは REST API エンドポイントへのリクエストの送信を停止します。 エラー率が目標のエラーしきい値を下回り、平均応答時間が目標の応答時間を下回る場合、負荷テストの結果は成功となります。
コンポーネント
この段落では、Azure Load Testing 以外に、マルチテナント サービスを提供するために Azure にデプロイできるサービスのリストについて説明します。
- Azure 負荷テスト: 開発者とテスターは、フルマネージドの負荷テスト サービスを使用して、大規模な負荷を生成し、アプリのパフォーマンス、スケーラビリティ、容量に関する実用的な洞察を明らかにするシミュレーションを実行できます。 負荷テスト ツールに関する事前知識がなくても、テストをすばやく作成したり、既存の Apache JMeter スクリプトをアップロードしたりできます。 包括的なメトリクスと分析に裏付けられた専門的な推奨事項を取得し、自動化された継続的インテグレーションと継続的デリバリー (CI/CD) ワークフローを通じて継続的な改善をサポートします。これらはすべて、Azure 用に構築されたテスト サービスを使用します。
- アプリサービス: Web アプリケーションおよび Web ベースの API 向けの Azure のプレミア サービス。 セキュリティは、Microsoft Entra ID や Azure Key Vault。 自動スケーリングを構成できます。 また、スケール可能なリソースの量は、アプリを実行できるさまざまな App Service プラン間で柔軟に対応できます。 App Service は、統合された DevOps 機能を活用して、継続的な統合と複数の環境へのデプロイを行うこともできます。 Azure プラットフォームのこれらおよびその他のサポート機能により、開発者はアプリケーションの開発に集中できます。
- Azureイベントハブ: あらゆるソースから毎秒数百万のイベントをストリーミングして、動的なデータ パイプラインを構築し、ビジネスの課題に即座に対応します。
- Azure 機械学習: データ サイエンティストと開発者が高品質のモデルをより迅速かつ自信を持って構築、展開、管理できるようにします。
- Azure Blob ストレージ: 画像、ビデオ、オーディオ、ドキュメントなど、あらゆる種類の非構造化データを格納できる、非常にスケーラブルなオブジェクト ストレージです。 簡単で費用対効果も高いです。
- アズールフロントドア: クライアント トラフィックを正しいリージョンにルーティングするリージョン ロード バランサー。 リージョンで障害が発生した場合は 2 番目のリージョンにフェイルオーバーでき、インターネットに接続されたエントリ ポイントをセキュリティで保護できます。 Azure Web アプリケーション ファイアウォール。
- Microsoft エントラ ID: アプリケーション全体の ID プロバイダーとして機能し、アプリケーション内のリクエストの認証とエンドツーエンドの認可を強制します。
- Azure DNS: ドメイン名解決のための Azure のホスティング サービス。 マルチテナント ソリューションでは、複数のクライアントが独自の個別のドメインを介してソリューションにアクセスします。 Azure DNS を使用して、クライアント要求を構成し、正しいアプリケーション スタックに解決します。
- アプリケーションゲートウェイ: アプリケーション内のトラフィックを、クライアントのビジネス ニーズを満たすさまざまなサービスに内部的にルーティングし、負荷分散します。 Azure Front Door は高レベルのリージョン全体で負荷を分散しますが、グループ内の個々のサービスの負荷を認識するのは Application Gateway です。 Azure Front Door と Application Gateway を組み合わせると、マルチテナント ソリューションのすべてのレベルで複雑な負荷分散が可能になります。 Azure の負荷分散オプションの詳細については、こちらを参照してください。 Azure 負荷分散の概要。
- Azure Kubernetes サービス (AKS): クラスターにデプロイされたコンテナー イメージのインスタンスを調整します。 複数のクライアントのデータを管理するには、多くの場合、管理するための一連のコンポーネントの実装が必要になります。
- データモデリング
- データソース接続
- 抽出、変換、ロード (ETL)
- インポート/エクスポート活動。
- Azure SQL エラスティック プール: リソースのプールを使用して一連のデータベースを柔軟に管理するためのソリューションを提供します。 このサービスは、オンデマンドでリソースをデータベースに割り当てます。 これにより、マルチテナント SaaS アーキテクチャの開発者は、データベース リソースを必要に応じてクライアントに提供できるようになります。 このサービスは、未使用のコンピューティング リソースが大量にある複数の SQL Server を維持するための予算とオーバーヘッドも削減します。
- Azure コグニティブ検索 (旧称 Azure Search): 強力なインデックス作成およびクエリ エンジンをアプリケーションに追加するサービス。 これにより、クライアントは強力なクエリ機能にアクセスできるようになります。 また、Azure の AI 機能を使用して、クエリ機能を強化および強化することもできます。 Azure Cognitive Search は、テナントごとのインデックス戦略またはテナントごとのサービス戦略を使用してマルチテナントを考慮できます。
- Redis 用 Azure キャッシュ: キャッシュ レイヤーをサービスとしてソリューションに適用し、メモリ内で管理されるキャッシュを提供して、クライアントの待ち時間を短縮し、パフォーマンスを向上させます。 高いスループットにより、システムにアクセスする複数のテナントを処理する大量のリクエストが可能になります。 アプリケーションの負荷が増加した場合、サービスを柔軟にスケールアップできます。 また、キャッシュされたテナント データを保護および分離するための保存時の暗号化もサポートしています。
- Eメール: Azure Logic Apps と Microsoft 365 Outlook Connector を使用して自動化されたタスクとワークフローを作成し、電子メールを送信します。
Azure DevOps パイプライン
Azure DevOps Market Place から Azure Load Testing コンポーネントをインストールした後、Azure DevOps パイプラインから同じ負荷テスト シナリオを実行できます。
負荷テスト タスクの下:
- task: AzureLoadTest@1
displayName: 'Step Run Load Testing Multi-Tenant Web App'
inputs:
azureSubscription: $(SERVICE_CONNECTION)
loadTestConfigFile: '$(TEMP_DIR)/load-testing.yaml'
resourceGroup: $(LOAD_TESTING_RESOURCE_GROUP)
loadTestResource: $(LOAD_TESTING_NAME)
secrets: |
[
]
env: |
[
{
"name": "hostname",
"value": "$(LOAD_TESTING_TARGET_HOSTNAME)"
},
{
"name": "path",
"value": "$(LOAD_TESTING_TARGET_PATH)"
},
{
"name": "duration",
"value": "${{ parameters.duration }}"
},
{
"name": "threads",
"value": "${{ parameters.threads }}"
},
$(LOAD_TESTING_USERS)
]
Github アクション
Github Action から、同じ負荷テスト シナリオを実行することもできます。
負荷テスト タスクの下:
- name: 'Step Run Load Testing Multi-Tenant Web App'
uses: azure/load-testing@v1
with:
loadTestConfigFile: '${{ steps.configureloadtest.outputs.TEMP_DIR }}/load-testing.yaml'
resourceGroup: ${{ steps.deployloadtest.outputs.LOAD_TESTING_RESOURCE_GROUP }}
loadTestResource: ${{ steps.deployloadtest.outputs.LOAD_TESTING_NAME }}
secrets: |
[
]
env: |
[
{
"name": "hostname",
"value": "${{ steps.configureloadtest.outputs.LOAD_TESTING_TARGET_HOSTNAME }}"
},
{
"name": "path",
"value": "${{ steps.configureloadtest.outputs.LOAD_TESTING_TARGET_PATH }}"
},
{
"name": "duration",
"value": "${{ github.event.inputs.duration }}"
},
{
"name": "threads",
"value": "${{ github.event.inputs.threads }}"
},
${{ steps.configureloadtest.outputs.LOAD_TESTING_USERS }}
]
考慮事項
これらの考慮事項は、ワークロードの品質を向上させるために使用できる一連の指針となる Azure Well-Architected フレームワークの柱を実装します。 詳細については、「」を参照してください。 Microsoft Azure の適切に設計されたフレームワーク。
コストの最適化
コストの最適化とは、不必要な経費を削減し、業務効率を向上させる方法を検討することです。 詳細については、「」を参照してください。 コスト最適化の柱の概要。
使用 Azure の料金計算ツール カスタマイズされた価格の見積もりを取得します。
次のステップ
– まずはこれから始めましょう Azure Load Testing を使用して Azure で実行されているサービスをテストする
– サンプル実装 ここ 以下で構成されるマルチテナント サービスの負荷テスト:
- Azure Function でホストされるバックエンド (REST API)、
- Azure 静的 Web アプリでホストされるフロントエンド、
- Azure Table Storage でホストされるデータベース。
このサービスのパフォーマンスは、Visual Studio Code の開発コンテナー、Azure DevOps パイプライン、または Microsoft Entra Id テスト テナントを使用した Github アクションからテストできます。
#Azure #Load #Testing #を使用してマルチテナント #サービスをテストする