この Azure Well-Architected Framework のパフォーマンス効率チェックリストの推奨事項に適用されます。
PE:09 | 重要なフローのパフォーマンスに優先順位を付けます。 ワークロード リソースの割り当てとパフォーマンスの最適化作業は、最も重要なビジネス プロセス、ユーザー、および運用をサポートするフローに優先順位を付ける必要があります。 |
---|
このガイドでは、ワークロード内の重要なフローのパフォーマンスを優先するための推奨事項について説明します。 重要なフローは、収益を生み出したり、優先度の高い運用を推進したりする重要なビジネス プロセスを表します。 重要なフローのパフォーマンスに優先順位を付ける場合は、最も影響が大きいフローが、優先順位の低いフローの前に必要なリソースを取得するようにします。 この優先順位付けを行わないと、ワークロードの優先順位とユーザー エクスペリエンスに悪影響が及ぼす可能性があります。
定義
任期 | Definition |
---|---|
Flow | ワークロード内で、特定の機能を実行する一連のアクション。 フローには、データの移動と、ワークロードのコンポーネント間でのプロセスの実行が含まれます。 |
優先順位キューの処理 | 優先度の高いタスクを優先順位の低いタスクの前に処理する行為。 |
レート制限 | リソースにアクセスできる要求の数を制限する行為。 |
システム フロー | システム内の情報とプロセスのフロー。 システムはこのフローに自動的に従って、ユーザー フローまたはワークロード機能を有効にします。 |
ユーザー フロー | タスクを実行するためにユーザーが従うシーケンス。 |
重要なフローとは、ワークロード機能にとって重要な操作の顧客またはシステムおよびデータ フローの主要なユーザー フローを指します。 これらのフローには、ユーザー登録、サインイン、製品購入、ペイウォールの背後にあるページへのアクセス、ワークロード内のその他のキー パスやプロセスなどのアクションを含めることができます。
重要なフローは、ユーザー エクスペリエンスまたはビジネス操作に大きく影響します。 クリティカル フローには、重要でないフローよりも高いパフォーマンス目標とサービス レベル アグリーメントがあります。 リソースが制限されている場合、クリティカルでないフローでは、重要なフローにリソースの使用が生じるべきです。 重要なフローを分離して最適化する前に、すべてのフローを特定、監視、優先順位付けする必要があります。
すべてのフローを特定する
重要なフローのパフォーマンスを優先する最初の手順は、ワークロード内のすべてのフローを識別することです。 フローの識別には、すべてのユーザー パスとコンポーネントの通信を体系的にマッピングし、理解する必要があります。 ワークロードのパフォーマンスに対するフローのパフォーマンス メトリックと潜在的な影響を理解することに重点を置きます。
ワークロードを個別のフローに分割することで、パフォーマンスのボトルネック、非効率的なリソース使用率、およびパフォーマンス最適化の機会を見つけることができます。 この知識は、必要な改善の領域を明らかにし、重要なフローを特定するための最初のステップです。 詳細については、「 ユーザー フローとシステム フローの識別と評価」を参照してください。
フロー パフォーマンス メトリックを監視する
ワークロード内のすべてのフローを特定したら、各フローでパフォーマンス メトリックを収集し、それらのメトリックを監視する必要があります。 フロー メトリックは、応答時間、エラー率、スループットに関する分析情報を提供します。 目標は、パフォーマンス関連のメトリックを一貫して観察して記録し、各フローがワークロードのパフォーマンスに与える影響についてさらに理解を深めすることです。 フロー メトリックを監視するには、次のツールを使用してデータを収集します。
分析ツールと追跡ツール: これらのツールは、アプリケーション内でのユーザーの動作と相互作用に関する分析情報を提供します。 ユーザー データを分析することで、最も一般的なフロー、ボトルネック、または潜在的な問題を特定できます。
アプリケーション パフォーマンス監視 (APM) ツール: APM ツールを使用して、アプリケーションのパフォーマンスを監視し、フローの実行方法を追跡します。 これらのツールを使用すると、応答時間、エラー、その他のパフォーマンス メトリックを可視化できるため、重要なフローを特定し、パフォーマンスを最適化できます。
ログ記録およびデバッグ ツール: これらのツールを使用して、アプリケーションの実行中にログをキャプチャして分析し、情報をデバッグします。 ログとデバッグ情報を確認して、フローがどのように実行されているかを追跡し、問題やエラーを特定します。
重要なフローを特定する
使用可能なパフォーマンス データを使用すると、すべてのフローのランク付けを開始し、重要なフローを特定できます。 重要なフローの識別には、各フローのパフォーマンスへの影響と重要度の評価が含まれます。 効果的なフローの優先順位付けにより、最も重要なフローが、重要度の低いフローの前に必要なリソースを確実に受け取ります。 アプリケーションのフローに優先順位を付けるには、次の手順を検討してください。
ビジネスへの影響を特定する: まず、運用内の各フローの重要性を評価します。 各フローがビジネス目標にどのように適合するか、ユーザーへの影響、およびパフォーマンス低下の潜在的な悪影響に焦点を当てます。 たとえば、無料サービス レベルではより多くのユーザーを引き付ける可能性がある一方で、有料レベルはビジネス目標に不可欠な場合があります。
さらに、1 つ以上のビジネス プロセスにわたるフローのパフォーマンスへの影響を考慮してください。 複数のフローで 1 つのビジネス プロセスがサポートされる場合がありますが、多くの場合、1 つのフローがそのプロセスのパフォーマンスに大きな影響を与えます。 パフォーマンスに最も大きな影響を与えるフローを特定する必要があります。 逆に、1 つのフローが複数のプロセスを支える可能性があります。 このような場合、このフローのパフォーマンスは、関連するすべてのプロセスの有効性に直接影響し、重大なフローである可能性があります。
パフォーマンス データの分析: 各フローに関連付けられているパフォーマンス メトリックを分析します。 フローの効率と重要度に関する分析情報を提供できるパターン、異常、または目立つメトリックを探します。 たとえば、使用率が高いシステム フローは、おそらく重要なフローです。
重要度評価の割り当て: ビジネスへの影響と業績評価指標に基づいて、フローに優先順位を付ける必要があります。 高、中、低の重要度評価を使用します。 ビジネスに大きな影響を与えるフローや高パフォーマンスの需要があるフローは、"高" の重要度評価を受ける必要があります。 これらのフローは、重要なフローです。 ユーザー トラフィックが多いフローに焦点を当てたり、収益の生成に直接影響を与えたりします。 次の表は、クリティカル (High) フローと非クリティカル フロー (中 から 低) の特性を示しています。
重要なフロー | 重要でないフロー |
---|---|
使用率が高い | 使用率が低い |
Business Critical | ビジネスクリティカルではない |
コストの高い操作 | 小規模な操作 |
時間依存 | 時間の影響を受けません |
生産 | 試作 |
リアルタイム処理 | バッチ処理 |
待機時間の影響を受けやすい | 待機時間の影響を受けません |
有料ユーザー | 未払いユーザー |
Premium レベル | Basic レベル |
重要なタスク | 不要なタスク |
高収益アカウント | 低収益アカウント |
重要なフローを分離する
重要なフローを分離するプロセスは、重要なフローをサポートするための専用のリソースまたは容量を提供することです。 最適なユーザー エクスペリエンスや重要なビジネス成果に不可欠なフローにリソースと注意を割り当てる必要があります。 目標は、重要なフローが、効率的かつ効果的に動作するのに十分なコンピューティング能力、ネットワーク帯域幅、およびリソースを確実に受信できるようにすることです。 重要なフローを分離することで、重要なフローをサポートするリソースをより簡単に管理できます。 重要なフローを分離するための推奨事項を次に示します。
リソースのセグメント化: 重要なフロー用に個別のリソースを作成し、他のプロセスからの干渉なしに独立して動作できるようにします。 たとえば、専用ネットワーク セグメント上の重要なフローを分離したり、専用サーバーを使用してこれらのフローの処理ニーズを処理したりできます。 このアプローチは、クリティカルでないフローがクリティカル フローに悪影響を与える可能性を最小限に抑えるのに役立ちます。
論理的なセグメント化: Docker や Kubernetes などの仮想化およびコンテナー化ツールを使用して、ソフトウェア レベルでフローを分離します。 重要なフローを仮想マシン (VM) に分割できます。 これにより、分離された環境を作成し、依存関係と他のフローからの潜在的な干渉を減らします。
容量の割り当て: 重要なフローの場合は、CPU、メモリ、ディスク I/O などの固定容量セットを明示的に割り当てます。 この割り当てにより、重要なフローに、効率的に動作するのに十分なリソースが常に確保されます。 オーケストレーション プラットフォームを使用してリソース クォータまたは制限を設定します。 重要なフローにリソースを明示的に割り当てることで、リソースの競合を防ぎ、実行方法に優先順位を付けます。
トレードオフ: リソースのセグメント化はコストに影響します。 リソースをフロー専用にすると、多くの場合、コストが増加し、一部のリソースの使用率が低くなります。 重要なフローに対するパフォーマンスの向上を正当化するには、ビジネスへの影響の増加がコストの増加を上回る必要があります。
容量の割り当てを最適化する
重要なフローを分離できない場合、次に最適なオプションは、使用可能な容量にアクセスする際に重要なフローに優先順位を付ける方法です。 容量の割り当ての最適化は、重要度に基づいて、使用可能な容量をさまざまなフローに戦略的に分散することです。 容量には、CPU、メモリ、ストレージ、ネットワーク帯域幅が含まれます。 目標は、最も重要なフロー (最も優先度の高いフロー) が、効果的に動作するために必要な容量を確実に受け取れるようにすることです。 容量を割り当てる方法を決定するには、次の戦略を検討してください。
リソース容量の評価: フローに割り当てることができるリソース容量を評価します。 容量には、CPU、メモリ、ストレージ、ネットワーク帯域幅などのリソースが含まれる場合があります。 インフラストラクチャまたは環境の制限事項と制約について説明します。
フロー要件の分析: 各フローのリソース要件を分析します。 フローが効率的に動作するために必要なリソースを理解します。 各フローについて、CPU 使用率、メモリ要件、ネットワーク帯域幅など、リソースの需要を特定します。
割り当ての優先順位付け: 使用可能なリソース容量をフローのリソース要件と一致させます。 フローの優先順位に基づいてリソースを割り当て、優先順位の高いフローが要件を満たすために必要なリソースを確実に受け取ります。 最も厳しい制約の場所を理解し、必要な場所で容量の割り当てを最適化します。 たとえば、キューは 1 分あたり一部のメッセージのみを処理できますが、一部のストレージ制限に達するのは困難です。
レート制限を使用する: 重要なフローがパフォーマンス 目標を満たすために必要なリソースを使用できるようにするには、クリティカルでないフローとタスクにレート制限を適用します。 レート制限は、優先順位の低いフローの要求の数を制限し、ユーザーは制約付きリソースに対して行うことができます。 たとえば、API に対する非特権要求をレート制限できます。 詳細については、.NET の HTTP ハンドラーのレート制限パターンとレート制限を参照してください。
優先順位キュー処理を使用する: 優先順位キュー処理は、特定の要求に高い優先順位を与えます。 通常、キューには先入れ先出し (FIFO) 構造がありますが、キューに追加するメッセージに優先順位を割り当てるためにアプリケーションを更新できます。 この機能を使用して、重要なフローとユーザーに優先順位を付けます。 詳細については、「 優先順位キューパターン」を参照してください。
リスク: 重要なフローのニーズとワークロードの全体的なパフォーマンスのバランスを取る必要がある場合があります。 重要なフローに優先順位を付ける必要がありますが、重要でないフローを無視しないでください。 ワークロードの全体的なパフォーマンス効率は、すべてのフローによって異なります。 重要でないフローを無視すると、すべてのユーザーに影響する問題が発生する可能性があります。 不要な項目からのノイズが多すぎると、重要な項目から注意が盗まれます。 ただし、ノイズが少なすぎると、ワークロード全体に悪影響を与える可能性があります。 データの量とアラートの数には、これらのバランスの取れた優先順位が反映されている必要があります。
Azure ファシリテーション
フローの識別と監視: Azure には、ワークロード内の重要なフローのパフォーマンスを監視するのに役立つさまざまなソリューションが用意されています。 Azure Monitor、Azure Monitor ログ、Azure Application Insights は、複数の種類のアプリケーションとワークロードに対して包括的な監視機能を提供するサービスの一部です。
容量の割り当ての最適化: 一部の Azure サービスでは、リソースのセグメント化、論理的なセグメント化、および容量割り当ての手法をサポートして、重要なフローに容量とリソースを割り当てます。 個別のリソースの作成、密度の向上、仮想化とコンテナー化の使用、重要なフローへのリソースの明示的な割り当てなどの手法を使用して、重要なフローを分離できます。
Azure API Management など、一部の Azure サービスには、レート制限用の組み込みポリシーが用意されています。 Azure では、 レート制限設計パターンの詳細なガイダンスとサンプル実装が提供されています。
Azure では、優先順位キューの処理がサポートされています。 Azure Functions には、キューやトピックの新しいメッセージなど、さまざまな方法でトリガーできるイベントドリブン関数が用意されています。 Azure Functions と Azure Queue Storage または Azure Service Bus を組み合わせて、優先順位に基づいてメッセージを処理します。
関連リンク
パフォーマンス効率チェックリスト
推奨事項の完全なセットを参照してください。