ユーザーの視点からアプリケーションのパフォーマンスをベンチマーク評価する方法
Rich Gowman
Software Engineer
Eyal Yablonka
Product Manager
※この投稿は米国時間 2024 年 10 月 16 日に、Google Cloud blog に投稿されたものの抄訳です。
アプリケーションのパフォーマンスはどのようなものでしょうか。それを確認するにはどうすればよいでしょうか。さらに重要なのは、エンドユーザーがアプリケーションのパフォーマンスについてどう思っているかです。
急速な成長によりトラフィックが予期せず急増し得るこの時代に、アプリケーションのスケーラビリティを把握することは、単に技術的な問題ではありません。成功のための戦略として不可欠なものです。エンドユーザーに最適なパフォーマンスを提供することは言うまでもなく必須事項であり、そのベンチマーク評価は、エンドユーザーの期待を満たすための主要な方法となります。
ただし、単にアプリケーションのコンポーネントをベンチマーク評価するだけでは不十分です。実世界の条件下でのアプリケーションのパフォーマンスの全体像を把握するには、クリティカル ユーザー ジャーニー(CUJ)全体を最初から最後まで、ユーザーの視点からベンチマーク評価する必要があります。コンポーネント別のベンチマーク評価では、さまざまなコンポーネント、ネットワーク レイテンシ、外部依存関係の相互作用による潜在的なボトルネックやパフォーマンスの問題を見逃す可能性があります。完全なユーザーフローをシミュレーションすることで、実際のユーザー エクスペリエンスに関するインサイトが得られ、ユーザーの満足度とエンゲージメントに影響するパフォーマンスの問題に対処できるようになります。
このブログ投稿では、エンドユーザー側から見たパフォーマンスのベンチマーク評価を最新のアプリケーション開発に組み込むことが重要である理由と、開発の最初からアプリケーションをベンチマーク評価し、開発過程で継続してベンチマーク評価する組織文化を醸成する方法について説明します。また、Google Kubernetes Engine(GKE)エンジニアリング チームがオープンソースの Locust ツールを使用して複雑なユーザーの行動をシミュレーションする方法を紹介し、エンドツーエンドのベンチマーク評価の一部として活用できることを示します。
ベンチマーク評価が不可欠である理由
堅牢なベンチマーク評価をアプリケーション開発プロセスに組み込むべき理由は多数あります。
-
プロアクティブなパフォーマンス管理: 開発の早期段階から頻繁にベンチマーク評価を行うと、デベロッパーが開発サイクルの早い段階でパフォーマンスのボトルネックを特定して対処することができ、それがリソースの節約、製品化までの時間の短縮、プロダクトのよりスムーズなリリースにつながります。さらに、検査プロトコルにベンチマーク評価を組み込むと、パフォーマンスの低下を迅速に検出して対処することでコードの質とユーザー エクスペリエンスを保護し、重要なセーフティ ネットを追加できます。
-
継続的なパフォーマンスの最適化: アプリケーションは動的なものであり、絶え間ない進化やスケーリング、ユーザーの行動の変化から影響を受けます。ベンチマーク評価を定期的に行うと、パフォーマンスの傾向を継続的にモニタリングして、デベロッパーが新しい機能、更新、システム変更の影響を評価できます。そのため、変化に直面してもアプリケーションのパフォーマンスと応答性を維持できるようになります。
-
開発環境と本番環境のギャップを埋める: 開発プロセスの一部として、実世界のワークロード、イメージ、スケーリング パターンをベンチマーク評価すると、本番環境でのアプリケーションのパフォーマンスを現実的に評価できます。これにより、デベロッパーは潜在的な問題に予防的に対処でき、開発環境から本番環境にスムーズに移行できます。
実世界の負荷パターンを再現するシナリオをベンチマーク評価する
デベロッパーは、デプロイ、スケーリング、負荷パターンなどの実世界のシナリオを忠実に再現する条件下で、アプリケーションをベンチマーク評価することを目指す必要があります。このアプローチでは、アプリケーションが、パフォーマンスやユーザー エクスペリエンスを低下させずにトラフィックの予期せぬ急増に対応できるかをテストします。
GKE エンジニアリング チームでは、Google のクラスタとワークロード オートスケーラーをテストして最適化するため、広範なベンチマーク評価を実施しています。Google Cloud の自動スケーリング メカニズムが変化する需要にどのように応答するかを把握できるため、リソース使用率を最大限にし、アプリケーションの最適なパフォーマンスを維持するのに役立ちます。
Locust を利用して現実的な負荷テストとパフォーマンスのベンチマーク評価する
Locust は、高度でありながら簡単に利用できる負荷テストツールで、スクリプト言語によって複雑なユーザー行動をシミュレーションできます。そのため、現実的な条件下でのアプリケーションのパフォーマンスを包括的に把握できます。Locust では、特定のタスクを実行する「ユーザー」を定義してインスタンス化することで、さまざまな負荷シナリオを作成できます。
ベンチマークの一例として、Google Cloud は Locust を利用して、ユーザーがウェブサーバーにアクセスしてフィボナッチ数列の 30 番目をリクエストするシナリオをシミュレーションしました。これにより、リクエストごとに約 200 ms の一貫した負荷が生じました。また、さまざまな Pod すべてでロードバランスされるよう、各接続が切断され再確立されました。
Locust を使用すると、このような複雑なユーザー インタラクションをアプリケーション内で比較的簡単にシミュレーションできます。1 台のマシンで最大毎秒 10,000 個のリクエストを生成でき、デフォルト構成でも分散型デプロイを使用してさらにスケーリングできます。カスタム負荷形状によりユーザー数とスポーンレートを詳細に制御できるため、多様な負荷プロファイルを持つユーザーの実世界の負荷パターンをエミュレートできます。ウェブおよび REST リクエスト用に HTTP/HTTPS プロトコルをネイティブにサポートしており、XML-RPC、gRPC、およびさまざまリクエスト ベースのライブラリ / SDK など、広範なシステムに拡張可能です。
このブログ投稿に付随して、プレリリース版の自動スケーリング クラスタ環境のエンドツーエンド ベンチマークを示す GitHub リポジトリを提供しています。これを特定の要件に合わせて変更して利用することをおすすめします。
ベンチマーク実行の指標を表示する Locust のウェブ インターフェース
エンドユーザー側から見たパフォーマンスのベンチマーク評価は、ベスト プラクティスであるだけでなく、卓越したユーザー エクスペリエンスを提供するために不可欠です。ベンチマーク評価を開発プロセスに積極的に組み込むことで、アプリケーションが変化するユーザー デマンドに対応し、パフォーマンスと応答性を維持できるかを知ることができます。
Locust などのツールを利用すると、実世界のシナリオをシミュレーションでき、多様な条件下におけるアプリケーションのパフォーマンスに関してより深いインサイトを得ることができます。パフォーマンスは継続的に追求していくものです。卓越したユーザー エクスペリエンスを提供できるよう、ベンチマーク評価を活用してみてください。
Google Cloud では、GKE をより高速かつスケーラブルで、効率的なものにするための取り組みを続けています。Kubernetes 環境を早めにアップグレードして、GKE v1.29 で導入されたクラスタ オートスケーラーの機能改善など、GKE の最新機能をご活用ください。