現在様々なサービスがWeb上で提供されており、モバイルの劇的な拡大ともあいまって、それらのサービスのビジネス上の重要性が増している。そして各企業は優れたユーザー体験をより多くのお客様に提供し、さらに、改善し続けることで他社との差別化を図っている。
どのくらい優れたユーザー体験を提供できるかという観点においては、優れたユーザーインターフェース(UI)に注目が集まりがちだ。しかし、基本的だが極めてインパクトが大きい要素の1つに、サービスの反応速度等の含めた“パフォーマンス“がある。

負荷テストの難しさ:実環境に近いテストを自前で実施できるか?

多くのユーザーにサービスを利用してもらうことを目指す限り、パフォーマンスという観点で快適に利用してもらうためには以下の2点を適切に考慮した上でサービスをリリースする必要がある。
@どれだけのユーザーが同時に利用するのか?
Aユーザーはどのような環境(場所やネットワーク回線等)で利用するのか?
上記@についてはWebの世界に限らず、従来からあるような多くの社員が利用する業務アプリケーションと同じであるためその重要性も想像に難くないが、Aについては意外と見落としがちな点である。
たとえば、大部分のユーザーが高速かつ安定したネットワーク経由でアクセスしているが、一部のユーザーが地理的に離れたモバイル等の遅いネットワーク経由でアクセスするケースを想像してほしい。このように利用者の一部に遅いユーザーが混ざるだけで、他の大部分の安定した環境で利用しているユーザーの性能に影響を及ぼすケースが起こりうるのだ。これは、システムの作りにもよるが、遅いユーザーの処理中にシステムリソースが長期間占有されてしまうことに原因がある。つまり、その間はシステム全体で利用可能なリソースが減ってしまうため、結果的に早いネットワークのユーザーも割を食ってしまうのだ。特に近年は、日本のみならず様々な場所から利用するケースや、速さが異なるモバイルなど回線の種類も多くなってきているため、上記のようなケースを想定した負荷テストがこれまで以上に必要になってくる。
つまり、優れたサービスをリリースするためには、テスト段階において上述のAも考慮したテストを実施しなければならない。しかも、競合他社との差別化を追及する限り、サービスそのものの改善活動は継続的に行われることとなり、その都度このようなテストが毎回に発生することになる。
しかし、このように大量かつ分散された状況をテストするための環境を作ることは、もはや一企業の努力では難しくなってきているのが現状ではないだろうか。

As a Serviceとしての性能テスト

このような状況を解決する手段として、近年弊社ではクラウド型負荷テストサービスである「StormRunner Load」をリリースしている。これはクラウドを活用したいわゆるSaaS型の負荷テストサービスであるため、ユーザーは大規模な負荷テスト用のサーバーリソースを準備することなく、すぐに利用を開始できる。しかも1ユーザーから100万ユーザーまで、様々な世界の地点から、上述のネットワーク品質等も考慮した大規模な負荷テストを迅速にかけることが可能だ。
以下、簡単な利用手順を見てみたい。

利用シナリオ作成

サービスの利用者は、あらかじめ想定されるユーザーの利用シナリオを準備しておく。たとえば、Webの場合はユーザーがどのような手順でWebページを利用するか、その操作手順の代表例を定義したものだ。このシナリオには、StormRunner Loadであらかじめ準備されているシナリオ作成ツール「VuGen/TruClient」で作成したものに加え、近年利用が増えているJMeterやGatling などのOSSベースの負荷テストツールで作成したシナリオも利用可能である。そのため、スクリプトは従来の慣れたOSSベースで作成し、大量かつ分散された状況を想定した負荷をかけるためのテスト基盤としてStormRunnerを活用することも可能だ。
図:シナリオ記録ツールTruClientによる記録イメージ。Web上の操作が自動記録される

負荷テストの計画

シナリオを準備した後は、サービスの利用者が、どの場所から、どのようなネットワーク回線経由でアクセスするかを設定する。
ここの設定をどれくらい実利用シーンに近づけるかが、意味のある負荷テストの肝となる。
図:想定アクセスユーザの場所、ユーザー数、回線スピード等を設定する画面

負荷テストの実施

後は計画に従ってテストを実行するだけである。実行した瞬間に、テスト計画に従い世界各地のパブリッククラウド環境(AmazonやAzure)上に負荷を生成するためのリソース群が自動的にプロビジョニングされ、テスト対象サービスとの間のネットワーク回線品質等のエミュレーションを適用した上でテストが開始される。負荷テスト中も、リアルタイムに負荷状況が可視化される。
図:テスト中の負荷状況を可視化するダッシュボード

レポーティング & 改善サイクルの開始

負荷テスト実行後は、当然ボトルネックの特定と改善が必要となるが、それらを支援するために様々なレポートも提供される。
図:テスト結果のサマリレポートの例

オートスケーリング環境での負荷テストの必要性

近年パブリッククラウド等では自動拡張機能(いわゆるオートスケーリング)があるため、負荷テストの必要性が減っているという議論も散見される。しかし、ユーザーが実際に利用するシナリオ(上述の利用シナリオ)でテストを実施しなければ、実際のユーザー体感は判明しない。しかも、オートスケーリング自体が(クラウド側ではなく、自身のアプリケーション側として)正しく機能するか、更には限界値に達した場合に適切にエラーページ等に切り替わるかなども実際にテストをしてみないとわからない。その点では負荷テストの必要性は減ってはいない。

今後の利用ニーズの展望:IoT普及を見据えて

今後は様々なモノがインターネットにつながる、いわゆるIoTがあらゆるビジネスに浸透していく。IoTには多くのビジネスの可能性が秘められているため、そのデータ活用方法のビジネスモデルに注目が集まりがちだ。しかし、テクノロジーの観点では様々なモノに搭載されているセンサーがリアルタイムかつ大量にデータをクラウド環境上の処理プラットフォームに集約するため、そのシステムパフォーマンスの極めて重要になる。
更に、これらのセンサーが搭載されるモノは、単一の箇所に集中しているケースもあれば、日本や世界各地に分散しているケースもあるため、これらを考慮したテストはますます高度な技術が必要となる。
このような状況において、今後「StormRunner Load」は効果的な負荷テストサービスを提供していくことができると考えている。

トライアルについて

通常オンプレミスのツールの場合、評価を行うためにサーバーリソースの準備などハードルが高いが、クラウド型のサービスであるため、トライアル利用も極めて簡単だ。
詳しくは、以下のページを見てほしい。驚くほど簡単に負荷テストを開始できることを実感いただけるはずだ。
http://www8.hp.com/jp/ja/software-solutions/stormrunner-load-agile-cloud-testing/