フローのコストを最適化するための推奨事項
次の Azure Well-Architected フレームワークのコストの最適化チェックリストの推奨事項に該当します。
CO:09 | フローのコストを最適化します。 各フローのコストをフローの優先順位に合わせます。 フローの優先順位を決めるときは、各フローの特性、機能、機能以外の要件を考慮します。 フローの支出を最適化するには、多くの場合、戦略的な侵害が必要です。 |
---|
このガイドでは、ワークロードの各フローのコストを最適化するための推奨事項について説明します。 ワークロードのフローのコストの最適化では、リソースを戦略的に割り当てて管理し、パフォーマンスを維持しながら経費を最小限に抑える必要があります。 この最適化は、それによって投資されたリソースが効率的に利用され、不要な支出が減り、インフラストラクチャの全体的な投資収益率が向上するので、重要なことです。 ワークロードのフローのコストを最適化しない場合、リソースが過剰に使われる恐れがあり、結果として運用コストが増大して収益性が低下します。
定義
相談 | 定義 |
---|---|
切り離し | 複数のフローを含むリソースからフローを削除し、別のリソースに配置する戦略。 |
フロー | ワークロード内で、特定の機能を実行する一連のアクション。 フローには、ワークロードのコンポーネント間のデータの移動とプロセスの実行が含まれます。 |
システム フロー | システム内の情報とプロセスのフロー。 システムはこのフローに自動的に従って、ユーザー フローまたはワークロードの機能を実現します。 |
ユーザー フロー | ユーザーがアプリケーションまたはシステム内で実行するアクションのパスまたはシーケンス。 |
主要な設計戦略
優先順位の低いフローより優先順位の高いフローに投資します。 フローの優先順位と支出を合わせるには、現在同じリソースを共有している複数のフローの切り離しが必要になる場合があります。 また、似た要件を持ちながら、個別のリソースで実行されているフローの結合を伴う場合もあります。 たとえば、ユーザー登録、サインイン、データ処理などの複数のフローを含む Web アプリケーションがあるとします。 これらのフローは、必要なリソースは異なりますが、1 つのサーバーで実行されます。 コストとパフォーマンスの両方を最適化するには、フローを分離したり、フローを組み合わせたりする場合があります。
フローを分離する: たとえば、ユーザー登録フローを他から切り離して、専用の低コストのサーバーに移動することがあります。 このフローは重要ですが、消費するリソースは多くないので、低コストのサーバーに移動するのによい候補です。
フローを結合する: たとえば、どちらも必要なリソースが多いサインインとデータ処理のフローを結合し、ハイ パフォーマンスのサーバーでまとめて実行できます。 これらのフローを結合すると、サーバーは両方のフローのリソース集中型のニーズを効率的に処理できます。 それによってパフォーマンスとコストが最適化されます。
1 つのワークロードに、考慮する必要がある異なる種類のフローまたはパスが存在することがあります。 このガイドでは、次のフローの種類に焦点を当てます。
システム フロー: システム フローの最適化には、システム コンポーネント間の通信と相互作用の合理化、ボトルネックの最小化、効率的なリソース使用の実現が含まれます。
ユーザー フロー: ユーザー フローの最適化には、ユーザー エクスペリエンスの改善、摩擦を生む箇所の削減、アプリケーションまたはシステム内での円滑なナビゲーションと対話の実現が含まれます。
フローのインベントリを作成する
フロー インベントリは、ワークロード内のすべての一連のアクション、データ遷移、システム操作の包括的なリストと説明です。 フロー インベントリは、投資がフローの優先順位と一致するようにするための最初のステップです。 フローの目的と依存関係を完全に理解した場合にのみ、フローを最適化してください。 ワークロードのフローのインベントリを作成する手順を次に示します。
フローを文書化する: 最初に、ワークロード内のすべての既存フローの文書と一覧を作成し、システムの包括的な状態を理解します。 アクションのシーケンス、データの遷移、システムの相互作用をすべて含めます。 外部サービス、データベース、ミドルウェア、サード パーティの統合など、すべてのコンポーネントについて理解します。 さらに、経時的に要求の量を追跡するか見積もります。
フローを視覚化する: より明確に全体を把握するため、できればフローチャートや図を使って、わかったことを視覚的に表します。 視覚化は、コンポーネント間の相互依存関係を確認するのに役立ちます。 視覚化に役立つ Visio などのツールの使用を検討します。
フローを分類する: 機能 (認証、データ取得、トランザクション処理など)、ビジネスに対する重要度、または使用するリソース (CPU、メモリ、帯域幅) のような属性を考慮して、似たフローをまとめます。
フローの優先順位を決める
フローの優先順位付けとは、ビジネスの成果への影響、ユーザー エクスペリエンスへの影響、消費するリソースに基づいて、フローを分類するプロセスです。 多くの場合、ワークロードの目標を満たすため、重要なフローには、より高いレベルの可用性、より高速な復旧時間、より良いパフォーマンスが必要になります。 フローの優先順位を決めると、支出をフローの優先順位に合わせてより適切に調整できます。 フローの優先順位を決めるには、次の手順を検討します。
フローの価値を明らかにする: ワークロードのフローのコストを最適化するときは、最も多くの価値を提供するフローを特定する必要があります。 フローの価値を超えるコストを費やしたくはありません。 単にコストを削減するのではなく、コストをシフトして、より価値の高いフローを優先することを検討します。 たとえば、チェックアウト フローはビジネスにとって不可欠ですが、購入履歴はそうではありません。 チェックアウト フローに、より多くのリソースと予算を割り当てる必要があります。
優先度の低いフローでは、期待される可用性、復旧、パフォーマンスが低くなります。 低コストの構成を使って、パフォーマンス、可用性、またはビジネス継続性の支出を減らし、コストを削減できます。
フローのメトリックを検討する: フローの優先順位を決めるのに苦労している場合は、それらに割り当てた可用性と復旧の目標を検討します。 重要なフローには、多くの場合、高い可用性要件とサービス レベル アグリーメント (SLA) が指定されています。 低い RPO と RTO が関連付けられているフローは、RPO と RTO が高いフローより重要です。
独立したフローを最適化する
フローが別のリソースで既に実行されている場合があります。 このような場合は、支出をより簡単に評価して最適化できます。 独立した各フローに関係するコンポーネントとプロセスを評価し、それらを最適化または簡素化する方法があるかどうかを判断します。 独立したフローの最適化は、次の手順に従って行うことができます。
不要なコンポーネントを排除する: フローのコア機能に寄与しない余分な要素を除くと、複雑さとコストが減ります。
フローを再設計する: フローのアーキテクチャを設計し直して、効率を高めることを検討します。 たとえば、操作のシーケンスを変更したり、待ち時間を短縮したり、データ転送速度を向上させたりできる場合があります。
適切なパフォーマンス レベルを選択する: フローが異なると、処理速度、メモリ、または他のリソースのメトリックに関する要求が異なる可能性があります。 各フローの特定の要件に合ったリソース レベルを選ぶようにします。
スケーリングの設定を調整する: フローで需要が変動する場合は、自動スケーリングを実装して、リアルタイムのニーズに応じてリソースを動的に調整し、コストを最適化することを検討します。
構成を微調整する: ネットワークやデータ ストレージのオプションなどの他の設定を微調整して、フローのパフォーマンスと予算の要件にいっそう適切に合わせます。
類似性のないフローを分離する
類似性のないフローの異なるリソースへの分離は、異なる計算ニーズを持つ個別のタスクを専用リソースに割り当てるプロセスです。 異なるフローとは、異なる属性を持つフローです。 これらの属性には、計算要件、データ依存関係、I/O 操作、待機時間感度、セキュリティ ニーズ、コンプライアンス要件が含まれることがあります。 多くの場合、異なる種類のフローを個別のリソースで実行する方がコスト効率が高くなります。 このようにすると、各フローに正確にリソースを割り当てることができ、不要な支出が減り、最大限の効率が実現されます。
現在は結合されている類似性のないフローの分離を検討します。 この分離により、スケーラビリティ、フォールト トレランス、適応性が向上し、コストも合理化されます。 各フローの動作を独立させると、干渉のリスクが減り、各フローの優先順位に基づいてより良いコスト効率でリソースを割り当てることができます。 たとえば、CRM (ユーザー フロー) とデータ エンジン (データ フロー) を併置するとします。 業務時間中の CRM システムへのユーザー トラフィックにより、データ エンジンの速度が低下する可能性があります。 フローを切り離すと、データ エンジンはワークロードの需要に基づいて各コンポーネントまたはサービスを個別にスケーリングできます。 この切り離しにより、リソースの割り当てが最適化されて、コストが減ります。
類似性のあるフローを結合する
類似性のあるフローを 1 つのリソースに結合することは、同等の属性を持つタスクまたはプロセスを統合して、それらに共有リソースを使用するプロセスです。 この戦略により、冗長性が排除され、リソースがより効率的に使われるため、大幅なコスト削減につながります。 同様のフローは同様の属性を共有しています。 類似性のないフローを分離するときに調べるのと同じ属性 (計算要件、データ依存関係、I/O 操作、待機時間感度、セキュリティ ニーズ、コンプライアンス要件) を検討できます。 同じリソースを使うように類似性のあるワークロード フローを結合すると大幅に節約できる例を次に示します。
Web サーバー: アプリケーションごとに個別の Web サーバーを専用にするのではなく、それらのトラフィックが一貫して高くない場合は特に、それらを統合することを検討します。 共有 Web サーバーをリバース プロキシと組み合わせると、トラフィックを効果的に管理して、複数のアプリケーションにルーティングできます。
API ゲートウェイ: 個々のマイクロサービスまたはアプリケーション用に個別に API ゲートウェイを維持するのではなく、一元化された API ゲートウェイを使って要求を合理化し、関連するサービスにそれらを転送できます。 これにより、管理が容易になり、コストも削減されます。
ログ処理: それぞれが独自のログ処理インスタンスを操作する複数のアプリケーションまたはサービスを使う代わりに、それらのすべてを共有ログ処理ツールに転送することを検討します。 この方法では、アクティブなインスタンスの数が最小限になり、コストの削減に直接つながります。
認証サービス: 複数のアプリケーションが個別に独自の認証メカニズムをデプロイした場合、冗長になります。 シングル サインオン (SSO) ソリューションまたは共用認証サービスを統合すると、この重複が減り、リソースの使用が最適化されて、コストが減ります。
リスク: 設計での一致を間違えないでください。 2 つのフローが似ているように見えても、果たす目的が同じであるとは限りません。 各フローをマージまたは変更する前に、それぞれの機能と設計を理解する必要があります。 見た目だけに注目してフローの解釈を誤ると、意図しない結果になり、サポートされるサービスまたはプロセスが中断される可能性があります。 複数のフローが同じ機能を果たしていて、その設計や意図に明確な違いがない場合は、それらを統合することを検討します。
フローを継続的に監視する
フローやワークロードの性質は時間が経つと変化する可能性があるため、フローの支出を検討して、コストが優先順位と一致していることを確認する必要があります。 各フローに関連付けられたコンピューティング、ストレージ、ネットワークの使用状況を分析することで、各フローのリソース使用率を評価します。 非効率的な部分またはリソースの使用率が低い領域を明らかにします。 この分析は、コスト最適化の機会を特定するのに役立ちます。 フローの使用状況を検討する際に考慮すべきことを次に示します。
使用パターンを分析する: フローの使用パターンを分析します。 フローにより、特定の 1 日または 1 か月だけアクティブになるものもあれば、負荷が一貫しているものもあります。 このようなパターンを理解すると、リソースのニーズを予測し、割り当てを調整して、ボトルネックやオーバープロビジョニングを回避できます。
関連するメトリックを監視する: 各フローの効率性とコスト効率を評価するのに役立つメトリックを特定します。 CPU 使用率、データ転送コスト、トランザクション コスト、ストレージ占有領域を考慮します。 監視ツールを使って、リソースの使用状況とパフォーマンスに関する詳細なメトリックを収集します。
継続的なメンテナンスを検討する: 仮想マシンのようなサービスとしてのインフラストラクチャ ソリューションを使うときは特に、メンテナンスのコストを考慮します。 パッチの適用、アップグレード、バックアップ、監視、セキュリティなどのアクティビティを考慮する必要があります。
分析の間に、非効率性やリソースが効果的に利用されていない領域を特定します。 アイドル状態のコンピューティング インスタンス、未使用のデータ、低いネットワーク帯域幅を検討します。 これらの非効率性は、コスト最適化の機会を示している可能性があります。
Azure ファシリテーション
フローの優先順位付け、最適化、監視: Application Insights の User Flows ツールは、サイトのページ間や機能間のユーザー ナビゲーションを視覚的に表現します。 このツールは、ユーザーが頻繁に離れたり、アクションを繰り返したり、特定のパスに従ったりする領域を特定するのに役立ちます。 実際のユーザーの動作と予想される結果および目標を比べることで、重要なフローを識別できます。 また、高チャーン率、反復的なアクション、設計上の欠陥など、潜在的な問題を最適化することもできます。 また、このツールは、ディメンションを使ったカスタム プロパティのフィルター処理にも対応しており、分析をよりいっそうカスタマイズできます。
Azure Monitor は、アプリケーションのパフォーマンスと正常性に関する分析情報を得るのに役立ちます。 監視と診断の機能が提供されます。 これらの機能を使うと、パフォーマンスのボトルネックを特定し、リソースの使用を最適化し、コストに影響する可能性のある問題を検出してトラブルシューティングすることができます。
Log Analytics は、さまざまなソースからログ データを収集、分析、視覚化できるツールです。 Log Analytics を使うと、使用とデータ保持を管理して、アプリケーションとインフラストラクチャのログに関する分析情報を取得し、傾向を特定して、コストを最適化できます。 コストをより適切に管理するには、ログを同じ場所に置き、共有ソリューションではなく専用ソリューションを使うことを検討します。
関連リンク
コスト最適化チェックリスト
レコメンデーションの完全なセットを参照してください。