パフォーマンスと費用の最適化

アーキテクチャ フレームワークのこのセクションでは、デプロイでパフォーマンスと費用の最適化のバランスをとる方法について説明します。

このフレームワークは、次の一連の記事で構成されています。

戦略

パフォーマンス要件を評価する。アプリケーションの優先度と、それらのアプリケーションに必要な最小パフォーマンスを決めます。

スケーラブルな設計パターンを使用する。自動スケーリング、コンピューティングの選択、ストレージ構成により、スケーラビリティとパフォーマンスを向上させます。

コスト削減の方法を検討して実装する。実行中の各サービスのコストを評価し、優先度を関連付けてサービスの可用性とコストを最適化します。

ベスト プラクティス

  • 自動スケーリングとデータ処理を使用する。
  • GPU と TPU を使用してパフォーマンスを向上させる。
  • 調整するアプリを特定する。
  • 費用を分析して最適化する。

自動スケーリングとデータ処理を使用する

負荷が増加または減少したときに、自動スケーリングを使用して一致するリソースの追加または解放を行います。

Compute Engine の自動スケーリング

マネージド インスタンス グループ(MIG)を使用すると、複数の同一 VM でステートレス アプリをスケーリングできます。その場合、Compute Engine リソースのグループが、ポリシーに基づく単一テンプレートで起動します。自動スケーリング ポリシーには、CPU 使用率、負荷分散容量、Cloud Monitoring 指標が含まれます。また、ゾーン MIG の場合は、Pub/Sub などのキューベースのワークロードに基づくスケーリングが含まれます。

Google Kubernetes Engine の自動スケーリング

Google Kubernetes Engine(GKE)のクラスタ オートスケーラー機能を使用すると、ワークロードのさまざまな需要に基づいてクラスタのノードプールを管理できます。クラスタ オートスケーラーは、実際のリソース使用率ではなく、ノードプールのノードで実行されている Pod のリソース要求数に基づいて、ノードプールのサイズを自動的に調整します。

サーバーレス自動スケーリング

サーバーレス コンピューティングのオプションとしては、Cloud RunApp EngineCloud Functions があり、それぞれ自動スケーリング機能を備えています。これらのサーバーレス オプションを使用して、マイクロサービスまたはファンクションをスケーリングします。

データ処理

DataprocDataflow には、データ パイプラインとデータ処理をスケーリングする自動スケーリング オプションが用意されています。これらのオプションを使用すると、処理負荷に応じて、パイプラインでより多くのコンピューティング リソースにアクセスできるようになります。

設計に関する質問

  • 変動するユーザー負荷や処理要件があるアプリケーションはどれか。
  • 変動するデータ要件があるデータ処理パイプラインはどれか。

推奨事項

  • Google Cloud ロードバランサを使用して、グローバル エンドポイントを提供します。
  • Compute Engine でマネージド インスタンス グループを使用して自動的にスケーリングします。
  • GKE のクラスタ オートスケーラーを使用して、クラスタを自動的にスケーリングします。
  • App Engine を使用して、PaaS(Platform-as-a-Service)アプリケーションを自動スケーリングします。
  • Cloud Run または Cloud Functions を使用して、ファンクションまたはマイクロサービスを自動スケーリングします。

主なサービス

リソース

GPU と TPU を使用してパフォーマンスを向上させる

Google Cloud には、ワークロードのパフォーマンスを高速化するオプションが用意されています。これらの専用ハードウェア プラットフォームを使用して、アプリケーションとデータ処理のパフォーマンスを向上させることができます。

GPU(グラフィック プロセッシング ユニット)

Compute Engine は、仮想マシン インスタンスに追加できる GPU を備えています。これらの GPU を使用して、機械学習やデータ処理などの特定のワークロードをインスタンス上で高速化できます。

TPU(Tensor Processing Unit)

TPU は、機械学習ワークロード用の Google のマトリックス プロセッサとして設計されています。TPU は、大規模なパイプラインを使用した大規模な行列演算に最適で、メモリアクセスが大幅に減少します。

リソース

調整するアプリを特定する

アプリケーション パフォーマンス管理(APM)には、レイテンシとコストの低減に役立つツールが用意されており、アプリケーションをより効率的に実行できます。Cloud TraceCloud DebuggerCloud Profiler を使用すると、コードとサービスの機能を分析し、必要に応じてトラブルシューティングを行うことができます。

インストゥルメンテーション

レイテンシは、ユーザー エクスペリエンスを左右する重要な要素です。アプリケーションのバックエンドが複雑な場合や、マイクロサービス アーキテクチャの採用を始めている場合、サービス間の通信の遅延やボトルネックの特定が難しくなります。Cloud Traceと OpenTelemetry ツールを使用すると、デプロイからレイテンシ データを収集して迅速に分析できます。

デバッグ

Cloud Debugger は本番環境のコードの動作をリアルタイムで検査し、分析できます。これにより、パフォーマンスへの影響や速度低下が生じることはありません。

プロファイリング

パフォーマンスの悪いコードはレイテンシを増大させ、アプリケーションやウェブサービスのコストにも影響を及ぼします。Cloud Profiler を使用すると、アプリケーション全体で実行され、CPU やメモリを大量に消費する関数のパフォーマンスを継続的に分析できます。

推奨事項

  • Cloud Traceを使用して、アプリケーションをインストルメントします。
  • Cloud Debugger を使用して、本番環境のリアルタイムのデバッグ機能を提供します。
  • Cloud Profiler を使用して、アプリケーションの動作パフォーマンスを分析します。

費用を分析して最適化する

費用を最適化するには、まず現在の使用量と費用を把握する必要があります。Google Cloud では、BigQuery に課金データをエクスポートして、詳細な分析を行うことができます。BigQueryGoogle データポータルに接続して、視覚的な分析を実行できます。また、Tableau、Qlik、Looker などのサードパーティのビジネス インテリジェンス(BI)ツールを実行することもできます。予算が特定の基準額を超えた場合に通知を送信するには、プログラムによる通知機能を使用します。サードパーティのソリューション プロバイダやカスタムアプリケーションで予算通知を行うこともできます。

継続利用割引は、請求月の Compute Engine リソースの実行時間が一定の割合を超えた場合に自動的に適用される割引です。特定の Compute Engine 仮想マシン(VM)タイプを長期間使用すると、継続利用割引が適用されます。

確約利用割引は、必要なリソース量を予測可能なワークロードに最適です。確約利用割引を購入すると、1 年間または 3 年間の支払いを確約する代わりに、特定の量の vCPU、メモリ、GPU、ローカル SSD を割引価格で購入できます。

プリエンプティブル VM は、通常のインスタンスよりはるかに低価格で作成、実行できるインスタンスです。ただし、このインスタンスは、他のタスクがリソースへのアクセスを必要とする場合に、Compute Engine によって終了(プリエンプト)される可能性があります。プリエンプティブル インスタンスは Compute Engine の余剰のキャパシティを利用する機能であり、使用できるかどうかは利用状況に応じて異なります。

費用の構成要素がわかれば、最適化の方法を決めることができます。使用率の低いリソースや必要のないリソースを見つけることをおすすめします。Compute Engine では、VM の推奨サイズが提示されます。これは、リソースのサイズを設定する際に役立ちます。変更を適用した後、以降の課金データを比較し、費用の違いを確認できます。

使用料金を予測するには、Google Cloud 料金計算ツールを使用します。

推奨事項

  • 組織全体で一意のラベルを使用し、使用量を追跡します。
  • BigQuery への課金データのエクスポート機能を使用します。
  • データポータルなどの可視化ツールを使用して、課金データのレポートを可視化します。
  • Compute Engine が推奨する適切なサイズを実装します。
  • Compute Engine で年間の使用量と、確約利用割引を購入するための予測使用量を特定します。
  • Cloud Storage オブジェクトのライフサイクル管理を使用して、ストレージの費用を管理します。

リソース