カオスエンジニアリングのプラクティス:スクイーズテスト(Squeeze Test)とは

カオスエンジニアリングや継続的ベリフィケーションの解説で目にすることのあるテストプラクティスに、スクイーズテスト(Squeeze Test、圧迫テスト)があります。ただこのスクイーズテストはカオスエンジニアリングの一例として名こそ取り上げられているものの、現時点で普及は一部にとどまっているため、それが何なのかの解説があまりなされていない状態です。

今回はこのスクイーズテストについて、オープンにされている文献と概要をまとめます。

一般的なスクイーズテストの用例について

本来、スクイーズテストは医療用語です。特定の部位を圧迫して対象者が痛みを感じるかで、靭帯や関節の損傷を推定する評価手法を指す言葉となります。
また、別の用例として、一定の力で絞った時の水の滲み具合から、対象の含水量を推定する評価方法の呼び名としても使われています。
今回のソフトウェアテストとしてのスクイーズテストの名前は、上記の一般的な用例のニュアンス(少し負荷を加えて得られた結果から、真に知りたい情報を推定する)を意識して命名されたと思われます。

スクイーズテストの解説文献について

現時点でのスクイーズテストのメジャーな日本語解説は、「カオスエンジニアリング 回復力のあるシステムの実践」(Casey Rosenthal他)に頼ることになります。この書籍では、カオスエンジニアリングや継続的ベリフィケーションを説明するための具体例としてスクイーズテストの名前を挙げています。
内容として、書籍では従来のテストやリアクティブな評価(発生した問題を見つける評価)の対に、実験やプロアクティブな評価(問題を推定・先見する評価)があり、そのプラクティスの一つがスクイーズテスト、のような説明を行っています。
また原文ではなく訳注ですが、スクイーズテストに次のような説明がなされています。

Netflix で行われる負荷テストの一種で、ベンチマークテストをはじめとする検証を行いながらパフォーマンスの変化を観察し、アプリケーションがどこまで耐えられるかを試算するもの。


次にすこし古い資料に以下の言及があります。

http://alexanderpodelko.com/blog/2014/02/11/load-testing-at-netflix-virtual-interview-with-coburn-watson/

One practice which isn’t yet widely adopted but is used consistently by our edge teams (who push most frequently) is automated squeeze testing. Once the canary has passed the functional and ACA analysis phases the production traffic is differentially steered at an increased rate against the canary, increasing in well-defined steps. As the request rate goes up key metrics are evaluated to determine effective carrying capacity; automatically determining if that capacity has decreased as part of the push.

前後の文も合わせて要約すると、スクイーズテストは本番環境上でのカナリアテストとして実施されるものであり、特定のトラフィックの負荷をかけ、その負荷の変動によってインフラリソースのメトリクスがどう変化するかを評価して、必要なリソース量を推定するもの、という説明がなされています。


更に古いプレゼンテーションの解説記録として、以下の文献があります。

http://blog.mattcallanan.net/2013/12/yow-netflix-workshop-11dec2013.html

New instances are also put through a squeeze test before full rollout to find the point at which the performance degrades. This is used to identify performance and throughput changes of each deployment.

前後の文も合わせて要約すると、スクイーズテストとは、パフォーマンスを悪化させるポイントを見つけるため、本番環境上で動かすインスタンスに負荷をかけてパフォーマンスやスループットの変化を調べるもの、という説明がされています。

スクイーズテストとは

ウェブで公開されている文献を総合するとスクイーズテストは以下のテストになります。

  • カナリアテストである。本番環境のインフラリソースは大丈夫か、対象のデプロイが本番環境のパフォーマンスに悪影響を及ぼさないかを評価することを目的とする。
  • リアクティブ(発生した問題を見つける)なテストというより、プロアクティブ(発生しそうな問題を推定する・先見する)な評価に位置づけられる。
  • 本番環境上の特定の領域に負荷をかけ、負荷をかけた時の性能効率性のメトリクスの変化量を計測する。変化量から、目的とするリソース量の必要量や、性能効率性の問題点を推定する。

スクイーズテストは、割と古くからあるものの、普及せず一部企業のみで使われてきたプラクティスです。ただカオスエンジニアリングが国内で認知され普及しつつある現状を見ると、その実践プラクティスの一つとして、国内でも使われ始める用語ではないかと思います。