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